Reconocimiento Óptico de Carácteres (OCR)

Un sistema OCR (de las siglas en inglés de Reconocimiento Óptico de Carácteres) es un software que se encarga de leer el texto de una imagen, tanto escrito a mano como mecanografiado.

Son unas aplicaciones útiles y más utilizadas de lo que parece: en los aparcamientos que leen la matrícula del coche, en el software de descarga automática de archivos (que tienen que resolver los captchas), en el escaneo de documentos, etc.

Hoy en día hay una gran variedad de software (tanto libre como comercial) que se ocupa de esta tarea, a pesar de que hasta la fecha no se ha conseguido crear ningún programa realmente eficaz. De entre las distintas opciones están:

  • GOCR: uno de los más potentes, desarrollado (y posteriormente liberado) por HP.
  • JavaOCR: el único decente escrito en Java.
  • Tesseract-OCR: desarrollado con el apoyo de Google.
  • Online OCR y Free OCR: ambos completamente online.

Un software OCR se basa en una serie de procesos:

  • El primer paso es aplicar un preprocesamiento sobre la imagen a convertir:
    • Se convierte la imagen a blanco y negro para evitar información no necesaria.
    • Se detectan las palabras y las letras, y éstas últimas se separan unas de otras.
    • A cada letra se le aplica un proceso de adelgazamiento: se van haciendo los trazos finos hasta que solo tienen un pixel de anchura.
  • Una vez que la imagen se ha preprocesado, se utiliza algún método de comparación de patrones para reconocer la letra.
  • Una vez detectadas todas las letras se puede ir un paso más allá y comprobar si la palabra obtenida tiene significado (si existe en un diccionario) para comprobar (o no) la eficacia de la detección.

Algunos de los métodos de comparación con patrones son: la comparación bit a bit de la imagen con cada uno de los patrones a reconocer, la minimización de alguna función (como una métrica definida sobre las imágenes a reconocer), o algunas técnicas más complicadas como aplicar transformaciones a la imagen: la transformada de Fourier discreta, la transformada de Hough, …

Para acabar, una excelente charla TED sobre para que se pueden utilizar los captchas: