IMPORTANTE: REQUISITOS DE CPU
Este proyecto requiere una CPU con soporte AVX/AVX2. NO funcionará en:
- VPS con "Common KVM processor" (virtualizados básicos)
- CPUs antiguas sin instrucciones AVX
Error típico si la CPU no es compatible:
Illegal instruction (core dumped)
PaddleOCR Fusion v3.1 es una API REST profesional construida sobre PaddleOCR 3.x con:
- Sistema de Diccionarios OCR - Correcciones automáticas para español (407+ correcciones)
- Mejora con IA (Gemini Vision) - Corrección inteligente comparando imagen vs texto OCR
- Modo Layout Experimental - Reconstrucción espacial de documentos
- Dashboard Web Interactivo - 6 tabs para gestión completa
- Auto-recuperación de errores - Reintentos automáticos en std::exception
┌─────────────────────────────────────────────────────────────┐
│ API REST Layer │
│ ┌────────┬────────┬─────────┬──────────┬────────────────┐│
│ │ / │ /stats │/process │/analyze │ /api/dictionary ││
│ │ │ │ │ │ /api/config ││
│ └────────┴────────┴─────────┴──────────┴────────────────┘│
│ ↓ │
│ ┌────────────────────────────────────────────────────────┐│
│ │ Sistema de Diccionarios OCR ││
│ │ • BASE: 407 correcciones para español ││
│ │ • CUSTOM: Personalizadas (persistentes) ││
│ │ • Regex: Patrones (55:23 → 55,23) ││
│ └────────────────────────────────────────────────────────┘│
│ ↓ │
│ ┌────────────────────────────────────────────────────────┐│
│ │ Core Processing (Base de Paco) ││
│ │ • PaddleOCR 3.x (PP-OCRv3) ││
│ │ • Preprocesamiento OpenCV ││
│ │ • Corrección perspectiva/orientación/inclinación ││
│ │ • Procesamiento multi-página ││
│ └────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
# Clonar repositorio
git clone https://github.com/webcomunicasolutions/paddleocr-experimental-layout.git
cd paddleocr-experimental-layout
# Construir e iniciar
docker-compose build
docker-compose up -d
# Verificar estado
curl http://localhost:8503/health
# Abrir Dashboard
firefox http://localhost:8503/| Endpoint | Método | Descripción |
|---|---|---|
/ |
GET | Dashboard web interactivo |
/health |
GET | Estado del servidor |
/stats |
GET | Estadísticas detalladas |
/process |
POST | OCR con formatos (normal/layout) |
/analyze |
POST | Análisis detallado |
/ocr |
POST | Endpoint original n8n |
| Endpoint | Método | Descripción |
|---|---|---|
/api/dictionary |
GET | Obtener todos los diccionarios |
/api/dictionary/add |
POST | Añadir corrección |
/api/dictionary/remove |
POST | Eliminar corrección |
/api/dictionary/reload |
POST | Recargar desde archivos |
/api/dictionary/test |
POST | Probar correcciones en texto |
/api/dictionary/analyze |
POST | Analizar documento para errores |
/api/dictionary/improve |
POST | Corregir con Gemini Vision |
/api/dictionary/import |
POST | Importar diccionarios externos |
/api/dictionary/available |
GET | Listar diccionarios predefinidos |
| Endpoint | Método | Descripción |
|---|---|---|
/api/config/apikey |
GET | Verificar si hay API key configurada |
/api/config/apikey |
POST | Guardar API key de Gemini |
/api/config/apikey/test |
POST | Probar si la API key funciona |
El dashboard incluye 6 tabs:
- Estado - Estadísticas del servidor en tiempo real
- Test OCR - Subir y procesar documentos (Normal/Layout)
- Diccionario - Ver y gestionar correcciones OCR
- Mejorar Diccionario - Flujo con IA para añadir correcciones
- Configuración - Gestión de API Key de Gemini
- Ayuda - Documentación y ejemplos
Incluye correcciones para:
- Ciudades españolas: Cádiz, Málaga, Córdoba, Sevilla, Almería, Jaén...
- Términos fiscales: IVA, NIF, CIF, IRPF, Total, Base Imponible...
- Confusiones OCR: 1↔l↔I, 0↔O, rn↔m, 5↔S, 8↔B...
- Productos/servicios: Gasóleo, Gasolina, Electricidad, Suministro...
- Formas de pago: Efectivo, Tarjeta, Transferencia...
- Se guarda en volumen Docker
/app/dictionaries - Sobrevive a reinicios del contenedor
- Editable desde el Dashboard
55:23→55,23(precios con dos puntos)- Otros patrones configurables
- Subir documento (PDF/imagen)
- Ejecutar OCR con PaddleOCR
- Corregir con Gemini - envía imagen + texto OCR
- Comparar diferencias - extrae correcciones automáticamente
- Añadir al diccionario - selecciona y guarda
- Obtener API Key gratis en: https://aistudio.google.com/app/apikey
- Ir a Dashboard → Tab "Configuración"
- Introducir API Key y guardar
| Volumen | Ruta Contenedor | Propósito |
|---|---|---|
/home/n8n |
/home/n8n |
Integración n8n, archivos I/O |
paddlex-models |
/home/n8n/.paddlex |
Cache modelos PaddleX |
paddleocr-models |
/home/n8n/.paddleocr |
Cache modelos PaddleOCR |
ocr-dictionaries |
/app/dictionaries |
Diccionarios personalizados |
ocr-config |
/app/config |
API keys y configuración |
# Flask
FLASK_ENV=production
FLASK_PORT=8503
TZ=Europe/Madrid
# OpenCV
OPENCV_HSV_LOWER_H=0
OPENCV_HSV_LOWER_S=0
OPENCV_HSV_LOWER_V=140
OPENCV_HSV_UPPER_H=180
OPENCV_HSV_UPPER_S=60
OPENCV_HSV_UPPER_V=255
OPENCV_MIN_AREA_PERCENT=0.05
OPENCV_EPSILON_FACTOR=0.01
OPENCV_ERODE_ITERATIONS=1
OPENCV_DILATE_ITERATIONS=2
OPENCV_MIN_WIDTH=300
OPENCV_MIN_HEIGHT=400
OPENCV_EROSION_PERCENT=0.085
OPENCV_INNER_SCALE_FACTOR=1.06
# Rotación
ROTATION_MIN_CONFIDENCE=0.7
ROTATION_MIN_SKEW_ANGLE=0.2
# OCR
OCR_VERSION=PP-OCRv3
OCR_LANG=es
OCR_USE_DOC_ORIENTATION=false
OCR_USE_DOC_UNWARPING=false
OCR_USE_TEXTLINE_ORIENTATION=false
OCR_TEXT_DET_THRESH=0.1
OCR_TEXT_DET_BOX_THRESH=0.4
OCR_TEXT_DET_UNCLIP_RATIO=1.5
OCR_TEXT_DET_LIMIT_SIDE_LEN=960
OCR_TEXT_DET_LIMIT_TYPE=min
OCR_TEXT_RECOGNITION_BATCH_SIZE=6
# Optimización CPU
OMP_NUM_THREADS=1
MKL_NUM_THREADS=1
FLAGS_allocator_strategy=auto_growth
FLAGS_fraction_of_gpu_memory_to_use=0
CUDA_VISIBLE_DEVICES=""curl -X POST http://localhost:8503/process \
-F "file=@factura.pdf" \
-F "format=normal"curl -X POST http://localhost:8503/process \
-F "file=@factura.pdf" \
-F "format=layout"curl -X POST http://localhost:8503/api/dictionary/import \
-H "Content-Type: application/json" \
-d '{"dictionary": "fiscal_terms"}'spanish_cities- Ciudades españolas con tildesfiscal_terms- IVA, NIF, CIF y términos fiscalescommon_ocr_errors- Confusiones típicas OCRproducts_services- Productos y servicios comunes
Causa: CPU sin soporte AVX/AVX2.
Verificar:
cat /proc/cpuinfo | grep avxSolución: Usar servidor con CPU dedicada (Hetzner CPX/CCX, DigitalOcean Dedicated, etc.)
Normal. Los modelos se cargan en la primera petición. Las siguientes serán rápidas (~1-2s).
El sistema tiene auto-recuperación con 5 reintentos automáticos.
- Nuevo: Sistema de diccionarios OCR (BASE + CUSTOM)
- Nuevo: 407 correcciones para español
- Nuevo: Integración Gemini Vision para mejora de diccionarios
- Nuevo: API REST completa para gestión de diccionarios
- Nuevo: Tab "Configuración" para API keys
- Nuevo: Tab "Mejorar Diccionario" con flujo IA
- Nuevo: Importación de diccionarios externos
- Nuevo: Volumen
ocr-configpara persistir configuración - Mejorado: Auto-recuperación de errores std::exception
- Nuevo: Modo Layout experimental con coordenadas
- Nuevo: Reconstrucción espacial de texto
- Mejorado: Serialización JSON de numpy arrays
MIT License - Ver LICENSE
- Base: Proyecto de Paco (PaddleOCR 3.x + preprocesamiento)
- API REST: WebComunica
- PaddleOCR: PaddlePaddle Team
- Desarrollo: Claude Code
Made with Claude Code by WebComunica