Intermediário 11 minDocumentos

DeepSeek-OCR localmente: ler seus PDFs escaneados

DeepSeek-OCR é um modelo de visão com cerca de 3 bilhões de parâmetros, publicado sob a licença MIT, projetado para transformar a imagem de uma página em texto estruturado, incluindo Markdown. Este guia mostra como executar o deepseek ocr localmente com Ollama: qual versão do runtime usar, quanta memória reservar, como dividir um PDF digitalizado em páginas e obter um Markdown aproveitável por um RAG. Ele termina com os casos em que uma ferramenta mais simples funciona melhor.

Por Léa B.·Atualização 2026-10-07·Testado no Windows, macOS e Linux

#Por que DeepSeek-OCR em vez de um OCR clássico

Um PDF digitalizado não contém texto, apenas imagens de texto. Um mecanismo clássico de OCR, como o Tesseract, extrai linhas brutas: não sabe que um bloco é um título, quebra as tabelas e perde a ordem de leitura de uma página com duas colunas. DeepSeek-OCR aborda o problema de outra forma. É um modelo de visão e linguagem: ele observa a página inteira e gera diretamente Markdown com seus títulos, listas, tabelas e fórmulas.

O modelo foi publicado por DeepSeek no outono de 2025 com um artigo intitulado « Contexts Optical Compression ». A ideia central é representar uma página por um pequeno número de tokens visuais, entre 64 e 400 conforme o modo de resolução, em vez dos milhares de tokens de texto que ela conteria. A editora anuncia uma precisão de decodificação de aproximadamente 97% quando a taxa de compressão permanece abaixo de dez. Esse é o número dela, medido em seus próprios conjuntos de dados, não o nosso: o mais importante é que o modelo é leve e rápido para o que faz.

Para uso local, três coisas importam. O modelo cabe em uma placa de vídeo de entrada. Ele gera Markdown que pode ser indexado diretamente em uma cadeia de RAG. E está disponível na biblioteca Ollama, o que evita instalar PyTorch, Flash Attention e vLLM, como exige o repositório oficial. As especificações completas estão na ficha do modelo: https://quelllm.fr/modele/deepseek-ocr

#Pré-requisitos e memória a considerar

O kit RAG Local

Seus documentos, sua IA: um RAG local confiável para seus PDFs, notas e e-mails — sem enviar nada para a nuvem.

  • Espaço online vitalício
  • PDF + arquivos
  • Atualizações vitalícias

A página do modelo no site fornece as referências de VRAM por precisão: aproximadamente 2 GB em Q4, 4 GB em Q8 e 6 GB em FP16, para um contexto de 8 192 tokens. O peso real a ser baixado depende do que Ollama empacotou na tag; a página de tags da biblioteca exibe o tamanho do arquivo, e é ela que vale. Além disso, considere a memória do contexto: uma página densa convertida em Markdown pode produzir vários milhares de tokens de saída.

GPU NVIDIA
Qualquer placa de 8 GB ou mais oferece uma margem confortável. Uma RTX 3060 de 12 GB ou uma RTX 4070 de 12 GB executam o modelo em FP16 com margem para o contexto.
Mac Apple Silicon
Ollama usa memória unificada. Um Mac com 16 GB é suficiente apenas para o modelo; reserve 24 GB se quiser manter um modelo de chat carregado ao lado para o RAG.
Sem GPU
É possível, mas a codificação da imagem e a geração do Markdown são feitas pelo processador. Para algumas páginas, é tolerável; para um lote de cem páginas, espere minutos por página, dependendo da máquina.
Software
Ollama atualizado, poppler-utils para dividir PDFs e Python 3 com a biblioteca ollama se você quiser automatizar o processamento em lote.
i
Este guia não mede nada
Nenhuma taxa em páginas por minuto nem pontuação de precisão é anunciada aqui. Os números citados são os de DeepSeek em sua publicação. A qualidade nos seus documentos depende da resolução da digitalização, do idioma e do layout: teste com vinte páginas representativas antes de iniciar um lote.

#Etapa 1: verificar Ollama e obter a tag correta

DeepSeek-OCR chegou à biblioteca Ollama no fim de 2025, após o lançamento do modelo. Ele se baseia em um codificador visual específico, DeepEncoder, que combina um módulo de janelas locais e um módulo de atenção global. Ollama precisou adicionar suporte a essa arquitetura em seu mecanismo: um runtime anterior baixa os pesos, mas se recusa a carregá-los, com uma mensagem indicando que o modelo exige uma versão mais recente. A página da biblioteca exibe a versão mínima exigida quando aplicável.

