- É uma ferramenta web que reduz o trabalho de transcrever imagens de documentos para texto e depois reorganizá-las, convertendo-as em Markdown estruturado
- Atualmente, a entrada pela web é centrada em upload de imagens, e a página informa que o suporte a PDF será disponibilizado em breve
- O serviço funciona com base no pacote npm llama-ocr e na Together AI
- Em JavaScript, é possível passar
filePath e TOGETHER_API_KEY para a função ocr e receber o resultado em Markdown
- Com suporte tanto a upload pela web quanto a chamadas por código, permite testar a conversão de imagens de documentos conforme fluxos manuais ou de desenvolvimento
Converter documentos em imagem para Markdown
- LlamaOCR.com é uma ferramenta que transforma documentos enviados em Markdown
- A página web informa “Upload an image to turn it into structured markdown” e gera Markdown estruturado a partir do upload de imagens
- O suporte a PDF aparece como “soon”, portanto o escopo atual é centrado em imagens
Como usar no código
- Com o pacote npm llama-ocr, é possível executar OCR em código JavaScript
import { ocr } from 'llama-ocr';
const markdown = await ocr({
filePath: './trader-receipt.jpg',
apiKey: process.env.TOGETHER_API_KEY
});
- O exemplo coloca o caminho do arquivo de imagem em
filePath e passa a variável de ambiente TOGETHER_API_KEY em apiKey
- O serviço é baseado em llama-ocr e Together AI
1 comentários
Opiniões no Hacker News
Sou a pessoa que criou o llama-ocr. Obrigado por compartilharem e pela boa recepção. Eu precisava de uma API de OCR simples, então criei isso no começo desta semana; ela faz o parsing de imagens para Markdown estruturado usando o Llama 3.2 Vision hospedado na Together.ai.
Também está disponível como pacote npm. Planejo adicionar recursos como parsing de PDF e respostas em JSON; se tiverem perguntas, vou tentar responder.
Fico me perguntando se uma transformação grande desse tipo é um comportamento esperado ou desejável. Às vezes a saída é uma lista com bullets, às vezes é uma tabela, o que torna o processamento automático posterior um pouco mais difícil.
Gostaria de saber se vocês também consideraram esse caso de uso.
Gostaria de saber que tipos de erros ele comete em comparação com sistemas de OCR existentes.
Isso é basicamente só enviar a imagem para o Llama 3.2 Vision e pedir que ele leia o texto.
Como qualquer outra saída de LLM, é vulnerável a alucinações. Isso porque ele não está lendo formatos de letras a partir dos pixels, mas julgando o texto enquanto descreve a imagem com base em imagens e legendas que aprendeu. Em especial, se for difícil de ler, ele pode inventar palavras completamente.
Parece legal. Tenho feito bastante OCR recentemente, então fico feliz em ver uma nova ferramenta nessa área. O principal nome atual em PDF→Markdown provavelmente é o Nougat[1], do Facebook, e eu gostaria de conectá-lo ao DSPy para comparar qual dos dois se sai melhor com livros de filosofia.
O projeto Zerox[2], da startup vinculada por este repositório, também parece bom e, no mínimo, tem uma divulgação muito mais polida que a do Nougat. Se algum especialista de verdade passar por aqui, gostaria de ouvir correções ou conselhos.
Tenho duas dúvidas. 1) O que é a Together.ai e se esse modelo é open source. O site parece um serviço de hospedagem, e a página “Custom Models”[3] parece mais voltada a fine-tuning personalizado do que ao treinamento de modelos proprietários próprios. Parece haver um perfil no HuggingFace, mas não está claro se é realmente deles: https://huggingface.co/TogetherAI
2) No GitHub está escrito “hosted demo”, mas a parte hospedada parece ser apenas uma WebGUI pequena e limpa. Isso significa que este recurso só pode ser usado, agora e no futuro, por chamadas de API?
P.S.: no navegador desktop, o link do cabeçalho está quebrado e o onClick não é disparado.
[1] https://facebookresearch.github.io/nougat/
[2] https://github.com/getomni-ai/zerox
[3] https://www.together.ai/products#custom-models
Houve algo curioso. Enviei um webcomic como exemplo; todas as falas estavam em maiúsculas, mas a saída misturou, de forma inconsistente entre os painéis, capitalização de frase e capitalização de título.
Também testei um problema para o qual eu realmente gostaria de usar OCR. Tenho slides antigos que precisam ser digitalizados, a maioria com rótulos; ao enviar um deles, ele o descreveu como parecendo uma foto de slide ou quadro de filme, antigo e amarelado, com um recorte retangular escuro no centro, e disse que o texto era “Once Upon a Time” e o número era “1069”.
A descrição desnecessariamente repetitiva do slide já é um problema, mas o texto real nem estava em cursiva: era “Once Uniquitous.”, e o número era 106g. Era bem claramente um ‘g’, não um ‘9’.
O interessante é que isso pode ser um exemplo de viés do modelo. Ele viu o slide como algo tão antigo que alucinou um título totalmente clichê, e o retângulo preto era resultado de luz incidindo pela frente para que a parte transparente não aparecesse, mas ele deixou isso passar.
Além disso, parece haver limites de tamanho de arquivo ou resolução não documentados na própria API.
Recentemente usei llama3.2-vision para processar folhas de lances em papel de um leilão beneficente, e ele foi bastante preciso mesmo com caligrafias bem ruins. Quero usá-lo também no evento do ano que vem.
Porém, é bem irritante a dificuldade de fazê-lo gerar CSV de forma consistente. ChatGPT e Gemini parecem melhores nessa parte, mas não cheguei a automatizar.
A escala é de cerca de 100 páginas de folhas de lances, então um certo volume de limpeza manual é aceitável. Com certeza é melhor do que gastar o tempo dos voluntários.
https://github.com/philips/paper-bidsheets
Não é gratuito, mas a precisão em documentos manuscritos é de nível altíssimo. Tenho viés, já que sou o fundador, mas o nível de precisão atual realmente me anima. Para um projeto de 100 páginas, custaria só 12 dólares e poderia economizar tempo.
Tenho feito bastante OCR recentemente, principalmente para digitalizar textos em fotos de família. Modelos comuns de OCR são péssimos, e LLMs se saíram muito melhor. Entre os modelos que testei, o Gemini Flash foi disparado o melhor, mas ainda assim houve falhas e alucinações em quantidade suficiente para que fosse mais rápido digitar à mão
É irritante porque parece que está quase funcionando, mas não funciona. Esta ferramenta parece pior. Às vezes responde só com o texto; outras vezes devolve uma descrição geral como “The image is a scanned document with handwritten text...”. Eu esperava que houvesse algo como um fine-tuning que conseguisse superar o Gemini Flash; teria economizado muito tempo, então é uma pena
convert -density 76 input.pdf output-%d.pnghttps://github.com/philips/paper-bidsheets
O Flash é interessante; também gostaria de saber quais LLMs foram testados
Cortar as imagens para deixar só a parte do texto, remover as bordas e aumentar o contraste ajudou enormemente. Escrevi este post em 2015, mas ele ainda se aplica muito bem ao GPT: https://www.danvk.org/2015/01/07/finding-blocks-of-text-in-a...
Para o GPT, foi melhor fornecer no máximo alguns parágrafos de cada vez, em vez de uma página inteira. Quanto mais curto o texto, menor a chance de alucinação
O OCR que virou assunto recentemente era péssimo, e eu esperava que este fosse melhor. Ao colar imagens individuais no chat, o ChatGPT 4o foi bom, mas ainda não testei a API. Não sei quanto custaria processar 6.500 fotos; muitas delas não têm nada escrito, mas também não tenho uma forma fácil de filtrá-las
Ele ainda não é bom em retornar a posição do texto, mas, nos meus testes, o desempenho de OCR foi impressionante
Questiono se isto deveria ser um post “Show HN”. Parece apenas um frontend, e também não vejo nada que o conecte diretamente ao Llama do nome. Talvez a together.ai tenha fornecido o espaço em nuvem
Usei um algoritmo genético para posicionar 500 círculos e formar uma frase, depois inseri a frase desenhada com círculos físicos reais
https://www.instagram.com/marekgibney/p/BiFNyYBhvGr/
Curiosamente, ele reconhece bem os círculos, mas não vê a frase. Respondeu algo como “a imagem não contém texto ou elementos que possam ser representados em Markdown; é apenas uma composição visual de círculos, sem informação a ser traduzida para Markdown”
Como a resposta não é determinística, também tentei várias vezes com a imagem original, mas ela nunca funcionou. Por outro lado, todos os efeitos de filtro passa-baixa que apliquei funcionaram com alta taxa de sucesso
https://imgur.com/q7Zd7fa
De longe fica mais fácil de ler
O jeito como o algoritmo genético foi usado é bem legal. Gostaria de ver o código, ou pelo menos a função de recompensa
Foi engraçado. Coloquei 3 screenshots de um documento longo e ele processou relativamente bem, mas, ao revisar, percebi que a IA tinha criado um parágrafo que não existia no original
Provavelmente, por causa das características dos screenshots, algumas frases ou parágrafos foram cortados no meio, e isso acionou a tendência do LLM de preencher lacunas. Ele não conseguiu deixar um parágrafo inacabado como estava e até adicionou um parágrafo curto de conclusão que não existia de forma alguma no documento original
Testei com um scan antigo do esquema da placa-mãe Asus P3B-F de 1997
Ele extraiu apenas parte do texto do bloco de título, como o nome do projeto e a data, e confundiu 8/B e 1/I em todos os casos, apesar de a fonte ser nítida
As informações realmente úteis viraram algo como “Tables / Table 1: [Insert table 1 here] / Other Elements / [Insert other elements here]”