Executando verificação de segurança...
3

Removendo Fundo de Imagens via IA rodando diretamente no *Browser*

Olá, pessoal, sou novo aqui, apesar de conhecer sobre o TabNews a algum tempo. Espero que gostem da minha primeira postagem.

Quero apresentar a vocês um webapp que fiz, em um final de semana, usando a biblioteca TransformersJs do Hugging Face.

A ideia é que seja possível o usuário fazer a remoção do fundo de imagens de forma automática, sem precisar de um servidor. Ou seja, todo o processamento é feito exclusivamente no navegador. Sendo a única coisa baixada, o modelo utilizado para tal tarefa.

Isso foi possível utilizando o TransformersJs do Hugging Face juntamente com a sua API de pipeline. O Pipeline API permite "executar um conjunto de passos pré-programados" para certas tarefas. Aqui, o pipeline utilizado foi 'removal-background'. (https://huggingface.co/docs/transformers.js/api/pipelines#module_pipelines.BackgroundRemovalPipeline)

Era para ser simples, mas a documentação ainda está (ou estava) bem crua. Algumas dificuldades foram, como executar o modelo e extrair o resultado do processamento. Inclusive tive que abrir uma Issue no repositório do TransformersJs para entender o que estava acontecendo. Ainda bem que teve uma gente boa para me ajudar. (https://github.com/huggingface/transformers.js/issues/1230)

Resumindo brevemente, basicamente o Pipeline API estava retornando a imagem com o suposto fundo removido, mas com uma semi-transparência, algo que foi bem difícel perceber e arrumar. No entanto, a solução é simples, fazer um pós-processamento para normalizar os pixels (Algo que, no meu entendimento, não faz sentido não estar embutido no próprio Pipeline)

No fim, deu tudo certo, tentei fazer uma UI interessante com uma boa UX e gostei do resultado.

Tentei adicionar uma imagens aqui, mas não consegui 😬

REPOSITÓRIO: https://github.com/LuSrodri/canva-copy
WEBAPP: https://semfundos.lusrodri.me/

Os próximos passos agora são:

  • Garantir que funcione em um dispositivos móveis. Aparentemente há uma limitação por parte da biblioteca ou por parte do modelo (Preciso investigar melhor);
  • Adicionar a funcionalidade de poder colocar uma cor sólida de fundo;
  • E expandir cada vez mais, para bater de frente com o Canva, só que AI-first e Privacy-first.

Enfim, esse WebApp é um pequeno projeto pessoal e gostaria de saber sobre a opinião de vocês.

Obrigado por ler até agora :)

Carregando publicação patrocinada...
2

Já tentei testar isso de todas as formas (jogar a carga de processamento tão exigente para o Browser), ainda não foi possível ter um resultado minimamente utilizável em nosso software de E-commerce b2b. Imagens maiores e cargas mais complexas principalmente quando o usuário com uma maquina fraca (acredite, eles são praticamente 90% dos usuários) tenta usar trava tudo, e acionavam o suporte toda hora. Em nossas máquinas aqui do escritório, Alien i9 de ultima geração funciona que é uma beleza, mas na vida real não deu certo ainda.

1

Então, a forma que achei para fazer essa parte de processamento é utilizar webworkers. Tanto que se você acessar o site hoje, da para perceber que tem um pequeno delay para carregar o file input e as imagens de exemplo, pois a máquina está carregando o modelo internamente no navegador.

No fim do dia acaba demorando o mesmo tempo do que não ter um webworker, mas só o fato de não bloquear o resto da navegação (por funcionar de forma assíncrona), melhora em muito a percepção do usuário, tendendo a achar que é mais rápido do que realmente é.

É quase que um truque que envolve UI, UX, e carregamento assíncrono usando webworkers.