OCR con IA local
Qué cubre este artículo sobre OCR con IA local
- Cómo funciona OCR y por qué la IA ayuda.
- Tesseract (clásico) vs. modelos de visión (moderno).
- Cómo convertir documentos escaneados, fotos y capturas de pantalla en texto.
- Ejemplos prácticos para procesamiento de documentos.
- Mejores prácticas para precisión y rendimiento.
Introducción: OCR con IA local explicado de forma clara
OCR (Optical Character Recognition) extrae texto de imágenes. El OCR clásico (Tesseract) reconoce caracteres, pero no entiende el contexto. El OCR basado en IA (modelos de visión) interpreta la imagen: “Esta es una tabla con precios” en lugar de solo “A, B, 1, 2”. En local con Ollama, todas las imágenes permanecen privadas.
Este artículo va dirigido a usuarios que quieren extraer texto de imágenes. Encontrarás conceptos básicos en Modelos de visión y Análisis de documentos.
Por qué necesito OCR con IA
Imagina que tienes una foto de un documento. Tesseract extrae texto, pero sin contexto: “RE 2024 1234 15 03 1234 56”. Un modelo de visión entiende: “Factura RE-2024-1234, fecha 15.03., importe 1.234,56 €”. La IA interpreta la imagen, no solo los caracteres.
OCR con IA local en pocas palabras
Imagen → Modelo de visión (Ollama) → Texto + contexto. O: Imagen → Tesseract → Texto bruto → LLM → datos estructurados. Ambos enfoques de forma local.
La idea central es: el OCR clásico extrae caracteres, la IA entiende el contenido.
Para quién es este artículo
- Procesadores de documentos que digitalizan escaneos.
- Desarrolladores que construyen pipelines de OCR.
- Archivadores que capturan documentos antiguos.
- Auto-alojadores que ejecutan OCR localmente.
Términos importantes
- OCR - Optical Character Recognition. Cuándo es útil: para extraer texto de imágenes.
- Tesseract - Motor OCR clásico. Cuándo es útil: para extracción simple.
- Modelos de visión - IA para imágenes. Cuándo es útil: para OCR contextual.
- Ollama - Servidor de modelos. Cuándo es útil: para modelos de visión.
- PDF/Capa de texto - Texto en PDFs. Cuándo es útil: para extracción directa.
Tesseract vs. Modelo de visión
| Aspecto | Tesseract | Modelo de visión |
|---|---|---|
| Qué hace | Reconocimiento de caracteres | Comprensión de imágenes |
| Contexto | No | Sí |
| Tablas | Deficiente | Bien |
| Escritura manual | Limitado | Mejor |
| Diseño | Pierde estructura | Comprende estructura |
| Velocidad | Muy rápido | Más lento |
| VRAM | Ninguno | 2-6 GB |
| Mejor para | Texto simple | Documentos complejos |
Configuración: Tesseract
# Instalar Tesseract
sudo apt install tesseract-ocr tesseract-ocr-deu
# Biblioteca Python
pip install pytesseract pillow
# Probar
tesseract --version
from PIL import Image
import pytesseract
# Extraer texto de imagen
image = Image.open("scan.png")
text = pytesseract.image_to_string(image, lang="deu")
print(text)
Configuración: Modelo de visión (Ollama)
# Descargar modelo de visión
ollama pull minicpm-v:8b
import requests
import base64
def ocr_with_vision(image_path):
"""OCR con modelo de visión"""
with open(image_path, "rb") as f:
image_b64 = base64.b64encode(f.read()).decode()
response = requests.post("http://ollama:11434/api/chat", json={
"model": "minicpm-v:8b",
"messages": [
{
"role": "user",
"content": "Extrahiere todos los textos de esta imagen. Devuelve el texto de forma estructurada.",
"images": [image_b64]
}
],
"stream": False
})
return response.json()["message"]["content"]
# Ejemplo
text = ocr_with_vision("scan.png")
Ejemplo práctico 1: Escanear factura
# Tesseract para texto rápido
raw_text = pytesseract.image_to_string(invoice_image, lang="deu")
# LLM para estructuración
def structure_invoice(raw_text):
response = requests.post("http://ollama:11434/api/chat", json={
"model": "llama3.1",
"messages": [
{"role": "system", "content": "Estructura el texto de OCR como JSON: numero_factura, fecha, importe, posiciones."},
{"role": "user", "content": f"Texto de OCR:\n{raw_text}"}
],
"stream": False,
"format": "json"
})
return json.loads(response.json()["message"]["content"])
Ejemplo práctico 2: Extraer tabla
# Modelo de visión para tablas
def extract_table(image_path):
response = requests.post("http://ollama:11434/api/chat", json={
"model": "minicpm-v:8b",
"messages": [
{
"role": "user",
"content": "Extrae la tabla de esta imagen. Devuélvela como tabla Markdown.",
"images": [image_b64]
}
],
"stream": False
})
return response.json()["message"]["content"]
Ejemplo práctico 3: Escritura manual
# Modelo de visión para escritura manual (mejor que Tesseract)
def extract_handwriting(image_path):
response = requests.post("http://ollama:11434/api/chat", json={
"model": "minicpm-v:8b",
"messages": [
{
"role": "user",
"content": "Lee la escritura manual en esta imagen. Devuelve el texto.",
"images": [image_b64]
}
],
"stream": False
})
return response.json()["message"]["content"]
Enfoque híbrido
def hybrid_ocr(image_path):
"""Tesseract + LLM para mejores resultados"""
# 1. Tesseract para texto rápido
raw_text = pytesseract.image_to_string(image_path, lang="deu")
# 2. LLM para estructuración y corrección de errores
response = requests.post("http://ollama:11434/api/chat", json={
"model": "llama3.1",
"messages": [
{"role": "system", "content": "Corrige errores de OCR y estructura el texto."},
{"role": "user", "content": f"Texto bruto de OCR:\n{raw_text}"}
],
"stream": False
})
return response.json()["message"]["content"]
Notas de seguridad
- Las imágenes pueden contener datos sensibles: el procesamiento local protege. Consulta Protección de datos.
- Errores de OCR: escaneos deficientes producen extracciones deficientes. Verifica la calidad.
- Inyección de prompts: las imágenes pueden contener instrucciones ocultas. Consulta Inyección de prompts.
Obstáculos típicos
- Calidad de imagen deficiente: escaneos borrosos producen OCR deficiente. Mejora la calidad.
- Modelo incorrecto: para textos simples Tesseract es más rápido. Para documentos complejos usa modelo de visión.
- Sin contexto: Tesseract no entiende contexto. Para estructura, añade LLM después.
- Varios idiomas: Tesseract necesita paquetes de idioma. Los modelos de visión son multilingües.
- Escritura manual: Tesseract es deficiente para escritura manual. Los modelos de visión son mejores.
Enlaces relacionados
- Análisis de documentos - Entender documentos.
- Modelos de visión - Comparación de modelos de visión.
- Visión en Ollama - Visión en Ollama.
- Documentos y PDF - Descripción general.
- Chat con PDF - Conversar con documentos.
Puntos clave:
- Tesseract para extracción rápida y simple de texto.
- Modelos de visión para documentos complejos, tablas, escritura manual.
- Híbrido: Tesseract para texto bruto, LLM para estructuración.
- Local con Ollama: todas las imágenes permanecen privadas.
- Para escaneos deficientes: mejora primero la calidad de la imagen.
FAQ
¿Qué es OCR?
¿Tesseract o modelo de visión?
¿Puede la IA leer escritura manual?
¿Puede la IA extraer tablas?
¿Qué idiomas se admiten?
¿Cuán importante es la calidad de la imagen?
¿Son seguras mis imágenes?
¿Cuánto cuesta OCR?
Fuentes y lecturas complementarias
- Tesseract OCR - OCR clásico.
- pytesseract - Biblioteca Python.
- MiniCPM-V - Modelo de visión.
- Ollama - Servidor de modelos.


