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

Maradona vivo no Qatar: IA deixa conversar com craque argentino; veja vídeo

Give&Get
Imagem: Give&Get

Marcella Duarte

De Tilt, em São Paulo

27/11/2022 11h26Atualizada em 28/11/2022 10h47

Esta é a primeira Copa do Mundo após a morte do ídolo argentino Diego Maradona. Mas ele está no Qatar: uma empresa argentina recriou, virtualmente, a imagem do jogador.

O camisa 10, que rivalizava com nosso Pelé, está a bordo do avião Tango D10S — um jato Bombardier CL-600-2B16 Challenger 601. É um museu itinerante em sua homenagem, que agora está pousado no aeroporto de Doha.

Os torcedores que chegam à sede da Copa do Mundo podem interagir com Maradona em um telão. É possível até conversar com ele, em dez idiomas diferentes, graças a uma inteligência artificial capaz de simular suas respostas.

A voz, replicada por um sintetizador de computador, é praticamente idêntica à do jogador na década de 90.

Veja uma apresentação:

A tecnologia usada para desenvolver a figura de Maradona envolveu o trabalho de técnicas de filmagem em 3D e a análise de oito horas de gravações dele em campo. O resultado foi uma reprodução quase perfeita do astro argentino, falecido em novembro de 2020, aos 60 anos, após uma parada cardíaca.

Os visitantes também podem gravar um recado para Maradona, que, segundo os organizadores, posteriormente será enviada para o espaço em um satélite, junto com um par de suas chuteiras.

Ele também deixa uma emocionante mensagem para seus fãs: "Antes de me despedir, gostaria de dizer que o futebol ainda é o esporte mais bonito e saudável do mundo. E, sim, não vou mentir para vocês, estou empolgado com a Copa do Mundo, como todos vocês. Espero que o futebol dê alegria novamente aos argentinos. Espero que possamos comemorar novamente como em 86, nós merecemos. Nós merecemos, gente. E peço a vocês um favor: não se esqueçam de mim, porque carrego vocês no meu coração".

Assista na íntegra:

O exterior da aeronave foi customizado pelo artista Maxi Bagnasco, com imagens do craque durante a Copa do Mundo de 1986, na qual a Argentina se sagrou campeã. A iniciativa é da fintech argentina Give&Get.

"É um sonho que virou realidade. Um resultado assombroso da tecnologia, desenho e paixão que se alcançou com tempo", destaca Martin Rabaglia, CEO da Genosha, agência responsável pelo desenvolvimento audiovisual da figura.

Após uma estreia vexatória na Copa do Mundo 2022, com uma derrota para a Arábia Saudita, a Argentina venceu o México neste sábado (26). Com o resultado, o time de Lionel Messi busca a classificação para as oitavas de final, em uma partida contra a Polônia, na quarta-feira.

*Com informações de Lancepress