;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Papa de casaco e Trump preso: aprenda a identificar fotos criada por IA

Imagem falsa de Donald Trump sendo preso; cena foi gerada por inteligência artificial - Reprodução/Eliot Higgins
Imagem falsa de Donald Trump sendo preso; cena foi gerada por inteligência artificial Imagem: Reprodução/Eliot Higgins

Rafael Souza

Colaboração para Tilt, de São Luís

29/03/2023 04h00

Imagens do papa usando um casaco estiloso e de Donald Trump sendo preso viralizaram nos últimos dias. Ao contrário do que alguns acreditaram, elas não am de cenas produzidas por inteligência artificial.

Os exemplos reacenderam o debate sobre o desafio de identificar se uma foto é ou não real. Segundo especialistas ouvidos por Tilt, existem pistas que ajudam a descobrir, e nem sempre é preciso equipamentos de ponta para isso.

Segredo está nos detalhes

"A IA não cria características muito específicas. No caso do rosto humano, se você der zoom em uma imagem real, com boa resolução, vai notar manchas e imperfeições normais da pele. Isso não existe em uma imagem por inteligência artificial", afirma Wanderson Castilho, perito digital há 20 anos.

O pesquisador João Phillipe Cardenuto, especialista na área de detecção de fraudes em imagens científicas, acrescenta que, às vezes, as fotos criadas por inteligência artificial deixam ar erros grotescos, como:

  • Orelhas: ao incluir um brinco na pessoa, o ório fica mal colocado na imagem.
  • Mãos: pode acontecer da pessoa ter seis, sete dedos em uma mão. Ou a região ficar sem definição.
  • Olhos: a falta de reflexo do olho diante da luz ambiente.

"Quando a luz incide em uma pessoa da esquerda para a direita, o natural é que o olho faça esse reflexo, mas a inteligência artificial ainda não faz esse tipo de coisa", explica Cardenuto, formado em engenharia de computação e ciência da computação pela Unicamp (Universidade Estadual de Campinas).

Outros indícios

  • fundo da cena muito desfocado;
  • textos em segundo plano são indecifráveis;
  • falta de simetria no rosto (olhos de tamanhos diferentes, por exemplo);
  • pedaços da imagem parecem ter sido pintados ou borrados;
  • objetos se misturando à pele.

Sobre uma das imagens falsas de Trump sendo preso, o pesquisador Cardenuto explica que o objeto que causa ruído é o cassetete que ele carrega na parte de trás, além da falha no boné de um dos policiais. Ele destaca ainda que a IA pode apresentar erros na utilização de siglas de órgãos, como a polícia.

No caso do papa de casaco, o perito Castilho ressalta que as rugas do rosto dele são mais acentuadas no mundo real. A postura extremamente ereta na imagem fake também não condiz com o papa verdadeiro.

Outros elementos que provam que a cena não é real:

  • o objeto que ele carrega na mão direita (parece uma garrafa), que está desfocado e parece fazer parte do casaco;
  • os dedos da mão direita estão com uma definição esquisita;
  • ao dar um zoom no crucifixo, a imagem fica muito borrada;
  • e sua mão esquerda, que contém dois anéis -- o anel papal sempre é usado na mão direita.
Repare na mão direita do papa (à esquerda na imagem); ela está sem definição e esquisita. Sem contar que o objeto que ele está segurando, que lembra uma garrafa, também está parecendo uma falha - Reprodução/Reddit/Midjourney - Reprodução/Reddit/Midjourney
Repare na mão direita do papa (à esquerda na imagem); ela está sem definição e esquisita
Imagem: Reprodução/Reddit/Midjourney

Identificar falsificações no geral

Uma análise dos pixels que formam uma foto podem ajudar a comprovar uma falsificação feita por programas como Photoshop, por exemplo, completa destaca Castilho - no caso de imagens geradas por IA, isso já é mais difícil.

"Na falsificação que não é feita por IA, uma ou mais imagens reais são modificadas ou sobrepostas. Nisso, é possível perceber alterações nos pixels por meio de análises mais aprofundadas. Mas só de reparar em borrões ou diferenças de tonalidades, por exemplo, já percebemos quando há uma modificação na imagem", destaca.

O pesquisador Cardenuto aponta que, de forma mais técnica, também é possível verificar uma modificação em uma imagem real observando os dados do arquivo gerado, onde podem ser encontradas as informações da origem da foto, como saber qual sensor foi usado para a captura e, assim, saber se partes da imagem são originais ou copiadas.

"Quando a modificação é mais grosseira, até o ajuste do contraste da imagem, ou no brilho, haverá uma área que ficará mais uniforme e outra que vai 'saltar aos olhos'. Essa área é uma evidência de que houve uma manipulação", conclui.

Alguns sites podem ajudar

Os entrevistados sugerem o uso de sites que, gratuitamente, permitem a verificação de fotos.

Um exemplo é o Forensically, usado para investigar imagens digitais. É uma plataforma popular entre entusiastas da ufologia que buscam descobrir se imagens de Óvnis aram por alguma montagem.

O site oferece opções como lupa (para ampliar partes selecionadas da imagem), quantidade de emissão de luz registrada no arquivo e metadados.

Outra alternativa é usar o sistema de busca reversa de imagens no Google. A partir de uma imagem, o buscador faz uma comparação com outras iguais ou parecidas e exibe os resultados.

A partir disso, é possível checar se há referências de sites oficiais e confiáveis — vale também ler o contexto, pois eles também podem estar denunciando que se trata de uma imagem falsa criada por inteligência artificial.

*Com texto de Guilherme Tagiaroli