26 pontos por GN⁺ 2025-06-17 | 2 comentários | Compartilhar no WhatsApp
  • 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

 
GN⁺ 2025-06-17
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 bloco signature), extração de marcas-d'água (armazenadas com a tag watermark), 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

    • Opinião de que talvez fosse mais simples começar com uma conversão básica usando unoconv ou pandoc e depois usar um LLM para refinar o texto simples
  • É 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 img
      També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 corretamente
      O 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

    • Isso vem de experiência prática ou é só entendimento teórico?
      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

    • Na prática, ele foi treinado principalmente em inglês, mas parte dos dados de treino também inclui chinês e várias línguas europeias
      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)
 
chakankim 2025-06-18

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.