Files
mve-micro-docs/DOCKER_OCR.md
Ernesto Herrera fcc516c9b3 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
2026-03-04 08:21:41 -07:00

216 lines
4.4 KiB
Markdown

# 🐳 Guía Rápida: OCR con Docker
## ✅ Lo que YA está incluido en Docker
Cuando usas Docker Compose, **TODO está incluido automáticamente**:
- ✅ Tesseract OCR
- ✅ Idioma español (spa)
- ✅ Poppler (conversión PDF a imagen)
- ✅ Todas las dependencias Python
- ✅ PyMuPDF y pdfplumber
**No necesitas instalar nada en tu máquina local.**
## 🚀 Uso Rápido
### 1. Configurar variables de entorno
Edita tu `.env`:
```env
# OCR ya viene habilitado por defecto
OCR_ENABLED=true
OCR_LANGUAGE=spa
OCR_DPI=300
OCR_TIMEOUT=300
```
### 2. Construir y ejecutar
```bash
# Primera vez o después de cambios en Dockerfile
docker-compose build
# Iniciar servicios
docker-compose up -d
# Ver logs
docker-compose logs -f
```
### 3. Verificar que OCR funciona
```bash
# Verificar Tesseract en el contenedor API
docker exec mve-incrementables-parser tesseract --version
# Verificar idiomas instalados
docker exec mve-incrementables-parser tesseract --list-langs
# Verificar en el worker de Celery
docker exec mve-celery-worker tesseract --version
```
Deberías ver:
```
tesseract 5.x.x
...
spa
eng
osd
```
## 🧪 Probar con un PDF Escaneado
```bash
# 1. Primero obtén un token
curl -X POST http://localhost:9876/api/auth/login \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=admin&password=tu_password"
# 2. Usa el token para subir un PDF
curl -X POST http://localhost:9876/api/v1/incrementables/parse \
-H "Authorization: Bearer TU_TOKEN_AQUI" \
-F "file=@/ruta/al/documento.pdf"
```
## 📊 Ver logs del OCR
```bash
# Ver logs del contenedor principal
docker-compose logs -f mve-incrementables-parser
# Ver logs del worker (procesamiento asíncrono)
docker-compose logs -f celery-worker
# Buscar logs específicos de OCR
docker-compose logs | grep -i "ocr"
docker-compose logs | grep -i "tesseract"
```
## 🔧 Configuración Avanzada
### Cambiar idioma del OCR
Edita `.env`:
```env
OCR_LANGUAGE=eng # Para inglés
# o
OCR_LANGUAGE=spa # Para español
```
Reinicia los contenedores:
```bash
docker-compose restart
```
### Ajustar rendimiento OCR
Para **mayor velocidad** (menos calidad):
```env
OCR_DPI=200
```
Para **mayor calidad** (más lento):
```env
OCR_DPI=600
```
Reinicia:
```bash
docker-compose restart
```
### Deshabilitar OCR
Si solo quieres procesar PDFs con texto seleccionable:
```env
OCR_ENABLED=false
```
## 🐛 Solución de Problemas
### El servicio no inicia después de agregar OCR
```bash
# Reconstruir la imagen
docker-compose down
docker-compose build --no-cache
docker-compose up -d
```
### Error: "tesseract command not found"
Esto significa que la imagen no se construyó correctamente.
```bash
# Ver si Tesseract está en la imagen
docker exec mve-incrementables-parser which tesseract
# Si no está, reconstruir
docker-compose build --no-cache mve-incrementables-parser
```
### OCR muy lento
El OCR es naturalmente más lento que la extracción de texto normal. Para PDFs escaneados:
- Usa el endpoint **asíncrono** (`/parse-async`)
- El worker de Celery procesará en background
- Reduce `OCR_DPI` si no necesitas máxima calidad
### Ver qué método se usó (texto vs OCR)
El campo `extraction_method` en la respuesta te dice:
- `"pymupdf"` o `"pdfplumber"` → PDF con texto (rápido)
- `"ocr"` → PDF escaneado procesado con Tesseract (lento)
## 📝 Ejemplo de Respuesta
Cuando el sistema usa OCR automáticamente:
```json
{
"status": "success",
"message": "Incrementables extraídos exitosamente",
"data": {
"incrementables": {
"fletes": 1591.20,
"seguros": 0.0,
"almacenaje": 0.0,
"regalias": 0.0,
"currency": "USD",
"total": 1591.20
},
"document_info": {
"filename": "documento_escaneado.pdf",
"pages": 5,
"file_hash": "abc123...",
"file_size_bytes": 524288
},
"extraction_info": {
"method": "ocr", // ← Indica que se usó OCR
"anchors_found": ["AJUSTE DE INCREMENTABLES EN:"],
"warnings": []
}
}
}
```
## 🎯 Resumen
**Con Docker:**
- ✅ Todo incluido automáticamente
- ✅ Sin instalación manual
- ✅ Funciona igual en Windows, Mac, Linux
- ✅ OCR listo para usar desde el primer `docker-compose up`
**Comandos clave:**
```bash
docker-compose build # Construir imagen
docker-compose up -d # Iniciar servicios
docker-compose logs -f # Ver logs
docker-compose restart # Reiniciar después de cambios en .env
docker-compose down # Detener todo
```
¡Eso es todo! 🎉