En Autentia
nos involucramos diariamente en el desarrollo
de proyectos software de diversos tipos, según reclama el
propio mercado actualmente. Un tipo de aplicaciones bastante popular
son aquellas destinadas a la gestión documental. El abanico de
funcionalidades que pueden englobar este tipo de aplicaciones puede
ser bastante amplio. Entre otras, son de especial importancia
aquellas destinadas a la búsqueda y extracción de
información desde los documentos gestionados. Hoy os queremos
mostrar una pequeña introducción a la tecnología
OCR como una herramienta muy útil para realizar algunas de
estas funciones de extracción de información desde
documentos.
1. Aspectos básicos
sobre OCR
OCR
(Optical Character Recognition) es una tecnología que
permite transformar el contenido de una imagen en texto plano.
Normalmente, el contenido de una imagen que suele transformarse es
aquél asociado a cadenas de texto, si bien algunas
aplicaciones para OCR permiten transformar otro tipo de objetos
gráficos contenidos en una imagen, como pueden ser, por
ejemplo, códigos de barras.
Esta
tecnología tiene especial aplicabilidad en sistemas
informáticos de gestión documental, como puede
intuirse. Muchas aplicaciones de gestión documental suelen
manejar documentos escritos, almacenados en archivos con diversos
formatos de imagen (pdf, jpg, tiff, etc). Esto es debido
fundamentalmente a que la base documental de este tipo de
aplicaciones suele obtenerse tras realizar un proceso de
digitalización (escaneo, etc) de los documentos impresos en
papel, a fin de poder ser manejados por dicha aplicación.
El
uso de aplicaciones OCR permite extraer el contenido textual de
documentos contenidos en formato de imagen, a fin de realizar
diversas funciones de gestión documental, tales como:
-
Búsqueda
de documentos con cierta información. -
Extracción
de la información concreta de un documento. -
Pasar
de un documento escrito contenido en un archivo de imagen, a un
archivo con formato de texto plano.
Un
ejemplo sencillo de aplicación de la tecnología OCR
podría ser el siguiente. Se tiene la siguiente imagen y desea
extraerse el texto contenido en la misma:
Idealmente,
aplicando OCR se obtendría la cadena de texto asociada:
Autentia
Real Business Solutions.
Soporte
al desarrollo.
Se
dice idealmente porque, como puede suponerse, la eficacia total del
OCR en la vida real a veces es tarea difícil. El porcentaje de
recuperación del contenido textual de una imagen puede estar
limitado a aspectos como el tipo, tamaño o color de la letra,
“ruido” del documento (manchas, contraste, mezcla de
caracteres entre sí o con otros objetos gráficos), etc.
En
este documento se ilustrará la utilización de la
tecnología OCR utilizando las librerías de la compañía
Asprise, así como la aplicación de libre
distribución GOCR. En los siguientes apartados se comentará
como obtener este software y utilizarlo para realizar reconocimiento
de caracteres desde archivos de imágenes.
2. Utilizando las librerías
de Asprise
Las
librerías de Asprise para utilizar tecnología
OCR están disponibles en diversos lenguajes de programación
tales como C/C++, Java, Delphi, Visual, etc.
Son capaces de
realizar reconocimiento de caracteres sobre infinidad de formatos de
imágenes, tales como:
Aparte de
reconocimiento de caracteres alfanuméricos, estas librerías
incorporan la funcionalidad de reconocimiento de códigos de
barras.
2.1.
Instalación y requisitos
Los
ejemplos que se estudiarán con estas librerías, se
desarrollaron y ejecutaron en un entorno Windows XP.
En este caso, para
emplear la tecnología OCR se utilizó la versión
3.0 de Asprise OCR SDK para Windows. Más
concretamente, se optó por las librerías para trabajar
en C/C++/Delphi, cuya distribución de evaluación
asociada (archivo ocr-eval-c.zip) puede obtenerse
gratuitamente desde el siguiente enlace:
http://asprise.net/download/software/ocr/ocr-eval-c.zip
Una vez descomprimido
dicho archivo (supóngase, al directorio OCR-C), es necesario
copiar al directorio del sistema operativo (habitualmente C:\Windows)
las siguientes librerías dinámicas:
-
OCR-C\AspriseOCR.dll
-
OCR-C\DevIL.dll
-
OCR-C\ILU.dll
Como
entorno de desarrollo se eligió Visual C++ 2005 Express
Edition, que puede instalarse gratuitamente desde la dirección:
http://msdn.microsoft.com/vstudio/express/visualc/download/default.aspx
Una
vez creado un nuevo proyecto con este entorno, deberán
copiarse los siguientes archivos a las carpetas de proyecto
indicadas:
-
OCR-C\AspriseOCRLib\include\AspriseOCR.h
a Header Files -
OCR-C\AspriseOCRLib\lib\AspriseOCR.lib
a Resource Files
Con
estos pocos pasos, ya se tiene preparado un entorno para realizar
programas en C que utilicen la tecnología OCR, tal como se
mostrará a continuación.
2.2.
La función OCR
La
función fundamental de estas librerías para realizar
OCR sobre imágenes es OCR, cuya interfaz es la
siguiente:
[char
*] OCR([char *] imagePath, [int] imageFileType)
El
significado de sus argumentos de entrada es el siguiente:
-
imagePath
es una cadena de caracteres que contiene la ruta completa de la
imagen sobre la que se desea hacer OCR. -
imageFileType
indica el tipo de imagen que contiene el archivo indicado en
imagePath.
Las
constantes definidas por defecto para indicar el tipo de imagen en
imageFileType se encuentran en el fichero AspriseOCR.h
(ubicado en la carpeta de proyecto Header Files). Son las
siguientes:
En
general, puede utilizarse la constante IMAGE_TYPE_AUTO_DETECT
para dejar que la función OCR detecte automáticamente
el formato de la imagen.
Esta
función realiza OCR tanto sobre caracteres alfanuméricos
como sobre códigos de barras, tal como se mostrará.
El
retorno de esta función es una cadena de caracteres con el
resultado del OCR realizado sobre la imagen. Si reconoce un código
de barras, la cifra correspondiente la encerrará entre
corchetes (“[“, “]”).
Se
realiza un sencillo programa de prueba de esta función con las
siguientes lineas de código:
#include <stdio.h> #include “AspriseOCR.h” int main(int argc, char* argv[]) { //Cadena que contendra el resultado del OCR char *text = “”; //Ruta de la imagen char *input = “C:/autentia.jpg”; //OCR de la imagen text = OCR(input, IMAGE_TYPE_AUTO_DETECT); //Imprimir por salida estandar el resultado printf(“——- RESULTADO ——-\n\n”); printf(text); printf(“\n\n————————-\n\n”); return 0; }
El
programa simplemente realizará OCR sobre la imagen indicada y
mostrará el resultado por pantalla. La imagen autentia.jpg
tiene el siguiente contenido:
Se
edita y guardan las líneas de código anteriores en el
archivo test.c, en la carpeta de proyecto Source Files.
Se
compila pulsando Build Solution sobre el desplegable superior
etiquetado como Build, o bien F7.
Puede
observarse que no hay errores en la pantalla inferior Output.
Se
ejecuta el programa para ver los resultados de la prueba. Puede
pulsarse Start Without Debugging en el desplegable superior
etiquetado como Debug, o bien CTRL+F5.
En
la ventana de símbolo de sistema emergente puede observarse el
resultado de la operación:
En
este caso se han obtenido unos resultados excelentes, recuperando
toda la información de la imagen procesada.
A
continuación se muestran ejemplos de ejecución de este
mismo programa con otras imágenes en jpg que contienen
distintos, tipos, fuentes, colores, tamaños, etc.
—-
—-
—-
—-
—-
Puede
observarse que el programa parece procesar mejor las imágenes
en blanco y negro que las que contienen colores. Otra característica
relevante para favorecer un buen reconocimiento parece ser la fuente
de la letra. El programa obtiene resultados satisfactorios incluso en
la última prueba, con texto escrito a mano alzada.
Como
se comentó anteriormente, la función OCR de
estas librerías también puede reconocer códigos
de barras. Con el mismo programa de prueba, se hace OCR de la
siguiente imagen con un código de barras:
El resultado de la ejecución
es el siguiente:
Como se comentó antes, la
función OCR encierra los códigos de barras
reconocidos entre corchetes en la cadena de texto que devuelve.
3.
Utilizando GOCR
En este apartado se considerará
la utilización de la aplicación GOCR, de libre
distribución, para tareas de reconocimiento de caracteres
desde archivos de imágenes.
En este caso, en vez de librerías
especificas se utilizará una aplicación de línea
de comandos para hacer OCR.
GOCR realiza reconocimiento de
caracteres sobre imágenes de diversos formatos, como por
ejemplo, pnm, pgm, pbm, ppm y pcx.
3.1.
Instalación y requisitos
Los ejemplos
que se estudiarán con esta aplicación, se desarrollaron
y ejecutaron en un entorno Windows XP.
El
archivo gocr040exe.zip
con la
aplicación de línea de comandos que se empleará
en este caso, se puede descargar gratuitamente desde la siguiente
dirección:
http://jocr.sourceforge.net/download.html
3.2.
Probando por línea de comandos
En primer
lugar, lo más recomendable es ejecutar la aplicación
(gocr) con el parámetro -h para obtener la ayuda
y ver las opciones de ejecución de la aplicación.
Como puede
observarse, la opción fundamental para realizar OCR sobre una
imagen es ejecutar:
gocr
-i [imagen]
Se probará entonces esta
aplicación con las imágenes que se consideraron en las
pruebas anteriores de las librerías de Asprise.
En este caso se utilizarán
versiones de dichas imágenes en formato ppm, ya que
esta aplicación no procesa imágenes en jpg (precisa
aplicación djpeg para convertir previamente). Los
resultados se muestran a continuación:
—-
—-
—-
—-
—-
—-
Al igual que el las librerías
de Asprise, GOCR parece empeorar su rendimiento con la
escritura en ciertos colores. En los casos de prueba ejecutados,
también se comprueba que para los textos en blanco y negro el
rendimiento para ciertas fuentes de letras es bastante bueno. Con la
última prueba (texto a mano alzada) parece que tiene más
problemas que las librerías de Asprise.
GOCR también permite el
reconocimiento de códigos de barras. Si ejecutamos el ejemplo
del apartado anterior se obtiene el siguiente resultado:
El lector interesado puede
profundizar más en la utilización de esta aplicación
utilizando otras opciones interesantes como, por ejemplo, seleccionar
el archivo donde se dirigirá la salida, seleccionar el formato
en el que se almacenará dicha salida, reconocer sólo
números, etc.
4.
Conclusiones
Las utilidades para realizar OCR
sobre imágenes pueden resultar muy interesantes para
documentos con determinadas características textuales (tipo de
fuente, tamaño). El contraste del documento parece ser
especialmente importante, de forma que en general estas utilidades
rinden mejor sobre imágenes en blanco y negro.
De cualquier forma, aunque no se
obtengan resultados completamente satisfactorios en algunos casos,
siempre puede aportar cierta utilidad el OCR realizado por estas
utilidades. Por ejemplo, siempre es mejor poder obtener el 70% del
texto contenido en una imagen y completarlo a mano, que tener que
copiarlo entero de nuevo; también pueden reconocerse en el
proceso algunas cadenas sueltas que podrían ser útiles
para indicar ciertas características del documento.
Además, como se ha visto en
este documento, la tecnología de OCR suele ampliarse a
reconocer otro tipo de objetos gráficos aparte de símbolos
alfanuméricos, como son los códigos de barras. Esto
aumenta enormemente su utilidad y fomenta su uso para, por ejemplo,
aplicaciones de gestión documental.
5.
Fuentes
-
Página de Asprise OCR SDK:
-
Página de oficial de GOCR:
-
Página de Visual C++ 2005
Express Edition:
Excelente tutorial, llegue a este tutorial gracias a una consulta de mi amiga Lizbeth Cuba Samaniego de Portugal, ahora tengo mas luz sobre el tema OCR, gracias.
Buenisimo. Es justo la alternativa OCR que andaba buscando, ya que previamente usaba Tesseract_OCR per me ha dado ciertos inconvenientes en C++ VS2015. Gracias, saludos.
es muy bueno , me gustaria ver como se trabaja en java esto