Aunque OCR ('Optical Character Recognition') es una tecnología en apariencia bastante antigua, está ganando cierta actualidad hoy en día en círculos especializados gracias, por un lado, a las aportaciones que recibe procedentes de los avances en Inteligencia Artificial y, por otro, a su inclusión como elemento importante de soluciones de Automatización Robótica de Procesos (RPA, 'Robotic Process Automation') o de Captura Inteligente ('Intelligent Capture').
Por eso me ha interesado revisar sus fundamentos y actualidad tecnológica para lo cual estoy leyendo el libro 'Optical Character Recognition Systems for Different Languages with Soft Computing' de Arindam Chaudhuri, Krupa Mandaviya, Pratixa Badelia y Soumya K Ghosh, uno de los pocos documentos en formato libro que parecen estar disponibles.
Aunque el libro se concentra en avances en lo que denomina 'soft computing' y que se centran en la aportación de conceptos de conjuntos difusos ('fuzzy') en los algoritmos y los resultados al aplicarlo en diversos idiomas, tiene un segundo capítulo muy interesante por la perspectiva que aporta respecto a la tecnología de OCR, que es justo lo que estaba buscando.
En concreto, los autores estructuran las tecnologías de OCR en diez pasos o elementos que se desarrollan de forma secuencial y que permiten, me parece, tener un buen marco conceptual y tecnológico. Estos son esos diez elementos:
- Entrada de texto: Se trata simplemente, de disponer del texto en algún formato, pensemos, por ejemplo, en un texto en papel o un correo electrónico.
- Escaneado óptico: Ese texto, cuando es necesario, se pasa por un escáner óptico que traduce el formato analógico original en un formato digital sobre el que empezar a trabajar.
- Segmentación de localizaciones: Este paso, primero plenamente algorítmico, intenta detectar los elementos constituyentes de una imagen y separar las partes de datos y documentos de las que recogen imágenes o figuras. Como ejemplo, los autores nos mencionan, en el caso de un correo electrónico, el separar el texto de elementos como el logo de la compañía o sellos diversos. En este paso, además, y ya para los textos, estos se separan en letras y palabras, operando la mayor parte de los algoritmos a nivel de letra.
- Pre-procesado: Realiza una preparación de los datos en bruto, antes de someterlo a los siguientes análisis. Así, por ejemplo, se aplica el 'smoothing' (suavizado) para eliminar ruido y defectos del escaneado. En este proceso se produce tanto el rellenado de pequeños gaps o agujeros que puedan haber quedado ('filling') como el adelgazamiento ('thinning') de algunas líneas. En el filtrado se suelen utilizar algoritmos de filtrado por convolución con diferentes máscaras. Otra técnica que se aplica en paralelo es la normalización mediante la cual se intenta conseguir caracteres de igual tamaño, inclinación y rotación. Para conseguir lo que se denomina una línea base (es decir, la línea en que virtualmente se 'apoyan' los caracteres de una línea de texto), se aplican algoritmos como 'nearest neighbor clustering', correlación cruzada entre líneas o la transformada de Hough. Para normalizar la inclinación se puede utilizar una variante de la transformada de Hough Otros algoritmos y técnicas se aplican también para el escalado y normalización del tamaño de los caracteres o para la suavización ('smoothing') de contornos. Para hacer más fácil el tratamiento posterior se suele intentar un formato de tipo blanco o negro mediante el 'umbralizado' ('thesholding') donde da buenos resultados el método adaptativo local de Niblack. Para el adelgazamiento ('thinning') de líneas existen diversos algoritmos, algunos que actúan a nivel de píxel y otros en entornos más amplios.
- Segmentación: Una vez que el prepocesado nos proporciona unas imágenes del texto limpias, comprimidas, con bajo ruido y normalizadas, la segmentación trata de separar la imagen del texto en sus componentes. Para ello existen estrategias explícitas, implícitas y mixtas. En las explícitas se trabaja en propiedades a nivel carácter pero sin información de formas o clases específicas y se emplean tecnologías de análisis de disección ('dissection analysis'). Las implícitas, por su parte, se basan en el reconocimiento es decir, sí que trabaja con clases predefinidas y busca reconocer esas clases en el texto. Para ello utilizan algoritmos bien de proceso de búsqueda o bien de segmentación de características de las imágenes. En este segundo caso se utilizan, Modelos Ocultos de Markov ('Hidden Markov Models') y otros algoritmos no de Markov reutilizando técnicas procedentes de la identificación de objetos ocultos en visión artificial. Las estrategias mixtas, evidentemente, combinan las técnicas anteriores y suelen proporcionar los mejores resultados.
- Representación: La representación genera la información que se utilizará en el reconocimiento. En los casos más sencillos son simples niveles de gris o binarios. Existen tres tipos de métodos: transformadas globales y expansión en series ('global transformation and series expansion'), representación estadística y representación topológica/geométrica. Las primeras se basan en el hecho de que una señal continua se puede representar como una serie infinita de otras señales más sencillas. y utilizan técnicas como la transformada de Fourier, la transformada de Gabor, wavelets, momentos o la expansión de Karhunen Loeve. La representación estadística utiliza distribuciones estadísticas de diversos aspectos y se centra en características como las densidad de zonas, cruces y distancias o proyecciones. Finalmente, en las representaciones geométricas y topológicas se representan algunas propiedades de los caracteres con alta tolerancia a la distorsión y variaciones de estilo.
- Extracción de características: Su misión es capturar las características principales de los símbolos y realizar una clasificación. Para la extracción de características se utilizan técnicas de distribución de puntos, transformadas y expansión en series y análisis estructural. En clasificación se puede realizar mediante dos enfoques: decisión teórica, en que se emplea un vector de características para representar a un carácter y se emplean algoritmos como clasificadores de distancia, clasificadores estadísticos o redes neuronales) o métodos estructurales en que los métodos dominantes son los análisis sintácticos.
- Entrenamiento y reconocimiento: OCR usa ampliamente tecnología de reconocimiento de patrones ('pattern matching'), existiendo cuatro enfoques: correspondencia de plantillas ('template matching'), técnicas estadísticas, técnicas estructurales y redes neuronales, técnicas no necesariamente disjuntas ni independientes. En la correspondencia de plantillas se busca el grado de proximidad de un vectores de características entre lo que tenemos en el texto objeto de análisis y prototipos o plantillas y se presentan en variantes que buscan la correspondencia directa ('direct matching'), plantillas deformables y encaje elástico ('deformable templates and elastic matching') o correspondencia por relajación ('relaxation matching'). Las técnicas estadísticas emplean algoritmos que maximizan la probabilidad de que un patrón observado se corresponda con un modelo y emplean técnicas como análisis de clusters, modelos ocultos de Markov, razonamiento sobre conjuntos difusos, etc. Las técnicas estructurales utilizan descripciones recursivas en patrones cada vez más sencillas existiendo enfoques gramaticales y gráficos. Finalmente, las redes neuronales utilizan el enfoque conexionista empleando arquitecturas de redes como, por ejemplo, el perceptrón multicapa, o los mapas auto-organizativos de Kohonen.
- Post-procesado: Un tratamiento final destinado a temas como agrupación (en palabras, números, etc) o detección y eliminación de errores y se apoyan con frecuencia en reglas sintácticas y diccionarios.
- Salida de texto: Simplemente, la presentación del texto en el dispositivo o medio digital objetivo.