Terminal
# Version installée (comparez avec la version minimale affichée sur ollama.com/library/deepseek-ocr)
ollama -v

# Récupérer le modèle (le tag 3b est celui référencé par la fiche modèle)
ollama pull deepseek-ocr:3b

# Vérifier l'architecture, le contexte et la quantification empaquetée
ollama show deepseek-ocr:3b

O comando show é a única fonte confiável para saber o que você acabou de baixar: ele informa a família do modelo, o número de parâmetros, o comprimento do contexto e o nível de quantização. Se a tag latest e a tag 3b apontarem para o mesmo digest, não importa qual você use; o guia emprega 3b para permanecer explícito.

!
Atualize Ollama antes de procurar mais longe
Se o modelo for baixado, mas falhar ao carregar, ou se Ollama responder com texto sem levar a imagem em conta, a causa mais frequente é um runtime antigo demais. No Linux, execute novamente o script oficial de instalação; no Windows e no macOS, o aplicativo se atualiza sozinho ou pelo menu. Depois, execute novamente ollama -v.

#Etapa 2: preparar as páginas do PDF

Ollama não abre PDFs. Ele aceita imagens, PNG ou JPEG, uma por solicitação. Portanto, a primeira operação consiste em rasterizar o documento, página por página. A ferramenta mais simples é o pdftoppm, fornecido com o poppler-utils, disponível em todas as distribuições Linux e via Homebrew no macOS.

Terminal
# Debian/Ubuntu : sudo apt install poppler-utils
# macOS : brew install poppler
# Arch : sudo pacman -S poppler

mkdir -p pages
pdftoppm -r 200 -png scan.pdf pages/page
ls pages
# pages/page-1.png  pages/page-2.png  ...  (numérotation complétée par des zéros selon le nombre de pages)

A resolução merece um minuto de reflexão. DeepSeek-OCR trabalha com resoluções fixas: 512, 640, 1024 ou 1280 pixels de lado, dependendo do modo, além de um modo dinâmico chamado Gundam, que divide a página em blocos de 640 pixels ao redor de uma visão global de 1024. Uma página A4 rasterizada a 200 pontos por polegada mede aproximadamente 1 650 por 2 340 pixels; Ollama redimensiona a página antes de enviá-la ao codificador. Aumentar para 300 pontos por polegada não traz nenhum benefício ao modelo e aumenta desnecessariamente os arquivos. Reduzir para 100 faz os caracteres pequenos das notas de rodapé desaparecerem antes mesmo que o modelo os veja.

Se o scan estiver torto ou com muito contraste, o modelo geralmente se sai melhor do que um OCR linha a linha, mas um endireitamento prévio continua sendo benéfico. O guia do Tesseract no site detalha os pré-processamentos úteis, que também se aplicam aqui: https://quelllm.fr/guide/tesseract-ocr-guide-local

#Etapa 3: obter Markdown com deepseek ocr

O repositório oficial documenta várias instruções, cada uma acionando um comportamento diferente do modelo. As duas principais são « Convert the document to markdown. » para uma conversão estruturada e « Free OCR. » para uma transcrição bruta sem formatação. As instruções estão em inglês no treinamento; mantenha-as como estão, pois o texto reconhecido sai no idioma do documento. Com o cliente de linha de comando, o caminho da imagem é inserido diretamente no prompt.

Terminal
# Conversion structurée (titres, listes, tableaux)
ollama run deepseek-ocr:3b "Convert the document to markdown. ./pages/page-1.png"

# Transcription brute, sans structure
ollama run deepseek-ocr:3b "Free OCR. ./pages/page-1.png"

A mesma operação pela API local, que escuta por padrão em http://localhost:11434, codifica a imagem em base64 no campo images. Esse é o caminho a priorizar assim que você encadeia páginas ou chama o modelo a partir de outro programa.

Terminal
# Linux (GNU coreutils). Sur macOS, remplacez base64 -w0 par base64 -i pages/page-1.png
curl http://localhost:11434/api/generate -d "{
  \"model\": \"deepseek-ocr:3b\",
  \"prompt\": \"Convert the document to markdown.\",
  \"images\": [\"$(base64 -w0 pages/page-1.png)\"],
  \"stream\": false,
  \"options\": { \"num_ctx\": 8192, \"temperature\": 0 }
}"

Duas opções merecem ser fixadas. A temperatura em zero torna a saída reproduzível, que é o que se espera de um OCR. O contexto de 8 192 tokens corresponde ao limite do modelo; abaixo disso, uma página densa pode ser truncada no meio de uma célula de tabela. O repositório oficial também menciona instruções específicas para descrever uma figura ou localizar texto com coordenadas; elas são pouco úteis para um simples PDF a ser indexado.

