OCR en Elixir: El Sentido de la Vista

La capacidad de percibir el mundo a través de la visión es uno de los sensores más poderosos que podemos otorgar a un agente. El Reconocimiento Óptico de Caracteres (OCR) permite transformar imágenes que contienen texto en datos estructurados que el agente puede procesar. En la terminología PEAS, el OCR actúa como un sensor que alimenta la secuencia de perceptos del agente con información visual del entorno.

¿Qué es Tesseract?

Tesseract es un motor de OCR de código abierto originalmente desarrollado por Hewlett-Packard en los años 80 y actualmente mantenido por Google. Es uno de los motores más precisos disponibles y soporta más de 100 idiomas.

Instalación de Tesseract

Para realizar OCR en Elixir, utilizaremos el motor Tesseract. Debes instalarlo en tu sistema operativo antes de continuar:

  • Windows: [source, powershell] ---- choco install tesseract ----

  • Ubuntu/Debian: [source, bash] ---- sudo apt install tesseract-ocr ----

  • macOS: [source, bash] ---- brew install tesseract ----

Verificar la Instalación

tesseract --version   (1)
tesseract --list-langs (2)
1 Muestra la versión instalada de Tesseract.
2 Lista los idiomas disponibles para OCR.

Idiomas Adicionales

Por defecto, Tesseract se instala con soporte para inglés. Para procesar textos en otros idiomas, necesitas descargar los paquetes correspondientes:

  • Windows (Chocolatey instala los idiomas más comunes automáticamente)

  • Ubuntu/Debian: [source, bash] ---- sudo apt install tesseract-ocr-spa # Español sudo apt install tesseract-ocr-por # Portugués sudo apt install tesseract-ocr-deu # Alemán ----

  • macOS: [source, bash] ---- brew install tesseract-lang # Instala todos los idiomas disponibles ----

Para obtener la lista completa de códigos de idioma, consulta la documentación oficial de Tesseract.

Implementación en Elixir

Utilizaremos la librería tesserax. Añádela a tu mix.exs:

defp deps do
  [
    {:tesserax, "~> 0.4.0"}
  ]
end

Ejemplo de Uso

Una vez instaladas las dependencias, procesar una imagen es sumamente sencillo:

# Procesa una imagen y extrae su contenido
case Tesserax.read("ruta/a/tu/imagen.png") do
  {:ok, texto} -> IO.puts("Texto extraído: #{texto}")
  {:error, razon} -> IO.puts("Error: #{inspect(razon)}")
end

Especificar Idioma

# Procesar un documento en español
{:ok, texto} = Tesserax.read("documento.png", language: "spa")

Importancia del Preprocesamiento

La calidad del OCR depende directamente de la calidad de la imagen de entrada. Antes de enviar una imagen a Tesseract, considera estos factores:

Factor Recomendación

Resolución

Mínimo 300 DPI para texto impreso. 600 DPI para texto manuscrito.

Contraste

Fondo blanco limpio con texto negro. Evitar fondos con texturas o colores.

Orientación

La imagen debe estar correctamente orientada. Tesseract puede auto-detectar orientación con --psm 1.

Ruido

Eliminar manchas, arrugas o artefactos de escaneo antes del procesamiento.

Para preprocesamiento avanzado de imágenes en Elixir, la librería Evision (bindings de OpenCV) permite aplicar técnicas como binarización, eliminación de ruido y corrección de perspectiva antes de pasar la imagen a Tesseract.

Asegúrate de que la imagen tenga un buen contraste para mejorar la precisión del motor de reconocimiento. Una regla para el agente racional: invertir en la calidad del percepto siempre mejora la calidad de la decisión.