tecjustica-ocr
Extração OCR de processos judiciais — transforma PDFs em Markdown legível.
Usa PaddleOCR 3.x (PP-OCRv5 / PP-StructureV3) com auto-detecção GPU/CPU.
Requisitos do Sistema
Sistema Operacional
| SO | Suporte | Observação |
|---|---|---|
| Linux (Ubuntu 22.04+, Debian 12+) | Nativo | Melhor experiência, GPU funciona direto |
| Windows 10/11 | Apenas via WSL2 | Não funciona nativo — veja Configuração WSL2 |
| macOS | Apenas CPU | Não testado extensivamente |
Por que não funciona no Windows nativo? O PaddlePaddle GPU requer CUDA toolkit compilado para Linux. Os modelos OCR e dependências nativas não são compatíveis com Windows. O WSL2 com GPU passthrough é o único caminho suportado no Windows.
Hardware
| Componente | Mínimo | Recomendado |
|---|---|---|
| CPU | x86_64 (Intel/AMD) | Intel i5 12ª gen+ / AMD Ryzen 5+ |
| RAM | 4 GB | 8 GB+ |
| Disco | 2 GB livres | 5 GB+ |
| GPU (opcional) | NVIDIA com CUDA CC 6.0+ e 4 GB VRAM | RTX 3050 6 GB+ |
GPU não é obrigatório. O tecjustica-ocr funciona em CPU, porém fica mais lento (~5x). Com GPU, processa ~312 páginas em ~7 minutos. Em CPU, o mesmo leva ~35 minutos.
GPU NVIDIA — requisitos para aceleração
Para usar GPU, você precisa de uma placa NVIDIA com:
- Compute Capability 6.0+ (Pascal ou superior)
- Mínimo 4 GB VRAM (6 GB recomendado para modelo
server) - Driver NVIDIA 525+ (no Windows: instalar o driver Windows — o WSL2 usa automaticamente)
- CUDA 11.8 (instalado automaticamente pelo comando
init)
GPUs compatíveis (referência rápida)
| Família | Compute Capability | Status |
|---|---|---|
| GTX 1050, 1060, 1070, 1080 | 6.1 | Funciona, mais lento |
| GTX 1650, 1660 | 7.5 | Funciona bem |
| RTX 2060, 2070, 2080 | 7.5 | Funciona bem |
| RTX 3050, 3060, 3070, 3080 | 8.6 | Recomendado, testado |
| RTX 4050, 4060, 4070, 4080, 4090 | 8.9 | Excelente |
GPUs AMD e Intel Arc não são suportadas. O PaddlePaddle requer CUDA, que é exclusivo NVIDIA.
Software
| Requisito | Versão |
|---|---|
| Python | 3.10+ (recomendado: 3.12) |
| Gerenciador de pacotes | uv (recomendado) ou pip |
Configuração WSL2 (Windows)
Se você usa Windows, siga estes passos antes de instalar o tecjustica-ocr:
1. Instalar WSL2
# No PowerShell como Administrador
wsl --install
Reinicie o computador após a instalação. O Ubuntu será instalado por padrão.
2. Instalar driver NVIDIA para Windows
Baixe e instale o driver NVIDIA para Windows (não para Linux):
- Acesse nvidia.com/drivers e baixe o driver para sua placa
- Instale normalmente no Windows — versão 525 ou superior
Importante: NÃO instale o CUDA toolkit dentro do WSL. O driver do Windows faz o passthrough automaticamente para o WSL2.
3. Verificar GPU no WSL
Abra o terminal WSL (Ubuntu) e execute:
nvidia-smi
Se aparecer uma tabela com o nome da sua GPU e versão do driver, está tudo certo. Se der erro, verifique se o driver Windows está atualizado.
4. Instalar Python e uv no WSL
# Atualizar pacotes
sudo apt update && sudo apt upgrade -y
# Instalar Python
sudo apt install python3 python3-venv -y
# Instalar uv (recomendado)
curl -LsSf https://astral.sh/uv/install.sh | sh
5. Seguir instalação normal
A partir daqui, siga as instruções de Instalação abaixo normalmente dentro do WSL.
Instalação
Opção A: uv tool (recomendado)
A forma mais simples — instala em ambiente isolado com um único comando:
uv tool install tecjustica-ocr
Depois, configure o PaddlePaddle e baixe os modelos:
tecjustica-ocr init
O init detecta se você tem GPU e instala o PaddlePaddle correto automaticamente.
Opção B: pip com venv manual
Para quem prefere controle total ou não usa uv:
# 1. Criar ambiente virtual
python3 -m venv ocr-env
source ocr-env/bin/activate # Linux/Mac
# ocr-env\Scripts\activate # Windows
# 2. Instalar PaddlePaddle (escolha uma opção)
# Com GPU NVIDIA (CUDA 11.8):
pip install paddlepaddle-gpu==3.2.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/
# Sem GPU (somente CPU):
pip install paddlepaddle==3.2.0
# 3. Instalar tecjustica-ocr
pip install tecjustica-ocr
Como saber se tenho GPU compatível? Execute
nvidia-smino terminal. Se aparecer uma tabela com o nome da sua placa, você tem GPU. Se der erro "comando não encontrado", use a versão CPU.
Verificar instalação
tecjustica-ocr init
Este comando verifica tudo automaticamente:
- Versão do Python
- RAM e espaço em disco
- Se PaddlePaddle está instalado
- Se tem GPU e qual modelo
- Se os modelos OCR estão baixados
Na primeira execução, ele baixa os modelos automaticamente (~500 MB). Depois disso, ficam em cache.
Exemplo de saída:
╭──────────────────────────────────────────────────────────────────╮
│ tecjustica-ocr 0.1.3 — Diagnóstico do sistema │
╰──────────────────────────────────────────────────────────────────╯
1. Verificando sistema...
┌────────────────────────────┬────────┬──────────────────────────────────────┐
│ Verificação │ Status │ Detalhe │
├────────────────────────────┼────────┼──────────────────────────────────────┤
│ Python │ OK │ 3.12.3 │
│ Sistema │ OK │ Linux x86_64 │
│ RAM │ OK │ 7.6 GB total │
│ Espaço em disco │ OK │ 901.9 GB livres │
│ PaddlePaddle │ OK │ v3.2.0 │
│ PaddleOCR │ OK │ v3.4.0 │
│ pypdfium2 │ OK │ v4.x │
│ GPU CUDA │ OK │ 1 GPU(s) — NVIDIA GeForce RTX 3050 │
│ Modelo PP-OCRv5_mobile_det │ OK │ em cache │
│ Modelo PP-OCRv5_mobile_rec │ OK │ em cache │
│ Modelo PP-OCRv5_server_det │ OK │ em cache │
│ Modelo PP-OCRv5_server_rec │ OK │ em cache │
└────────────────────────────┴────────┴──────────────────────────────────────┘
2. Baixando modelos OCR...
OK Modelo mobile pronto
OK Modelo server pronto
╭────────────────────────────── Pronto para usar ──────────────────────────────╮
│ Sistema compatível! │
│ │
│ Dispositivo: GPU │
│ Comando: tecjustica-ocr run <pdf> │
╰──────────────────────────────────────────────────────────────────────────────╯
Se algum item aparecer como FALHA, o init explica o que corrigir.
Uso
Processar um PDF
tecjustica-ocr run processo.pdf
Gera output/processo.md com todo o texto extraído.
Processar uma pasta inteira
tecjustica-ocr run pasta-com-pdfs/ -o resultado/
Gera um .md para cada PDF encontrado na pasta.
Escolher modelo
# Mobile (default) — rápido, bom para maioria dos casos
tecjustica-ocr run processo.pdf -m mobile
# Server — maior qualidade, ~2.5x mais lento
tecjustica-ocr run processo.pdf -m server
| Modelo | Velocidade | Textos | Quando usar |
|---|---|---|---|
mobile |
~1.3s/pág | ~86 por pág | Processos longos, leitura rápida |
server |
~3.2s/pág | ~93 por pág | Documentos difíceis, qualidade máxima |
Modo estrutural (tabelas e layout)
tecjustica-ocr run processo.pdf --mode structure
Usa PP-StructureV3 para preservar tabelas, cabeçalhos e layout do documento.
Forçar CPU ou GPU
tecjustica-ocr run processo.pdf -d cpu # Forçar CPU
tecjustica-ocr run processo.pdf -d gpu # Forçar GPU
Por padrão, detecta automaticamente (-d auto).
Todas as opções
tecjustica-ocr run [CAMINHO] [OPÇÕES]
Argumentos:
CAMINHO Arquivo PDF ou pasta com PDFs (obrigatório)
Opções:
-o, --output DIR Diretório de saída (default: ./output)
-m, --model TEXT mobile (default) ou server
-d, --device TEXT auto (default), gpu ou cpu
-s, --scale INT Escala de render: 1, 2 ou 3 (default: 2)
-w, --workers INT Workers paralelos (default: auto)
--mode TEXT text (default) ou structure
--min-score FLOAT Score mínimo de confiança (default: 0.5)
-v, --verbose Output detalhado
tecjustica-ocr init [OPÇÕES]
Opções:
--download/--no-download Baixar modelos (default: sim)
-m, --model TEXT Modelo para baixar: mobile, server ou all (default: all)
Formato de saída
O markdown gerado tem a seguinte estrutura:
# nome-do-arquivo.pdf
- **Data de extração**: 2025-03-17 15:44
- **Páginas**: 312
- **Textos extraídos**: 26706
## Página 1
Tribunal de Justiça do Estado do Ceará - 1° Grau
PJe - Processo Judicial Eletrônico
Número: 3000066-83.2025.8.06.0203
...
---
## Página 2
...
API Python
Para usar dentro de scripts ou outros programas:
from tecjustica_ocr import extract_text, extract_structure, OcrConfig
# Extrair texto simples
texto = extract_text("processo.pdf")
print(texto)
# Extrair com configurações customizadas
config = OcrConfig(model="server", device="gpu", scale=3)
texto = extract_text("processo.pdf", config)
# Extrair estrutura (tabelas, layout) como markdown
markdown = extract_structure("processo.pdf")
Resolução de problemas
"comando não encontrado" após instalar
O ambiente virtual precisa estar ativado:
source ocr-env/bin/activate
tecjustica-ocr --version
Ou execute via Python:
python -m tecjustica_ocr --help
Erro de CUDA / GPU não detectada
- Verifique se
nvidia-smifunciona - Verifique se instalou
paddlepaddle-gpu(nãopaddlepaddle) - Execute
tecjustica-ocr initpara diagnóstico completo - Se não tiver GPU, o sistema funciona em CPU automaticamente
Modelos não baixam
Execute o init com download explícito:
tecjustica-ocr init --download -m all
Os modelos ficam em ~/.paddlex/official_models/. Se precisar limpar, delete essa pasta e rode o init novamente.
Processo muito lento
- Use modelo
mobile(default):-m mobile - Escala 2 é suficiente:
-s 2 - Se tiver GPU, confirme que está sendo usada: olhe "Dispositivo: gpu:0" no início
Benchmarks
Testado em RTX 3050 6GB, 312 páginas de processo judicial:
| Modelo | Tempo total | Por página | Textos |
|---|---|---|---|
| mobile + GPU | 6.8 min | 1.310 ms | 26.706 |
| server + GPU | 16.5 min | 3.181 ms | 29.005 |
Metadata
Release files for tecjustica-ocr 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tecjustica_ocr-0.1.4.tar.gz | 17.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tecjustica_ocr-0.1.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 38.6 kB
Release files / tecjustica_ocr-0.1.4.tar.gz
| Download URL | tecjustica_ocr-0.1.4.tar.gz |
|---|---|
| Size | 17.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
937b65fad1e29d0d2f0e488d20f95e346545efc5456404dedfc236d391516a86
|
|
BLAKE2b-256 checksum How to use checksums |
2745e9786f95684b0d2ca50cf05e8872cb5e50ca17b01ead3a3b9d20054782e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.16 {"installer":{"name":"uv","version":"0.9.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / tecjustica_ocr-0.1.4-py3-none-any.whl
| Download URL | tecjustica_ocr-0.1.4-py3-none-any.whl |
|---|---|
| Size | 21.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7ada9649eb4b0a47be4c5d5cd0e0d562027a91a900c9fdca43b9da35b520f973
|
|
BLAKE2b-256 checksum How to use checksums |
24a6a3597e923135b58badd9641664e1c864322f47ec1e6bc57ad377c565c11d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.16 {"installer":{"name":"uv","version":"0.9.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|