- Um modelo de OCR de imagem para Markdown de alto desempenho que vai além do simples reconhecimento de caracteres e converte o documento inteiro em uma estrutura Markdown
- Converte fórmulas matemáticas para o formato LaTeX, adiciona descrições automáticas às imagens e gera tabelas em HTML/Markdown, produzindo uma saída otimizada para uso com LLMs
- Reconhece assinaturas, marcas d’água e caixas de seleção e as converte para formatos como
<signature>, <watermark>, ☐/☑, demonstrando excelente capacidade de processamento por tipo de elemento do documento
- Pode ser usado facilmente por meio do Transformers da Hugging Face ou de um servidor vLLM, e também em formato de app web por meio da biblioteca
docext
- Apresenta nível muito alto de precisão e estruturação para diversos tipos de documentos e layouts complexos, sendo muito útil em contratos, formulários, relatórios etc.
Visão geral do projeto e importância
- O Nanonets-OCR-s é um modelo inovador que vai além das funções de OCR convencional (reconhecimento óptico de caracteres), analisando o significado e a estrutura do documento e gerando a saída em formato Markdown
- Ele diferencia fórmulas, imagens, tabelas, caixas de seleção, assinaturas e marcas d’água, convertendo cada elemento em formas de marcação e representação semanticamente significativas (LaTeX, HTML, Markdown etc.), o que o torna adequado para tarefas downstream e para processamento de documentos com base em LLMs (grandes modelos de linguagem)
- Em comparação com projetos open source de OCR já existentes, demonstra melhor desempenho na extração de estruturas documentais complexas e de vários elementos semânticos, além de maior potencial de aplicação em fluxos de trabalho automatizados
- É uma versão ajustada por fine-tuning do modelo Qwen2.5-VL-3B-Instruct, capaz de identificar diversos componentes do documento e marcá-los com um markup significativo
Principais características
- Reconhecimento de fórmulas em LaTeX
- Converte e gera automaticamente equações e fórmulas matemáticas presentes no documento em sintaxe LaTeX, conforme o tipo inline(
$...$) ou display($$...$$)
- Descrição inteligente de imagens
- Para cada imagem, descreve em detalhes a natureza, o estilo e o conteúdo da imagem dentro da tag
<img>
- Também descreve logotipos, gráficos e diagramas com contexto e significado, convertendo-os em entradas adequadas para uso com LLMs
- Detecção e separação de assinaturas
- Separa a imagem da assinatura do texto e a processa em uma tag
<signature> dedicada
- Tem alto valor de uso no processamento automatizado de documentos jurídicos e empresariais
- Extração de marcas d’água
- Detecta o texto de marcas d’água inserido no documento e o organiza separadamente dentro da tag
<watermark>
- Conversão de caixas de seleção e botões de opção
- Gera em símbolos Unicode padronizados no formato * ☐ (não marcado), ☑ (marcado), ☒ (rejeitado)
- Aumenta a confiabilidade no processamento de documentos de formulário, como pesquisas e fichas de solicitação
- Extração de estruturas complexas de tabela
- Converte até mesmo tabelas complexas em tabelas Markdown e HTML, oferecendo alta utilidade
Principais formas de uso
Exemplo de código em Python
- É possível carregar e executar o modelo facilmente usando a biblioteca transformers da Hugging Face
- Ao fornecer uma imagem como entrada, o resultado é entregue em Markdown estruturado com texto, tabelas, fórmulas, descrições de imagens, marcas d’água etc.
- Números de página ou marcas d’água são encapsulados e diferenciados com
,
- As caixas de seleção são exibidas com símbolos Unicode (☐, ☑)
Uso com base em vLLM
- É possível registrar o modelo em um servidor vLLM e acessá-lo facilmente por uma API compatível com OpenAI
- Ao inserir imagens, o resultado convertido é gerado em formato consistente com texto, tabelas, fórmulas, marcas d’água etc.
Uso do pacote docext
- Por meio de um pacote separado chamado
docext, é possível aplicar o Nanonets-OCR-s diretamente à estruturação de documentos apenas executando comandos específicos
- Consulte a documentação no GitHub
2 comentários
Comentários no Hacker News
Trabalho na Nanonets e estou muito animado por lançar o Nanonets-OCR-s, um modelo VLM de 3B
É um modelo leve otimizado para converter documentos em Markdown limpo e estruturado
Isso porque ele aprendeu a estrutura e o contexto dos documentos, como tabelas, fórmulas, imagens, diagramas, marcas-d'água e caixas de seleção
Os principais recursos incluem reconhecimento de fórmulas em LaTeX (convertendo corretamente e distinguindo entre fórmulas inline e em bloco), descrição embutida de imagens (usando a tag
img, com suporte a gráficos/logotipos/diagramas), detecção e separação de assinaturas (saída dentro de blocosignature), extração de marcas-d'água (armazenadas com a tagwatermark), tratamento inteligente de checkboxes/botões de opção (conversão para Unicode para melhorar a confiabilidade do pós-processamento) e extração de estruturas complexas de tabelas (inclusive tabelas com múltiplas linhas/colunas, bem geradas em Markdown e HTML)Se quiser experimentar, veja o Huggingface ou o Docext Colab
O link correto do Docext é README.md
Fico curioso para saber se há alucinações no LLM usado
Gostaria de saber se é possível extrair as próprias imagens, ou se ainda é necessário um processo separado para isso
Gostaria de saber se isso pode ser usado para analisar uma foto ou PDF de cardápio de restaurante de acordo com um esquema JSON (talvez com ajuda de um LLM de pós-processamento), ou se um LLM multimodal grande seria mais adequado para esse uso
Tentei vários LLMs para traduzir um dicionário Shipibo (língua indígena do Peru)-espanhol para um dicionário em inglês, mas eles têm dificuldade de entender por causa de duas colunas, quebras de linha estranhas e definições com Shipibo e espanhol misturados
Além disso, a qualidade do escaneamento não é boa
Acho que vou testar esse modelo
Há décadas venho procurando uma solução para pegar todo o material salvo em Word e PowerPoint e convertê-lo para uma forma padronizada, para que cada elemento possa ser reutilizado em outros formatos
Isto é um bloco fundamental absolutamente necessário para construir esse sistema
Agora falta uma função de arquivamento ou histórico, ou seja, seria ótimo poder arquivar e recuperar facilmente cada elemento
Trabalho realmente incrível
É uma pena que esses modelos tenham como alvo apenas Markdown
Na prática, o Markdown tem muitas variantes e pouco suporte para notas de rodapé, referências, figuras etc.
É preciso um formato com especificação mais estrutural e clara
Na verdade, além de converter para Markdown, também treinamos o modelo com marcação semântica
Por exemplo, as fórmulas são extraídas em LaTeX, e as imagens (diagramas, figuras etc.) são descritas em detalhes com a tag
imgTambém usamos tags para
signature,watermark, números de página etc.Tabelas complexas (múltiplas linhas/colunas) saem como tabelas HTML, não em Markdown
O conceito de "Markdown estruturado" me empolgou mais do que o próprio modelo de OCR com LLM, mas no fim parece mais um nível de marcação para elementos específicos, então dá a sensação de que o aproveitamento fora do modelo é um pouco limitado
Gostaria de saber quais são as vantagens e desvantagens em comparação com o docling(https://github.com/docling-project/docling)
Gostaria de saber qual é a diferença em relação ao Datalab/Marker(https://github.com/datalab-to/marker)
Comparei muitos conversores de PDF->MD, e até agora o Marker parece o melhor, mas não é perfeito
Pela minha experiência pessoal, o Marker funciona muito bem para converter artigos com fórmulas complexas e código misturados
Por exemplo, ao processar com o Marker uma página de um artigo sobre transformada inversa de Laplace em Fortran, onde fórmulas (mistura de inline/display) e blocos de código monoespaçado aparecem juntos, o inline $\sigma_0$ vira "<sup>s</sup> 0" e $f(t)$ vira "<i>f~</i>~t*!", ficando tudo quebrado
O ponto forte deste modelo é que ele gera essas partes corretamente de forma nativa
Captura de tela de referência(https://imgur.com/a/Q7UYIfW)
Acabei de começar minha própria comparação cruzada, então agradeceria muito se você pudesse compartilhar uma lista de candidatos
Escrevi um script em Powershell para aplicar esse modelo a PDFs em qualquer lugar
Testando por conta própria, minha GPU (1080 8GB) é antiga, então a velocidade de execução é bem lenta (pelo menos 5 minutos por página)
Se alguém quiser testar um utilitário de conversão de PDF para markdown rodando no Cloud Run (com suporte a GPU externa), me avise
Quando estiver pronto, também vou compartilhar o link
Acabei de colocá-lo para rodar no Cloud Run e relatei alguns resultados de exemplo
Em parte dos resultados de animate.pdf, o título, autor, editora, ilustrações em preto e branco (descritas com a tag
img) e a tag de digitalização do Google foram extraídos corretamenteO sumário também saiu perfeitamente em forma de tabela
Tirando a lentidão, estou muito satisfeito com os recursos e a precisão
Tenho bastante interesse em um serviço de PDF para markdown usando Cloud Run
Gostaria de saber como ele lida com documentos que têm tabelas com múltiplas colunas ou múltiplas linhas (exemplo: rowspan na página 1 e colspan na página 29 deste PDF)
Gostaria de saber como é o desempenho no reconhecimento de texto não inglês
Pelo que sei, o suporte a idiomas estrangeiros em OCR baseado em LLM ainda fica muito atrás do OCR tradicional
Na minha experiência, ao usar Google Tradutor e ChatGPT diretamente em imagens, o desempenho do ChatGPT é sempre melhor
Especialmente com menus manuscritos em japonês, ele traduz e explica muito bem
Modelos que não mencionam suporte multilíngue, na prática, têm desempenho muito ruim em PDFs que não são em inglês
Além disso, o modelo base (Qwen-2.5-VL-3B) é multilíngue
Vi uma postagem no Reddit dizendo que ele também funciona bem com chinês(link)
Testei processar um exemplo de recibo de cartão em coreano; a velocidade é lenta, mas está chegando a um ponto em que lê tudo perfeitamente.