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

App


Novo app agrava problema ético do deepfake, que troca rostos em vídeos

Página do app Zao, de troca de rostos (deepfake) na App Store chinesa - Reprodução
Página do app Zao, de troca de rostos (deepfake) na App Store chinesa Imagem: Reprodução

Gabriel Joppert

Colaboração para Tilt

02/09/2019 14h11

Sem tempo, irmão

  • Lançado na sexta, aplicativo Zao troca rostos em vídeos e viralizou rapidamente
  • Em segundos e a partir de apenas uma foto, app coloca usuário dentro de filmes e séries
  • Empresa atualizou política de privacidade no domingo após reclamações em massa
  • Preocupação com facilidade e qualidade dos "deepfakes" volta à tona

Já há algum tempo falamos do riscos da técnica conhecida como "deepfake", que consiste na troca de rostos de uma pessoa no corpo de outra em uma foto ou vídeo, usando inteligência artificial para deixar o truque mais verossímil. De cara, já vimos ser usado para pornôs falsos com celebridades. Antes complexa, a ténica agora está ao alcance de usuários comuns.

Lançado na última sexta-feira (30), o Zao rapidamente subiu ao topo das listas de aplicativos gratuitos mais baixados na China. Funciona assim: após ser alimentado com algumas fotos do usuário, ele consegue em poucos segundos inserir o rosto dele em cenas de filmes ou séries famosas, no lugar do rosto de estrelas como Leonardo DiCaprio ou Hugh Jackman.

No Twitter, o usuário @AllanXia demonstrou o poder do Zao: montagens foram feitas usando uma única foto dele. A qualidade das montagens fez com que as cenas viralizassem rapidamente na internet e, quase com a mesma velocidade, surgiram queixas em relação à privacidade dos usuários e a preocupação com o mau uso das imagens geradas.

A primeira versão do app dava aos desenvolvedores o direito "livre, irrevogável, permanente, transferível e re-licenciável" para todo o conteúdo gerado pelos usuários.

Após milhares de avaliações negativas do aplicativo na AppStore do iOS chinês, a empresa soltou, no domingo (1), uma declaração de que estava atualizando os termos e que usaria as imagens dos rostos e os minivídeos resultantes apenas para melhorar o próprio aplicativo e outros fins pré-aprovados pelos usuários.

"Nós entendemos a preocupação com privacidade. Recebemos o retorno e iremos consertar os problemas que não levamos em consideração, o que levará algum tempo", dizia a declaração no perfil do ZAO no Weibo.

O Zao pertence à Momo Inc., empresa chinesa que tem um aplicativo de encontros e streaming de vídeo, e que está listada na bolsa de valores nos EUA.

Por enquanto, como medidas de "contenção de danos", a empresa chinesa Tencent —dona do mais popular serviço de mensagens no país, o Wechat— anunciou que está removendo qualquer conteúdo do Zao de sua plataforma.

O aplicativo ainda não está disponível no Brasil para iOS e nem para Android e, contatada pelo Tilt, a empresa ainda não deu retorno sobre uma possível data de lançamento.

O Zao tem até um gerador de memes! Como será quando este tipo de tecnologia estiver ao alcance de todos?

'Deepfakes'?

O Zao impressionou os usuários pela rapidez, qualidade e facilidade da troca de rostos nos vídeos. Em vez de necessitar dezenas de imagens, ele usa apenas uma ou então ajuda o usuário a captar certas expressões para mapear o rosto. Como o aplicativo já tinha uma série de cenas padrão para serem usadas, a velocidade de criação e a qualidade dos vídeos foi aprimorada. O Zao não consegue trocar o rosto com qualquer cena escolhida.

Os vídeos "deepfake" já vem, há alguns anos, chamando a atenção pelo seu potencial para gerar desinformação —como mostrado com um vídeo falso de Mark Zuckerberg— ou para ferir direitos de privacidade e imagem, como no citado caso das famosas retratadas em vídeos pornô usando o recurso.

Letras miúdas

Políticas de privacidade potencialmente abusivas são comuns em aplicativos gratuitos e que viralizam rapidamente. Um caso similar recente foi o do FaceApp. O aplicativo foi lançado em 2017, mas teve um novo surto de popularidade este ano. Similarmente ao Zao, ele usa fotos e filtros de inteligência artificial para alterar os rostos dos usuários, mas para criar versões mais velhas delas.

O aplicativo gerou polêmica e preocupações dos usuários após chamarem atenção ao fato de que a sua política de privacidade permitia que eles usassem as imagens enviadas pelos usuários para praticamente qualquer fim. A empresa respondeu declarando que não armazena as imagens por mais de 48 horas nem compartilha os dados com terceiros.

SIGA TILT NAS REDES SOCIAIS