Skip to content
BotServBotServ
OCRTesseractVision-ModelleExtracción de TextoEscaneos

OCR con IA Local

Extrae texto de imágenes y escaneos con OCR local. Tesseract vs. modelos Vision y ejemplos prácticos.

S

schutzgeist

5 min read
OCR con IA Local

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

AspectoTesseractModelo de visión
Qué haceReconocimiento de caracteresComprensión de imágenes
ContextoNoSí
TablasDeficienteBien
Escritura manualLimitadoMejor
DiseñoPierde estructuraComprende estructura
VelocidadMuy rápidoMás lento
VRAMNinguno2-6 GB
Mejor paraTexto simpleDocumentos 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

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?

Optical Character Recognition: extrae texto de imágenes. Clásicamente con Tesseract, modernamente con modelos de visión que también comprenden el contexto.

¿Tesseract o modelo de visión?

Tesseract para textos simples y rápidos. Modelo de visión para documentos complejos, tablas, escritura manual y comprensión de contexto. Híbrido para mejores resultados.

¿Puede la IA leer escritura manual?

Sí, los modelos de visión pueden leer escritura manual, mejor que Tesseract. Para escritura muy deficiente sigue siendo difícil.

¿Puede la IA extraer tablas?

Sí, los modelos de visión comprenden la estructura de tablas y pueden devolverlas como Markdown o JSON. Tesseract pierde la estructura.

¿Qué idiomas se admiten?

Tesseract necesita paquetes de idioma (tesseract-ocr-deu para alemán). Los modelos de visión son multilingües y entienden muchos idiomas automáticamente.

¿Cuán importante es la calidad de la imagen?

Muy importante. Escaneos borrosos, inclinados u oscuros producen resultados deficientes. Para mejor OCR: buena resolución, alineación recta, buen contraste.

¿Son seguras mis imágenes?

Sí, si utilizas herramientas locales (Tesseract, Ollama). Con OCR en la nube (Google, Azure) las imágenes se envían, para documentos sensibles mantén el procesamiento local.

¿Cuánto cuesta OCR?

Tesseract: gratuito. Ollama + modelo de visión: gratuito (solo hardware). OCR en la nube: costo por página o imagen.

Fuentes y lecturas complementarias

Volver al blog
Share:

Entradas relacionadas