El reconocimiento óptico de caracteres (OCR por sus siglas en inglés) es un sistema que proporciona un reconocimiento de caracteres alfanuméricos completo en una imagen. El sistema permite extraer texto de una imagen para luego convertirlo en un archivo editable.

Hay algunas bibliotecas de código abierto para OCR, como Tesseract, Gocr, JavaOCR y Ocrad. El más popular en la lista es Tesseract. Tesseract es un motor de OCR de código abierto que se desarrolló en HP entre 1984 y 1994. Combinado con la biblioteca de procesamiento de imágenes Leptonic puede leer una amplia variedad de formatos de imagen y convertirlos en texto. Además, cuenta con un buen apoyo de la comunidad, tiene wrappers para diferentes idiomas y tiene buenos resultados, entre otros.

Uno de estos wrappers es Pytesseract, basado en python. Veremos un ejemplo simple de Tesseract y uno que usa el contenedor.

Primero, instale tesseract. Para ubuntu 18 solo ejecute el comando:

sudo apt install tesseract-ocr

Luego, verifique la versión de tesseract con:

tesseract -v

Verá un mensaje como el siguiente:

tesseract 4.0.0-beta.1
leptonica-1.75.3
libgif 5.1.4 : libjpeg 8d (libjpeg-turbo 1.5.2) : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.11 : libwebp 0.6.1 : libopenjp2 2.3

Tesseract es un programa de línea de comando. Podemos probar tesseract proporcionando una imagen y luego verificando el texto resultante:

tesseract image.jpg out

Creará un archivo out.txt con el resultado.

Ahora, hagamos lo mismo que hicimos con la línea de comando, pero con Python.

Cree su entorno virtual con python3:

virtualenv ocr -p /usr/bin/python3

Para comenzar con nuestro OCR, necesitaremos 2 bibliotecas instaladas:

pip install pillow pytesseract

Una vez que se hayan instalado los requisitos, importe las bibliotecas necesarias:

import pytesseract
from PIL import Image

Dentro del método test() abriremos la imagen local y obtendremos el resultado con el método image_to_string, usando la misma imagen, el método devolverá el mismo texto del ejemplo anterior:

def test():
    img=Image.open("images/ocr.jpg")
    result = pytesseract.image_to_string(img)
    return "result: {}".format(result)
def main():
    print(test())
if __name__== "__main__":
   main()

Muy simple, ¿verdad? Bueno, si enviamos una imagen adecuada al OCR, devolverá el texto exacto. Una imagen adecuada necesita al menos el siguiente atributo:

  • Imagen binaria: imagen en blanco y negro.
  • El tamaño de la imagen preferiblemente no debe ser demasiado grande.
  • Delimite el área de interés.
  • Resalte el texto sobre el fondo
  • Evite el ruido, elimine los pixeles que no forman parte del texto.
  • La tipografía debe ser común, como Arial, Roman, Tahoma.
LEER
Pycon Colombia: El Primer encuentro de desarrolladores Python en Colombia

En la vida real, el OCR no funciona tan simple como este ejemplo, necesitará un buen paso de procesamiento previo antes de enviar la imagen al OCR. Debe asegurarse de que la imagen de entrada tenga los atributos anteriores para obtener un buen resultado; La calidad de la imagen se reflejará en el texto obtenido.

Puede analizar diferentes técnicas para el paso de preprocesamiento, la que elija depende de la entrada del tipo de imagen. Por ejemplo, varía si la imagen se toma en la oscuridad o en la luz, o si el color de la fuente del texto es blanco o negro. Cuando finalmente decida su técnica de preprocesamiento y la haya probado con varias imágenes, puede enviarla al OCR.

Existen amplias aplicaciones en el mundo de OCR, como aplicaciones móviles que pueden transformar una página de libro en una página digital, los sistemas que capturan placas de vehículos para multas de tráfico, sistemas de vehículos que pueden leer señales de tráfico en la carretera o los dispositivos que permiten a los invidentes leer en todas partes. El procesamiento de imágenes y el OCR juntos tienen varias aplicaciones que puede comenzar a consultar.


Comentarios