Extrai texto de documentos jurídicos escaneados em PDF usando OCR otimizado para linguagem jurídica brasileira...
Esta skill extrai texto de documentos jurídicos escaneados em formato PDF usando técnicas avançadas de OCR (Optical Character Recognition) otimizadas especificamente para a linguagem jurídica brasileira.
Principais características:
Use esta skill quando precisar:
NÃO use para:
PDF Scaneado
↓
[1] Conversão PDF → Imagem (PyMuPDF, 300 DPI)
↓
[2] Pré-processamento
• Conversão para escala de cinza
• Correção de inclinação (Hough Transform)
• Remoção de ruído (Median Blur)
• Melhoria de contraste (CLAHE)
• Binarização adaptativa
↓
[3] OCR Engine (PaddleOCR pt-BR)
• Detecção de texto
• Reconhecimento de caracteres
• Score de confiança
↓
[4] Fallback (EasyOCR) se confiança < 30%
↓
[5] Pós-processamento
• Correção com dicionário jurídico
• Correção de acentuação
• Identificação de estrutura do documento
↓
[6] Validação de Qualidade
• Score de confiança
• Detecção de problemas (O/0, l/1, etc.)
• Flag para revisão humana
↓
Texto Estruturado (JSON)
| Componente | Biblioteca | Função |
|---|---|---|
| PDF → Imagem | PyMuPDF (fitz) | Conversão rápida (3.3x mais rápida que pdf2image) |
| Pré-processamento | OpenCV | Melhoria de qualidade da imagem |
| OCR Primário | PaddleOCR | Melhor acurácia para português (95%+) |
| OCR Fallback | EasyOCR | Alternativa quando PaddleOCR falha |
| Pós-processamento | Custom + Transformers | Correção de termos jurídicos |
Reconhece automaticamente seções típicas de documentos jurídicos:
# Extrair texto de um único PDF
python .claude/skills/legal-ocr/pipeline_ocr.py sentenca_escaneada.pdf
# Alta qualidade + GPU + output customizado
python .claude/skills/legal-ocr/pipeline_ocr.py \
--input documento.pdf \
--output resultado.json \
--quality high \
--use-gpu \
--dpi 400
# Processar múltiplos PDFs
python .claude/skills/legal-ocr/pipeline_ocr.py \
--input-dir ./processos_escaneados/ \
--output-dir ./textos_extraidos/ \
--batch-size 32
O resultado é um arquivo JSON estruturado:
{
"filename": "sentenca_123.pdf",
"timestamp": "2025-12-10T21:00:00",
"metadata": {
"total_pages": 15,
"processing_time_seconds": 45.2,
"gpu_used": true,
"primary_engine": "paddleocr",
"fallback_used_pages": [3, 7]
},
"pages": [
{
"page_num": 1,
"text": "SENTENÇA\n\nProcesso nº 0001234-56.2024.8.26.0100...",
"confidence": 0.92,
"source": "paddleocr",
"validation": {
"confidence": 85,
"issues": [],
"requires_review": false
},
"structure": {
"section": "header",
"detected_elements": ["tribunal", "numero_processo", "juiz"]
}
}
],
"full_text": "SENTENÇA\n\nProcesso nº 0001234-56.2024.8.26.0100...",
"document_structure": {
"header": "SENTENÇA\nTribunal de Justiça de São Paulo...",
"relatorio": "Trata-se de ação de...",
"fundamentacao": "É o relatório. Decido.\n\nO pedido merece...",
"dispositivo": "Pelo exposto, JULGO PROCEDENTE..."
},
"quality_summary": {
"avg_confidence": 0.89,
"total_issues": 2,
"pages_requiring_review": 0,
"overall_quality": "good"
}
}
cd .claude/skills/legal-ocr
chmod +x setup.sh
./setup.sh
cd .claude/skills/legal-ocr
pip install -r requirements.txt
# Baixar modelos PaddleOCR (português)
python -c "from paddleocr import PaddleOCR; PaddleOCR(lang='pt')"
{
'dpi': 300,
'quality': 'standard',
'confidence_threshold': 0.4,
'use_gpu': True,
'batch_size': 32
}
{
'dpi': 400,
'quality': 'high',
'confidence_threshold': 0.2,
'preprocessing': {
'clahe_clip_limit': 4.0,
'denoise_strength': 7,
'binarization': 'adaptive'
}
}
| Configuração | Throughput | Acurácia | Requisitos |
|---|---|---|---|
| GPU + Batch 32 | 800 pág/hora | 95%+ | 8GB VRAM |
| GPU + Batch 16 | 600 pág/hora | 95%+ | 6GB VRAM |
| CPU | 300 pág/hora | 94% | 4GB RAM |
Estimativa de custos: Infraestrutura open-source, custo zero de APIs
Para questões técnicas, consulte:
reference.md: Detalhes técnicos completosexamples.md: Exemplos práticos de uso.claude/skills/legal-ocr/logs/ocr_processing.logEsta skill foi desenhada para integrar perfeitamente com o sistema SIGEDEC:
# Exemplo de integração
from pipeline_ocr import LegalDocumentOCRPipeline
# Processar documento para indexação no Qdrant
pipeline = LegalDocumentOCRPipeline(use_gpu=True)
result = pipeline.process_legal_document('acórdão_escaneado.pdf')
# Enviar para vector database
if result['quality_summary']['overall_quality'] in ['good', 'excellent']:
# Indexar no Qdrant
store_in_vectordb(result['full_text'], metadata=result['metadata'])
Versão: 1.0.0 Última atualização: 2025-12-10 Licença: MIT Autor: SIGEDEC Team