OCR de PDFs
Versão notebook (rodável no Colab):
examples/notebooks/ocr.ipynb.
labdados.ocr extrai texto de PDFs nativos ou escaneados. Aceita um PDF único, uma lista de PDFs ou uma pasta inteira (varre subpastas).
Receita 1 — Pasta inteira na nuvem
Caso típico: você baixou 200 acórdãos de um tribunal e quer todos virarem arquivos de texto.
import os
import labdados
labdados.ocr(
arquivos="acordaos_tjsp/",
api_key=os.environ["LABDADOS_API_KEY"],
saida="acordaos_txt/",
formato="md", # txt ou md
idiomas="por", # apenas português
)
# acordaos_txt/ocr_<id>.zipExtraia o .zip no mesmo lugar:
cd acordaos_txt && unzip ocr_*.zipNa nuvem, o modelo padrão é o Azure Document Intelligence (OCR da Microsoft no Azure AI Foundry da FGV). O processamento fica no Brasil.
Receita 2 — PDFs com tabelas e layout complexo (Mistral OCR)
Quando o documento tem várias colunas, formulários ou tabelas, o Mistral OCR devolve markdown e preserva a estrutura:
labdados.ocr(
arquivos="peticoes/",
api_key=os.environ["LABDADOS_API_KEY"],
saida="peticoes_md/",
modelo="mistral-ocr",
formato="md",
)A primeira chamada depois de um tempo sem uso pode levar alguns minutos (o serviço do escritório “acorda”). As seguintes são rápidas.
Receita 3 — Local, sem API key
Para 5–10 PDFs, dá pra rodar local sem custo nenhum:
pip install labdados[ocr]
# macOS:
brew install tesseract tesseract-lang
# Ubuntu:
sudo apt-get install tesseract-ocr tesseract-ocr-porimport labdados
labdados.ocr(
arquivos=["sentenca1.pdf", "sentenca2.pdf"],
local=True,
idiomas="por+eng",
formato="md",
saida="resultados/",
deskew=True, # endireita scans tortos
)
# resultados/sentenca1.md, resultados/sentenca2.mdReceita 4 — Reuso de cliente
Quando o script encadeia várias chamadas:
import os
import labdados
cli = labdados.Client(api_key=os.environ["LABDADOS_API_KEY"])
cli.ocr(arquivos="docs_pdf/", saida="textos/", formato="md")
cli.estruturacao(
arquivos="textos/", # textos extraídos pelo OCR acima
schema={"type": "object", "properties": {"valor_causa": {"type": "number"}}},
saida="estruturado/",
)Quando algum PDF dá pau no OCR remoto
O serviço processa todos os PDFs e zip o resultado, mesmo que alguns falhem. Se houver falhas parciais, o error_message da Request guarda o resumo. Para inspecionar:
import os, httpx, labdados
cli = labdados.Client(api_key=os.environ["LABDADOS_API_KEY"])
ultimas = cli._get("/api/v1/requests?limit=5")
for req in ultimas:
if req.get("error_message"):
print(req["id"], "→", req["error_message"])Parâmetros principais
Veja a referência completa para todos os argumentos.
| Parâmetro | Default | Quando mexer |
|---|---|---|
modelo |
"azure-document-intelligence" (nuvem) / "pymupdf-tesseract" (local) |
"mistral-ocr" para tabelas e layouts complexos |
formato |
"txt" |
"md" se quiser preservar listas/títulos |
idiomas |
"por+eng" |
Para outros idiomas, ver lista do Tesseract |
dpi |
200 |
300 para scans pequenos / 150 para PDFs grandes |
deskew |
False |
True para scans tortos |