→
Teste as duas instruções na mesma página
Em uma página de texto corrido, o Free OCR costuma dar um resultado mais limpo e rápido. Em uma página com uma tabela de números ou vários níveis de títulos, a conversão para Markdown justifica seu custo adicional. Escolha por tipo de documento, não de uma vez por todas.

#Etapa 4: processar um PDF inteiro

Para um documento de várias dezenas de páginas, um script Python de algumas linhas basta. Ele percorre as imagens na ordem numérica, chama Ollama página por página, remove as tags de localização que o modelo pode inserir e concatena tudo em um único arquivo Markdown com um marcador por página. O marcador é útil depois para encontrar a página de origem de um trecho citado pelo seu RAG.

Terminal
pip install ollama
ocr_pdf.py
import pathlib
import re
import ollama

MODEL = "deepseek-ocr:3b"
PROMPT = "Convert the document to markdown."

# Tri numérique : page-2 avant page-10
pages = sorted(
    pathlib.Path("pages").glob("page-*.png"),
    key=lambda p: int(re.search(r"(\d+)", p.stem).group(1)),
)

parts = []
for page in pages:
    r = ollama.generate(
        model=MODEL,
        prompt=PROMPT,
        images=[str(page)],
        options={"num_ctx": 8192, "temperature": 0},
    )
    md = r["response"]
    # Balises de localisation éventuelles : on garde le texte, on jette les coordonnées
    md = re.sub(r"<\|ref\|>(.*?)<\|/ref\|><\|det\|>.*?<\|/det\|>", r"\1", md, flags=re.S)
    parts.append(f"<!-- {page.name} -->\n{md.strip()}\n")
    print(f"{page.name} : {len(md)} caractères")

pathlib.Path("scan.md").write_text("\n\n".join(parts), encoding="utf-8")

Cada chamada é independente: o modelo não mantém nenhuma memória da página anterior. Isso é uma limitação para tabelas que se estendem por duas páginas e uma vantagem para a robustez, pois uma página que falha não contamina outra. Ollama carrega o modelo uma vez e o mantém na memória entre as chamadas, conforme o valor da variável OLLAMA_KEEP_ALIVE; você só paga o tempo de carregamento no início do lote.

Se você tiver uma placa com folga, a opção OLLAMA_NUM_PARALLEL permite processar várias páginas ao mesmo tempo, ao custo de VRAM adicional para cada contexto. Em uma placa de 12 GB, duas solicitações paralelas continuam razoáveis com um modelo desse tamanho; verifique com nvidia-smi se você não está excedendo a memória do sistema, pois a desaceleração nesse caso é brusca.

#Etapa 5: limpar e verificar a saída

O Markdown gerado é bom para ler, mas não necessariamente para indexar desse jeito. Antes de enviá-lo para uma base vetorial, revise três pontos.

  1. 01
    As tags residuais
    Com a instrução de conversão, o modelo é treinado com um token de localização e pode retornar coordenadas entre as tags ref e det. O script acima as remove. Verifique também se não resta nenhuma tag de imagem nem fragmento de instrução no início do arquivo.
  2. 02
    Os números e as tabelas
    Um modelo de visão e linguagem gera texto; portanto, pode inventar um valor plausível em uma célula ilegível, onde um OCR clássico teria deixado um caractere estranho. Abra as tabelas financeiras ou técnicas lado a lado com o scan e compare uma linha a cada dez. Para faturas, o guia específico do site explica como conferir com totais: https://quelllm.fr/guide/extraction-factures-ocr-llm
  3. 03
    Os cabeçalhos e rodapés
    Números de página, nome do documento, avisos legais repetidos: eles aparecem em todas as páginas e poluem a divisão em segmentos. Em geral, uma expressão regular nas linhas idênticas presentes em mais da metade das páginas basta para removê-los.
  4. 04
    Os acentos e a tipografia francesa
    O editor anuncia treinamento em cerca de uma centena de idiomas. Ainda assim, verifique as letras acentuadas, as aspas francesas e os espaços inseparáveis antes dos sinais duplos em uma amostra: é aí que ficam os erros discretos que depois distorcem uma busca lexical.

Depois que o arquivo está limpo, ele entra em uma cadeia de RAG como qualquer Markdown: divisão por títulos, embeddings, banco de dados vetorial. A introdução ao RAG local do site retoma essas etapas: https://quelllm.fr/guide/rag-local-introduction

#Limites e solução de problemas

