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

Dúvida: Como usar o OCR de maneira eficiente?

Recentemente, estive trabalhando em um projeto no qual eu precisaria ler a foto de uma nota fiscal, usando a API (veja o que é uma API) do Google Cloud Vision para extrair o texto de uma nota e apartir dele, inferir o que seria descrição, preço, nome, enfim categorizar o texto.

O Meu grande problema 🤔

Nesse ponto eu me deparei com um grade dilema: como eu poderia encontrar um sentido em um monte de texto totalmente desestruturado? Percebi que isso era muito mais difícil do que eu pensei no início, e comecei a buscar soluções.

Surgem as ideias 💡

Brincando de batalha naval 💣

Comecei a escrever códigos que me vinham à mente, pensei em usar a posição relativa entre os blocos de texto (usando cordenadas como no jogo batalha naval) e seus possíveis títulos. Meu colega de trabalho até usou uma lib para desenhar os blocos identificados pela API do Cloud Vision, mas mesmo assim, não conseguimos transformar isso em algo semânticamente útil para o código. Além disso essa abordagem pareceu perigosa, pois existem inúmeros tipos de nota e a própria API nem sempre separa os blocos de texto em coisas que fazem sentido.

imagem processada pela api do cloud vision

Apelando para o machine learning 🤖

Depois de quebrar a cabeça imaginei que usar inteligência artificial para inferir os labels de cada parte do texto pudesse ajudar, mas como também sou novo nesse assunto, continuei bem perdido. Caso possa me ajudar nessa parte de IA, eu detalhei melhor nesse outro post onde eu falo das minhas dúvidas em relação à tokenização de strings. Mas se você acha que eu devo tentar outra abordagem, por favor, me conte aqui nos comentários.

Outros posts que eu escrevi com muito carinho 😄

Se você curte NeoVim e aplicações de terminal, por favor não deixe de visitar o post onde eu conto Por que você deveria usar NeoVim para programar e A melhor "IDE" que você verá hoje.

Carregando publicação patrocinada...
2

Nathan, eu não saberia como lhe ajudar na prática, mas achei fascinante o problema a ser resolvido! Nesses casos, eu tento imaginar como que eu humano faria para entender a nota fiscal, pois se há um padrão nisso, talvez fique mais fácil.

Por exemplo: as notas fiscais seguem um padrão de organizar as informações por regiões? No sentido de que, alguns dados geralmente ficam na parte de cima do layout, algumas na parte do meio, e algumas na parte de baixo. Talvez isso possa ser um indicativo de quais informações possam estar lá (mas também falho se o layout for completamente diferente).

Em paralelo, não sei se isso vai ajudar de alguma forma mas vou deixar aqui, que é um projeto que transforma desenhos em HTML. Entendo que não vai ajudar a entender a semântica das coisas, mas vai que ajuda de alguma forma a ter um OCR melhor: https://www.microsoft.com/en-us/ai/ai-lab-sketch2code

1

Obrigado, Filipe, parece um projeto muito interessante e com certeza ajuda. Mas me surgiu uma dúvida agora. No modelo de site a que o Tabnews se propõe a ser, eu deveria escrever um comentário como esse? Um comentário como "Muito obrigrado!" ou "Gostei da ideia" não tem um valor intrínseco, mas acho que são bons para interação da comunidade...

2

Nathan, é uma boa pergunta e isso por si só tem valor nesse momento do projeto, mas que já está respondido aqui na publicação sobre o lançamento das TabCoins, mais especificamente na seção Quando devo utilizar minhas TabCoins.

Eu evitaria usar um comentário somente para agradecer, quando você poderia as vezes esperar um pouco mais para aproveitar para trazer outras informações com valor concreto, do tipo, "Muito obrigado pela sugestão, mas testei aqui e não se aplica ao projeto por X motivo, mas isso me deu a ideia Y". Isso na minha visão tem muito mais valor que um simples "Muito obrigado", que poderia ser representado por uma TabCoin 🤝