Estás en:

informaciónDESARROLLADO POR:

Fecha de publicación del tutorial: 2006-03-23
Tutorial visitado 20.366 veces20.366
Descargar el tutorial en PDF


Regístrate para votar
Share |

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



Anímate y coméntanos lo que pienses sobre este TUTORIAL:

Puedes opinar o comentar cualquier sugerencia que quieras comunicarnos sobre este tutorial; con tu ayuda, podemos ofrecerte un mejor servicio.


(Sólo para usuarios registrados)

» Registrate y accede a esta y otras ventajas «

Comentarios

  1. Felipe
    2009-06-11 - 04:57:44 PM

    Hola: Muy buen tutorial. Ojalá me puedan ayudar porque tengo dudas. Necesito hacer un proyecto en Visual C 6.0. Ya me dieron el OCX de un OCR, lo registré en mi sistema y ya lo agregué al Proyecto, pero ahora no se como darle funcionalidad, porque creo que se necesita modificar el codigo para que funcione el OCR. Espero que me puedan ayudar es urgente, es un Proyecto para la escuela. El OCR se llama rtkocr.exe y aparte un archivo en .dll y lo estoy haciendo en windows XP, espero que me puedan ayudar y muchas gracias. Nombre: Felipe Ortigoza Mail: fortigoza_2211@hotmail.com

  2. luis
    2006-09-01 - 01:12:11 PM

    me ha servido de mucho el tutorial. muchas gracias.