feat: Agregar soporte OCR con Tesseract para PDFs escaneados

- Integrar Tesseract OCR para leer PDFs escaneados automáticamente
- Detectar automáticamente si el PDF tiene texto o requiere OCR
- Agregar servicio ocr_service.py con funciones de OCR
- Actualizar Dockerfile con tesseract-ocr, tesseract-ocr-spa y poppler-utils
- Agregar variables de configuración OCR (OCR_ENABLED, OCR_LANGUAGE, OCR_DPI, OCR_TIMEOUT)
- Crear endpoint de debug para ver texto extraído (/api/v1/debug/extract-text)
- Agregar scripts de instalación y prueba (install_ocr.ps1, test_ocr.py, debug_pdf.ps1)
- Documentación completa (OCR_SETUP.md, DOCKER_OCR.md, COMO_PROBAR.md)
- Actualizar docker-compose.yml con variables de entorno OCR
- Modificar pdf_text.py para usar OCR cuando sea necesario
- Actualizar requirements.txt con pytesseract, Pillow, pdf2image
This commit is contained in:
Ernesto Herrera
2026-03-04 08:21:41 -07:00
parent 068d859f42
commit fcc516c9b3
18 changed files with 1694 additions and 14 deletions

View File

@@ -6,6 +6,7 @@ Microservicio para extraer y parsear la sección de **Incrementables** de docume
-**Autenticación JWT** con bcrypt
-**Extracción de texto** con PyMuPDF y pdfplumber (fallback)
-**OCR con Tesseract** para PDFs escaneados (detección automática)
-**Parsing robusto** de incrementables (fletes, seguros, almacenaje, regalías)
-**Validación de archivos** (tamaño, tipo MIME, PDF cifrado)
-**Logging estructurado** con correlation ID
@@ -19,6 +20,34 @@ Microservicio para extraer y parsear la sección de **Incrementables** de docume
- Python 3.12+
- Docker & Docker Compose (opcional)
- **Tesseract OCR** (para PDFs escaneados) - [Ver guía de instalación](OCR_SETUP.md)
- **Poppler** (para conversión PDF a imagen) - Requerido solo para OCR
### 🤖 OCR para PDFs Escaneados
El sistema puede leer **PDFs escaneados** (imágenes) usando Tesseract OCR. La detección es automática:
- Si el PDF tiene texto seleccionable → Extracción normal (rápido)
- Si el PDF está escaneado → OCR automático (más lento)
**Con Docker (Recomendado):**
- ✅ Tesseract ya incluido en la imagen
- ✅ Sin instalación adicional
- ✅ Ver [DOCKER_OCR.md](DOCKER_OCR.md) para guía completa
**Sin Docker (Instalación local):**
```powershell
# Windows - Ejecutar script de instalación
.\install_ocr.ps1
# O instalar manualmente - Ver OCR_SETUP.md para guía completa
```
**Verificar instalación local:**
```bash
python test_ocr.py
```
Ver [OCR_SETUP.md](OCR_SETUP.md) para instrucciones detalladas de instalación local.
## 🛠️ Instalación
@@ -42,6 +71,12 @@ JWT_SECRET=your-secret-key-change-this-in-production
JWT_EXPIRES_MINUTES=60
MAX_FILE_MB=10
LOG_LEVEL=INFO
# OCR Settings (ya configurado por defecto)
OCR_ENABLED=true
OCR_LANGUAGE=spa
OCR_DPI=300
OCR_TIMEOUT=300
```
**Generar hash de contraseña:**
@@ -60,16 +95,22 @@ El servicio estará disponible en `http://localhost:9876`
- API FastAPI: puerto 9876
- Redis: puerto 16379
- Celery Worker: procesamiento en background
- **Tesseract OCR**: Incluido en el contenedor (sin instalación adicional)
### Opción 2: Sin Docker
1. **Instalar dependencias del sistema** (para PyMuPDF)
1. **Instalar dependencias del sistema**
```bash
# macOS
brew install mupdf-tools
brew install mupdf-tools tesseract tesseract-lang
# Ubuntu/Debian
sudo apt-get install libmupdf-dev mupdf-tools
sudo apt-get install libmupdf-dev mupdf-tools tesseract-ocr tesseract-ocr-spa poppler-utils
# Windows - Ver OCR_SETUP.md para instrucciones detalladas
# Descargar e instalar:
# - Tesseract: https://github.com/UB-Mannheim/tesseract/wiki
# - Poppler: https://github.com/oschwartz10612/poppler-windows/releases
```
2. **Crear entorno virtual**