O modelo responde sem olhar para a imagem
Ou Ollama é antigo demais para esta arquitetura, ou a imagem não foi transmitida. Na linha de comando, o caminho deve ser absoluto ou relativo ao diretório atual, sem aspas ao redor do próprio caminho. Pela API, verifique se o campo images realmente contém base64 sem quebra de linha.
Saída truncada no meio de uma tabela
O contexto é curto demais para a página. Defina num_ctx como 8192 se isso ainda não tiver sido feito. Se a página ainda exceder o limite, divida-a em duas imagens, superior e inferior, com uma sobreposição de algumas linhas.
Página lida fora de ordem
Em um layout de três colunas ou em um formulário com caixas, o modelo pode misturar os blocos. Tente a instrução Free OCR, que segue a ordem espacial de forma mais simples, ou use o Docling, cuja análise de layout é explícita.
Lentidão anormal
Verifique com ollama ps se o modelo está realmente carregado na GPU, e não parcialmente no processador. Um contexto grande demais ou um segundo modelo carregado podem fazer a memória do sistema transbordar.
Texto manuscrito
DeepSeek-OCR é treinado com documentos impressos e renderizações de páginas. Em escrita à mão, os resultados variam muito; não conte com ele sem um teste prévio.
Documentos longos e contexto entre páginas
Cada página é processada isoladamente. Uma tabela que continua na página seguinte perde os cabeçalhos; é preciso reinseri-los manualmente ou com uma regra de pós-processamento.
i
Existe uma segunda versão
DeepSeek publicou no início de 2026 uma segunda versão do modelo, DeepSeek-OCR-2, com um codificador reformulado. Na data de redação, não conseguimos confirmar sua presença na biblioteca Ollama. Consulte a página do editor no Hugging Face e a página do modelo no site antes de escolher; o método descrito aqui continua o mesmo.

#Quando PaddleOCR, Docling ou Tesseract são suficientes

DeepSeek-OCR não é a resposta para todos os scans. Ele se destaca quando a página tem uma estrutura a preservar e você quer Markdown sem montar um pipeline. Em muitos casos comuns, uma ferramenta mais simples ou mais especializada faz tão bem quanto, usando menos recursos e com menor risco de invenção.

Tesseract
Texto limpo, impresso, em fundo branco, em grande quantidade, quando você precisa apenas do texto. Ele roda no processador, não gera nada e, portanto, não inventa nada. Guia: https://quelllm.fr/guide/tesseract-ocr-guide-local
PaddleOCR
Texto posicionado em qualquer lugar da página, scans inclinados, tabelas a serem reconstruídas com uma etapa explícita de detecção antes da leitura. Sua variante VL também é um modelo de visão, menor que DeepSeek-OCR. Guia: https://quelllm.fr/guide/paddleocr-vl-ocr-local
Docling
PDFs nativos, DOCX, apresentações: documentos que já contêm texto e dos quais é preciso principalmente recuperar o layout e as tabelas. O Docling pode chamar um mecanismo de OCR para páginas em imagem, mas seu núcleo é a análise estrutural. Guia: https://quelllm.fr/guide/docling-conversion-documents-ia
DeepSeek-OCR
Digitalizações ou fotos de páginas com títulos, listas, tabelas ou fórmulas, e a necessidade de um Markdown pronto para indexação em uma única passagem, em uma placa de vídeo modesta.

Um critério costuma decidir: se um erro em um número tiver consequências, prefira uma ferramenta que reconheça sem gerar, ou faça uma segunda leitura com outro mecanismo e compare as saídas. Se a prioridade for tornar legível e consultável um acervo de documentos heterogêneos, o Markdown de DeepSeek-OCR economiza tempo em cada etapa seguinte.

#Para se aprofundar

Ficha do modelo DeepSeek-OCR
Parâmetros, VRAM por precisão, licença e comando de instalação. https://quelllm.fr/modele/deepseek-ocr
Instalar Ollama
A instalação no Windows, macOS e Linux, os comandos básicos e a solução de problemas. https://quelllm.fr/guide/installer-ollama
RAG local sem programar
Conecte o Markdown obtido ao Open WebUI ou ao AnythingLLM para consultar seus documentos. https://quelllm.fr/guide/rag-local-ollama-sans-coder
Fontes oficiais
Repositório GitHub deepseek-ai/DeepSeek-OCR (código, instruções, scripts vLLM para PDF), página do Hugging Face deepseek-ai/DeepSeek-OCR (pesos e licença MIT), página Ollama ollama.com/library/deepseek-ocr (tags, tamanho e versão mínima).
Este guia ajudou você?

Um comentário, um erro ou uma observação? Avise-nos; isso ajuda a melhorar o guia para todos.