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:
47
README.md
47
README.md
@@ -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**
|
||||
|
||||
Reference in New Issue
Block a user