Showing posts with label reconocimiento óptico de caracteres. Show all posts
Showing posts with label reconocimiento óptico de caracteres. Show all posts

Saturday, September 05, 2015

Un truco para proteger el software


El 8 de agosto del 2013 publiqué un artículo sobre un programa que hace reconocimiento de caracteres visualmente (OCR), el cual usa una biblioteca de funciones de un tercero, que yo no escribí, sólo usé.

La biblioteca es gratuita pero estaba limitada en tiempo de uso, cosa que no sabía. El asunto es que de pronto mi programa dejó de funcionar. De alguna manera, pensé, la biblioteca tiene por ahí alguna función que sabe en qué momento se instaló el software y entonces calcula si está todavía en período de pruebas o no. Normalmente muchos programas en modo de prueba, que duran muchas veces no más de 30 días, permiten que el interesado pueda revisar, probar y usar el software sin ninguna limitación en ese tiempo. Después del mismo el software ya no se puede ejecutar.

Los esquemas para hacer software de prueba pueden funcionar de la siguiente manera: escribir en el disco duro del usuario, en alguna parte, un archivo escondido con la fecha de terminación del período de prueba. El software, antes de correr, va a buscar ese archivo y lo lee. Si la fecha del sistema ya es mayor a los 30 días, el software termina. Si por alguna eventualidad dicho archivo no existe, también el sistema termina la ejecución.

Hay otros esquemas más sofisticados que escriben en el REGISTRY, un archivo fundamental en la PC que si desaparece, mete en problemas al usuario de la máquina porque probablemente no pueda ver siquiera los programas que tiene en la máquina. Es un archivo muy sensible y ahí muchos fabricantes de software ponen sus claves de registro para conocer si se trata de software de prueba o no. No me voy a meter más con este archivo y recomiendo que si no saben cómo funciona, ni metan las manos ahí. Si lo hacen y cometen un error, es casi garantía que su computadora quedará inutilizada.

Pues bien, regresando al problema, me sorprendía que el ejecutable de mi programa de reconocimiento de caracteres supiera que ya no puede ejecutarse. Pensando un poco sobre esto, hallé que la única manera que podría saber eso era con al fecha de creación del programa escrito. Entonces decidí hacer una prueba: cambiar la fecha del ejecutable por la del día de hoy y probar. ¡Y sorpresa! Funcionó.

Para cambiar la fecha de creación de un programa se usa una utilería llamada touch, la cual cambia automáticamente la fecha del software. La sintaxis es:

touch nombre_del_archivo

Este programa no es de Windows, sino que se corre en modo consola. Como mucha gente no sabe cómo pasar a modo consola, escribí en un archivo batch dos instrucciones que hacen la tarea:

touch ocr01.exe
ocr01

Al darle doble click a este programa .bat, el sistema cambia la fecha al día de hoy y corre el software sin problemas. Así pues, asunto solucionado después del uso de un par de neuronas para entender el esquema de protección usado por el autor de la biblioteca de software.

Si alguien cree que hago mal, le sugiero entonces me compre la biblioteca comercial de dicho paquete de OCR y asunto moral solucionado.

Si le interesa este programa, escríbame a morsa@la-morsa.com y se lo mandaré a su correo.

Thursday, August 08, 2013

OCR para todos

El reconocimiento óptico de caracteres (OCR por sus siglas en inglés), trata de reconocer letras y palabras a partir de imágenes, de manera que puedan pasar a un sistema que pueda ser manipulado. Por ejemplo, si tuviésemos una hoja de un documento que ha sido escrito a máquina y éste lo pasáramos por un escáner, usando la tecnología del OCR podríamos convertir la imagen del documento en cuestión en texto, el cual ya podríamos manipular fácilmente. Esto -desde luego- nos evitaría gastar tiempo, pues claramente un documento físico, si lo quisiésemos en la computadora como archivo de texto, tendríamos que transcribirlo a mano. Con el OCR esta dificultad desaparece.

El proceso básico del OCR es convertir el texto que aparece en una imagen a un archivo de texto, el cual podrá ser editado y usado como tal por cualquier otro programa, por ejemplo un procesador de palabras. Partimos pues de la imagen de un documento, la cual podría ser muy buena, digamos perfecta, con sólo dos niveles de gris, blanco y negro. Bajo esta premisa, el reconocimiento de caracteres se realiza comparándolos con patrones que contienen todos los posibles caracteres (en un idioma específico). Sin embargo, las imágenes reales que escaneamos con este propósito no son perfectas, por lo el OCR encuentra varias dificultades:

  • El dispositivo que obtiene la imagen puede introducir niveles de grises al fondo que no pertenecen a la imagen original.
  • La resolución de estos dispositivos puede introducir ruido en la imagen, afectando los píxeles que han de ser procesados.
  • La distancia que separa a unos símbolos (letras) de otros, al no ser siempre la misma, puede producir errores de reconocimiento.
  • La conexión de dos o más caracteres por píxeles comunes también puede producir errores.
El programa en funcionamiento 
(usando una imagen escaneada de una cuartilla de la Gaceta UNAM)

Hoy en día muchos de estos problemas han sido resueltos y ya existen componentes y bibliotecas de OCR para los lenguajes de programación más populares. De hecho, me interesé en el tema porque tenía un documento que necesitaba pasar a texto y me daba una pereza extraordinaria teclearlo en la computadora. Así que en lugar de hacer esto, me di a la tarea de ver si podía programar una aplicación que lograra esto. Así entonces, bastaría con escanear las cuartillas del documento en cuestión y entonces las procesaría con mi eventual programa.

Hallé que en Delphi hay varios componentes que pueden hacer esta tarea. Dos de ellos me llamaron la atención. El primero, de una empresa llamada WinSoft, el cual puede instalarse en Delphi 7 y proveer lo que necesito para procesar imágenes y convertirlas a texto y uno más, de una compañía llamada Nicomsoft, el cual se ve mucho mejor, pero es para versiones de Delphi que simplemente ya no tengo. Por ello, me quedé con el primero. Hice algunas pruebas y sorprendentemente el componente (de evaluación), lo hace bastante bien.

Una vez que vio que los resultados funcionaban, me di a la tarea de tratar de hacerlo mejor. Es claro que las imágenes perfectas, de dos tonos de gris, no siempre existen, por lo que decidí utilizar algunas ideas de procesamiento de imágenes para "limpiar" los documentos escaneados y hacer que el componente OCR hiciese la tarea de manera más simple y sencilla, y con mayor precisión.

Agregué así algunos filtros digitales para preprocesar las imágenes (que contienen las cuartillas escaneadas) para entonces después, usar el OCR y quedarme con el documento en modo texto que bueno, probablemente tenga que leer y corregir en algunos casos, pero que me habrá ahorrado mucho tiempo de transcripción es un hecho y bajo esa percepción, creo que es un programa que a más de uno le puede interesar.

A quien lo quiera, pídamelo a morsa@la-morsa.com y se lo enviaré de forma gratuita a su buzón digital a la brevedad.