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

Sinistro? Amazon testa recurso para você 'conversar' com mortos via Alexa

Tommaso79/iStock
Imagem: Tommaso79/iStock

Nicole D'Almeida

Colaboração para Tilt*, em São Paulo

23/06/2022 17h44Atualizada em 24/06/2022 14h46

A Amazon está desenvolvendo uma forma de seus usuários conversarem com parentes já falecidos por meio da Alexa, assistente de voz da empresa. O recurso foi apresentado ontem (22) durante a conferência de tecnologia Re:Mars 2022, realizada pela Amazon, em Las Vegas (EUA), nesta semana.

Com ajuda da IA (inteligência artificial) da Alexa, a tecnologia é capaz de imitar a voz de qualquer pessoa a partir de menos de um minuto de áudio fornecido, segundo Rohit Prasad, vice-presidente sênior e cientista-chefe da Amazon.

A demonstração foi feita através de um pequeno vídeo no qual uma criança pergunta a Alexa: "Alexa, a vovó pode terminar de ler o Mágico de Oz para mim?"

O novo recurso pode "fazer durar as memórias [dos entes queridos]", especialmente porque "muitos de nós perdemos alguém que amamos" durante a pandemia de covid-19, afirmou o executivo.

O alto-falante inteligente confirma o pedido em sua voz padrão (robótica) e, em seguida, é substituída por um tom mais humano ao iniciar a narração do livro.

"Em vez da voz de Alexa lendo o livro, é a voz da avó da criança", explicou Prasad.

O recurso ainda está em fase de desenvolvimento. A empresa não informou se e nem quando ele será lançado ao público.

Black Mirror da vida real?

Apesar de ser útil para pessoas que desejam ouvir a voz de alguém que já faleceu, a função em teste parece assustador algumas pessoas, além de levantar preocupações éticas e de segurança.

"Se um cibercriminoso puder replicar com facilidade e credibilidade a voz de outra pessoa com uma pequena amostra de voz, ele poderá usar essa amostra para se ar por outros indivíduos", afirmou Rachel Tobac, executiva-chefe da organização SocialProof Security, ao jornal The Washington Post.

Além disso, outra especialista ouvida pela reportagem, Tama Leaver, professora de estudos da Internet na Curtin University, na Austrália, alertou para as questões sobre consentimento.

"Há uma ladeira escorregadia real de usar os dados de pessoas falecidas de uma maneira que é assustadora por um lado, mas profundamente antiética por outro, porque eles nunca consideraram esses vestígios sendo usados dessa maneira", destacou.

Para Leaver, se recursos como esse forem liberados, será preciso informar, via testamento, que a voz e história nas mídias sociais são de propriedade de seus filhos, e que eles são os responsáveis por permitir ou não que seja usada.

Internautas também ficaram preocupados com a notícia do recurso em teste da Amazon

"Em quanto tempo os criminosos poderão usá-lo para ligar para os membros de sua família implorando por dinheiro? Ou pedir-lhes números de seguro social? Ou informações bancárias?", tuitou uma internauta.

"É doce, mas ao mesmo tempo incrivelmente assustador? Perdi minha mãe no ano ado em agosto e morreria para ter uma última conversa adequada com ela, mas não faria isso por um maldito dispositivo", escreveu outro.

*Com informações dos sites Cnbc e Business Insider