;(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

Filmes pornô com celebridades? A maioria é fruto de inteligência artificial

Gal Gadot é apenas a mais recente vítima de pessoas que editam vídeos pornográficos substituindo a face dos atores pela de outras celebridades - Reprodução
Gal Gadot é apenas a mais recente vítima de pessoas que editam vídeos pornográficos substituindo a face dos atores pela de outras celebridades Imagem: Reprodução

Do UOL, em São Paulo

13/12/2017 04h00

É bem provável que você já tenha visto links suspeitos ou gifs que mostram supostos vídeos pornográficos estrelados por famosos. O que ficou mais famoso recentemente envolve a atriz Gal Gadot (a estrela de "Mulher-Maravilha"), no qual ela pratica sexo incestuoso com um meio-irmão.

O vídeo em questão é falso - até aí, sem grandes surpresas. O que é, de certa forma, interessante (e também assustador) é a maneira como ele foi criado: usando um algoritmo de inteligência artificial.

VEJA TAMBÉM

A obra é criação de um usuário do fórum Reddit com apelido de "deepfakes". Ele usou como base ferramentas de código aberto voltadas para o aprendizado automático, como TensorFlow, criado pelo Google e gratuito para pesquisadores e estudantes. E "ensinou" à sua criação a trocar rostos em vídeos do tipo.

O material disponível para essas alterações é vasto: tanto do lado dos vídeos pornográficos quanto em relação a fotos e vídeos de celebridades fazendo as mais diversas expressões. O resultado não é capaz de enganar quem olhar com mais atenção, mas é o suficiente para espectadores mais empolgados - e menos atentos - tomarem esses materiais como sendo reais.

E engana-se quem pensa que a tarefa exige um supercomputador: um PC equipado com uma placa de vídeo mediana poderia cumprir a tarefa de pesquisar imagens e trocar o rosto de alguém em um vídeo em algumas horas.

Risco real

É claro que a criação de deepfakes abre um precedente bastante perigoso, que é a utilização de imagens de pessoas para implicá-las em atos ou situações nas quais elas não participaram efetivamente.

Ainda assim, em entrevista ao site Motherboard, ele disse que só "encontrou uma forma inteligente de fazer troca de rosto", que "qualquer tecnologia pode ser usada para o mal" e que é possível evitar isso.

TensorFlow - Reprodução - Reprodução
O TensorFlow, ferramenta de inteligência artificial com código aberto, acabou sendo utilizado para criar um algoritmo que edita vídeos automaticamente
Imagem: Reprodução

Em nenhum momento ele se manifesta sobre questões como consentimento de quem tem o rosto manipulado ou, ainda, sobre como isso pode criar problemas nas vidas de qualquer um. Afinal, estima-se, de acordo com dados do Google, que 24 bilhões de selfies foram carregadas no Google Photos entre 2015 e 2016 - sem contar as publicadas em outros lugares, como redes sociais, e também outros tipos de mídia, como vídeos.

O material para esse tipo de manipulação, portanto, é vasto.

De acordo com o especialista em inteligência artificial e fundador da creative.ai, Alex Champandard - também em entrevista ao Motherboard -, esse tema merece um "sonoro e público debate". "Todos precisam saber como é fácil manipular fotos e vídeos, ao ponto de que não saberemos distinguir o que é real ou não daqui a alguns meses. E hoje isso pode ser feito por apenas uma pessoa com computadores comuns".

Ainda segundo Champandard, a solução para evitar problemas seria pagar na mesma moeda e usar desenvolvimentos em inteligência artificiar para criar meios de detectar e diminuir a circulação desse tipo de material. Até que isso aconteça, porém, devemos encontrar cada vez mais conteúdo do tipo.