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

Racista é suspenso do Twitter por usar IA para embranquecer Pequena Sereia

Protagonista Ariel, de "A Pequena Sereia", será vivida pela cantora Halle Bailey - Reprodução/Youtube
Protagonista Ariel, de "A Pequena Sereia", será vivida pela cantora Halle Bailey Imagem: Reprodução/Youtube

Da Redação

Em São Paulo

13/09/2022 14h31

Um usuário do Twitter foi suspenso na noite desta segunda-feira (12) depois de promover uma suposta inteligência artificial capaz de "embranquecer" a protagonista de A Pequena Sereia.

A adaptação live action da Disney, prevista para maio de 2023, revelou seu primeiro trailer no fim de semana. A protagonista, originalmente branca nos desenhos, é vivida pela atriz e cantora Halle Bailey, que é preta.

Embora a escalação de Bailey já tivesse sido anunciada há mais de um ano, sua primeira aparição como Ariel gerou muitos comentários nas redes sociais. Enquanto alguns aprovaram a nova versão, houve quem reclamasse da mudança, com comentários abertamente racistas.

O perfil @vandalibm divulgou ontem uma nova versão do trailer na qual Bailey é substituída por uma atriz branca, criada como deepfake. Segundo ele, o vídeo era resultado de uma inteligência artificial criada por outro usuário, @TenGazillionIQ, que ele classificou como um "criador de memes e cientista de IA". Confira na imagem abaixo.

Print de tweet racista do usuário @vandalibm sobre A Pequena Sereia - Reprodução/Twitter - Reprodução/Twitter
Imagem: Reprodução/Twitter

"Ele consertou A Pequena Sereia, e transformou a atriz lacradora em uma garota ruiva e branca", afirmou na postagem. "Ele pode consertar o filme inteiro quando estrear usando 4x A600 [quatro unidades de processamento gráfico A6000, da NVidia, uma das mais poderosas do mercado] em menos de 24 horas".

(Originalmente, @vandalibm utilizou o termo "woke", usado de maneira pejorativa para descrever pessoas ou obras culturais progressistas, especialmente associadas à causa racial, feminista ou LGBTQIA+. No Brasil, seu uso negativo seria o equivalente ao de "lacrador".)

No tuíte seguinte, ele insistiu que a postagem não era racista. "Isto é apenas para propósitos educacionais, por favor não interprete erroneamente de um jeito racista".

Reação da comunidade e da plataforma

A polêmica foi imediata, com dezenas de respostas.

"Sim, é um tuíte racista. Você chamou uma atriz negra, existente em um papel que ela ganhou com seu talento, de atriz 'lacradora' por nenhum outro motivo além da cor da sua pele", afirmou outro usuário.

"Isso é absolutamente racista e não há outra maneira de interpretar. Você descreve torná-la branca como um modo de 'consertá-la', você a chamou de lacradora por literalmente ser preta", escreveu outro

A conta de @vandalibm foi suspensa pelo Twitter. A conta do suposto cientista de inteligência artificial @TenGazillionIQ, que também comentou na postagem do amigo, está temporariamente indisponível por "violar as políticas da plataforma", segundo informa o Twitter.