Download Plantilla para la confección de informes de laboratorio - UTFSM
Document related concepts
no text concepts found
Transcript
UNIVERSIDAD TÉCNICA FEDERICO SANTA MARÍA
DEPARTAMENTO DE ELECTRÓNICA
Alternativa Seleccionada a Desarrollar en
Proyecto de Titulación
“Sistema de reconocimiento automatizado de
texto en tarjetas de presentación”
Presentado por:
ROL USM:
Profesor guía:
Fecha:
Hernán Barrios Verdugo
2504149-6
Marcos Zuñiga
10/08/2015
Proyecto de Titulación
INTRODUCCIÓN
Se expondrá en el presente documento la alternativa seleccionada para construir el proyecto
“Sistema de reconocimiento automatizado de texto en tarjetas de presentación”. La alternativa fue
escogida utilizando los criterios de mayor interés para este proyecto, en donde se trata de alcanzar
una relación adecuada entre lo que desea el emprendimiento MeetCard y las tecnologías
existentes. Se describirán además los criterios de selección que dieron pie a la elección de la
alternativa. Además, en el documento se expondrán los tres aspectos más relevantes
concernientes al proyecto, los cuales son: qué OCR será usado y porqué, cómo se hará su
integración con la base de datos escogida y, finalmente, cómo se hará la clasificación de las
palabras de interés. Se mostrarán en el documento algunos ejemplos útiles de código, funciones y
configurabilidad de los OCR, y algunas funciones del motor de la base de datos que ayudarán en
el proceso de clasificación.
CRITERIOS DE SELECCIÓN
En esta sección del documento las alternativas planteadas del trabajo anterior “Alternativas de
solución” serán evaluadas bajo ciertos parámetros que darán a conocer sus virtudes y desventajas
como alternativa para implementar el proyecto de reconocimiento de tarjetas de presentación.
Los criterios se muestran a continuación y se da una breve descripción de ellos.
Criterios de Selección:
Facilidad de migrar el desarrollo a una plataforma de equipo móvil (Android): esto debido
que Meetcard desea utilizar este proyecto para estos dispositivos, lo que hace su
migración esencial.
Conocimiento de la tecnología OCR involucrada: es de importancia el poder realizar el
proyecto dentro de un tiempo delimitado, por lo que resulta deseable tener conocimientos
de la tecnología y/o lenguaje del OCR a utilizar.
Versatilidad de la tecnología OCR involucrada: la capacidad de poder realizar
modificaciones a la tecnología ya sea modificando parámetros de configuración y/o con la
utilización de la API.
Integralidad con la tecnología que realizará la clasificación: el poder integrar esta
tecnología OCR con facilidad con la que realizará la clasificación es fundamental. Ésta
integración debe ser lo más sencilla posible.
1
Proyecto de Titulación
La ponderación que tiene cada uno de los criterios en la decisión final para la selección de
la alternativa final, de acuerdo a las condiciones, recursos, conocimiento y tiempo del que se
dispone son las siguientes:
Criterio de Selección
Migrar desarrollo a plataforma de equipo móvil
Versatilidad del OCR
Integralidad con Clasificación
Conocimiento tecnología OCR
Porcentaje Total
Porcentaje de Relevancia
35%
30%
25%
20%
100%
Tabla 1. Ponderación de cada uno de los criterios de evaluación
El migrar código a plataforma de equipo móvil es escogido como el criterio más relevante
puesto que, si no es posible o se dificulta mucho la migración del código a un sistema operativo
de equipo móvil, el proyecto pierde sentido. Luego, le sigue en peso el criterio: versatilidad del
OCR, puesto que un OCR configurable y/o con una API poderosa y variada lo hacen flexible
para trabajar. La integralidad con la clasificación se escoge por sobre el conocimiento de la
tecnología OCR involucrada puesto que se trata de un aspecto más crítico en el contexto del
proyecto. Finalmente, el conocimiento de la tecnología OCR involucrada es importante
básicamente por la brecha de tiempo en el que se ha de terminar el proyecto.
2
Proyecto de Titulación
EVALUACIÓN DE LAS ALTERNATIVAS
Para evaluar cada una de las alternativas se utilizará el siguiente sistema de puntuación:
Muy Deficiente
0.1 – 0.2
Sistema de Puntuación
Deficiente
Aceptable
0.3 – 0.4
0.5 – 0.6
Bueno
Óptimo
0.7 – 0.8
0.9 - 1
Tabla 2. Sistema de Puntuación Utilizado para evaluar alternativas
Se evaluarán las tres alternativas propuestas en el documento de alternativas de selección, las que
se enumeran a continuación:
Tesseract (API en C++).
El motor GOCR
Wrapper JAVA de la API de Tesseract.
Detalle de la puntuación de cada alternativa.
1. API C++ de Tesseract
Facilidad de migrar el desarrollo a una plataforma de equipo móvil: Puntaje = 0.4: la
dificultad de portar un código C++ es bastante alta, ya que se debe volver a escribir y
compilar para el nuevo sistema operativo.
Versatilidad de la tecnología OCR involucrada: Puntaje = 1: OCR que posee gran
cantidad de variables de configuración, permite entrenamiento de lenguajes, aprender
palabras nuevas y, además provee una API bastante completa.
Integralidad con la tecnología que realizará la clasificación: Puntaje = 0.9: Existe API de
postgresSQL en C++ lo que permite muy fácilmente integrar esta tecnología con un
proyecto en este lenguaje.
Conocimiento de la tecnología OCR involucrada: Puntaje = 0.8: Se posee experiencia
programando en el lenguaje C++ por lo que esta alternativa es la que brinda las mayores
ventajas en cuanto al tiempo involucrado para el conocimiento de la tecnología.
2. El motor GOCR
3
Proyecto de Titulación
Facilidad de migrar el desarrollo a una plataforma de equipo móvil: Puntaje = 0.7: se
puede utilizar tanto el motor como su API, la mayor desventaja es que la API es antigua
(2001) y no se ha vuelto a actualizar, a diferencia de las otras dos alternativas.
Versatilidad de la tecnología OCR involucrada: Puntaje = 0.8: ésta se puede integrar con
bibliotecas de pre y post procesamiento, incluso viene integrado con una biblioteca de pre
procesamiento sencilla. Su API es antigua y menos completa que de las otras opciones.
Integralidad con la tecnología que realizara la clasificación: Puntaje = 0.8: La principal
desventaja es que finalmente no se usara (tilde y realizara) la API, sino que el motor como
bloque, lo que complica su integración con cualquier otra tecnología de las consideradas.
Conocimiento de la tecnología OCR involucrada: Puntaje = 0.6: se tienen algunos
conocimientos y práctica, pero más bien por haber utilizado anteriormente C++.
3. Wrapper JAVA de la API de Tesseract.
Facilidad de migrar el desarrollo a plataforma de equipo móvil: Puntaje = 0.9: Al tratarse
de un proyecto en JAVA su portabilidad se hace mucho más sencilla y es, además, la
tecnología que a Meetcard más le acomoda.
Versatilidad de la tecnología OCR involucrada: Puntaje = 1: es posible configurar el
comportamiento mediante parámetros y además posee una API actualizada y
continuamente en desarrollo.
Integralidad con la tecnología que realizara la clasificación: Puntaje = 1: Existe una API
de postgresSQL para java de muy fácil instalación y uso, y que sólo necesita de dos
dependencias fáciles de instalar.
Conocimiento de la tecnología OCR involucrada: Puntaje = 0.6: La mayor desventaja en
cuanto a la API de tesseract en C++ es el mayor desconocimiento del lenguaje.
EVALUACIÓN DE CADA ALTERNATIVA
En la Tabla 3 se evalúa cada una de las alternativas, de acuerdo a la ponderación que tiene
cada criterio.
Criterio de Selección
Facilidad de migrar el desarrollo del proyecto a una
plataforma móvil
Tesseract
GOCR
0.4
0.7
JAVA
API
0.9
4
Proyecto de Titulación
Versatilidad de la tecnología OCR involucrada
Integralidad con la tecnología que realizara la clasificación
Conocimiento de la tecnología OCR involucrada
TOTAL
1
0.9
0.8
0.775
0.8
0.8
0.6
0.725
1
0.9
0.6
0.85
TABLA 3. TABLA DE EVALUACIÓN DE CADA ALTERNATIVA
Finalmente la alternativa de la API de tesseract en Java obtiene el mayor puntaje. La única
desventaja que se puede considerar de esta alternativa es el bajo conocimiento del lenguaje de la
API (JAVA), pero es posible superar en un tiempo razonable ya que se conoce algo de C. Esta
API ofrece las mismas virtudes que su API en C++. Bajo algunas pruebas [1] realizadas con
Tesseract.exe, la API de Tesseract en C++ y la API de JAVA se obtienen resultados de precisión
similares reconociendo texto de diversas imágenes de tarjetas de presentación.
ALTERNATIVA SELECCIONADA
Wrapper JAVA de Tesseract junto a PostgresSQL
Se comienza con la descripción de la implementación de la alternativa escogida en la sección
anterior junto al motor de base de datos PostgresSQL, que además con sus funciones ayudara a la
clasificación de palabras.
Para la construcción del proyecto se escoge la alternativa número 3, la que consiste en utilizar el
wrapper de Tesseract en JAVA. Esto principalmente por su característica de ser más portable a
otro sistema operativo. En este caso, interesan las plataformas de equipos móviles. Además, al
tratarse de una API de Tesseract posee todas las virtudes de esa biblioteca.
En esta sección del documento se describirá cómo llevar a cabo el proyecto, dando énfasis a las
tres secciones de mayor importancia concernientes al proyecto, las que son: primero, cómo se
implementará el OCR, dando un ejemplo básico del uso de la API; luego, interesa poder integrar
el OCR con PostgresSQL, el que brindará las herramientas tanto para almacenar y recuperar la
información; finalmente, utilizar las herramientas para realizar la clasificación de las palabras por
campos. Es necesario, entonces, describir en este documento estos tres aspectos considerados
como los de mayor relevancia dentro del proyecto.
La forma más sencilla de evitar errores es poder delimitarse a la sección de la imagen de interés.
La idea principal sería poder realizar esto a través de una forma de selección touch, pero en
primera instancia basta con “simular” la selección de texto. Esto pasándole una imagen ya
recortada al OCR, que presente la sección del texto de interés, o utilizar funciones que realicen
un crop a la imagen. Lo ideal sería obtener imágenes del tipo:
5
Proyecto de Titulación
Con esto se puede evitar gran cantidad de errores y tiempo de procesamiento ya que en ocasiones
el tiempo de procesamiento puede ser un tanto lento, en parte por que se procesan datos
irrelevantes.
A continuación, se muestra un ejemplo básico de reconocimiento de texto con la API de
Tesseract en JAVA, ejemplo que puede servir como base para el proyecto. Este código realiza
una tarea sencilla para el OCR, en donde utilizando funciones básicas y sin optimizaciones de
ningún tipo simplemente se extraen los caracteres de una imagen.
package net.sourceforge.tess4j.example;
import java.io.File;
import net.sourceforge.tess4j.*;
public class TesseractExample {
public static void main(String[] args) {
File imageFile = new File("eurotext.tif");
Tesseract instance = Tesseract.getInstance(); // JNA Interface
Mapping
// Tesseract1 instance = new Tesseract1(); // JNA Direct Mapping
try {
String result = instance.doOCR(imageFile);
System.out.println(result);
} catch (TesseractException e) {
System.err.println(e.getMessage());
}
}
}
Luego, para realizar la integración del OCR con PostgresSQL va a ser necesaria la utilización de
una interfaz que permita la interacción entre ellos y para esto se utilizará el driver PostgresSQL
JDBC [2].
6
Proyecto de Titulación
Estas clases permiten conectarse, ejecutar querys y obtener de estas consultas objetos manejables
por JAVA, lo que permite aprovechar las capacidades del lenguaje JAVA para procesar dicha
información. El código que se muestra a continuación da un claro ejemplo de cómo utilizar esta
API. En el ejemplo se muestra cómo se abre una conexión a un servidor, cómo se ejecuta una
query que recupera información que luego es desplegada por pantalla, para finalmente cerrar la
conexión al servidor de base de datos.
//STEP 1. Import required packages
import java.sql.*;
public class FirstExample {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/EMP";
//
Database credentials
static final String USER = "username";
static final String PASS = "password";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try{
//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
//STEP 3: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
7
Proyecto de Titulación
String sql;
sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);
//STEP 5: Extract data from result set
while(rs.next()){
//Retrieve by column name
int id
= rs.getInt("id");
int age = rs.getInt("age");
String first = rs.getString("first");
String last = rs.getString("last");
//Display values
System.out.print("ID: " + id);
System.out.print(", Age: " + age);
System.out.print(", First: " + first);
System.out.println(", Last: " + last);
}
//STEP 6: Clean-up environment
rs.close();
stmt.close();
conn.close();
Dentro del código mostrado se ve cómo se envía una query. Se ejecutan las sentencias de SQL
bajo un método de una instancia statement, la que se encarga de ejecutar la query sobre la base de
datos PostgresSQL. Esto es de suma importancia ya que da a entender que cualquier función
presente en PostgresSQL es capaz de ser realizada por este medio. Lo anterior implica que es
posible usar PostgresSQL para realizar la clasificación de las palabras. Con JDBC es posible
utilizar las funciones de búsqueda de texto de PostgresSQL para que arrojan información
procesable por JAVA, con lo cual se aprovecha la potencia de JAVA para realizar tareas
incapaces de ser realizadas por PostgresSQL.
Documento es la unidad mínima sobre la que PostgresSQL realiza su búsqueda de palabras. Este
documento es un campo o concatenación de campos de una tabla de PostgresSQL, o puede ser
8
Proyecto de Titulación
incluso un archivo de texto. Existen opciones para pre procesar el texto para darle un formato que
le facilite el trabajo a PostgresSQL. Para optimizar el texto (pre procesar) se tiene que pasar el
texto a un tipo de variable propia de PostgresSQL, denominado ts_vector, que consiste en una
lista de palabras pre procesadas extraídas de un documento, pero de manera tal que se le han
efectuado ciertos cambios para una mayor facilidad de trabajo sobre ellos. Las palabras pueden
estar normalizadas, es decir, que variantes de una palabra sean consideradas como una sola. Por
ejemplo, abogados o abogada puede ser considerada simplemente como abogado, lo que puede
simplificar la eliminación de palabras que no interesan. Además, se pueden eliminar palabras
(stopwords): artículos, conjunciones y/o signos de puntuación; esto dependiendo de la
configuración dada para el análisis. Es posible configurar cómo será hecho el análisis de texto
mediante un archivo de configuración en el que se pueden modificar características tales como:
Segmentar el documento en tokens y clasificar cada token, es decir, dividir el documento
en palabras y clasificarlas. (tabla 2)
Elegir los diccionarios que convertirán los tokens a su forma normalizada y diccionarios
para rechazar palabras.
Seleccionar el analizador de texto a emplear y los diccionarios a usar para normalizar los
tokens encontrados.
Alias
Description
Example
asciiword
Word, all ASCII letters
elephant
word
Word, all letters
mañana
numword
Word, letters and digits
beta1
asciihword
Hyphenated word, all ASCII up-to-date
hword
Hyphenated word, all letters
numhword
Hyphenated word, letters and
postgresql-beta1
digits
hword_asciipart
Hyphenated word part, all
PostgreSQL in the context postgresql-beta1
ASCII
hword_part
Hyphenated word part, all lógico or matemática in
letters
matemática
hword_numpart
Hyphenated word part, letters
beta1 in the context postgresql-beta1
and digits
email
Email address
[email protected]
protocol
Protocol head
http://
lógico-matemática
the
context lógico-
9
Proyecto de Titulación
Alias
Description
Example
url
URL
example.com/stuff/index.html
host
Host
example.com
url_path
URL path
/stuff/index.html, in the context of a URL
file
File or path name
/usr/local/foo.txt, if not within a URL
sfloat
Scientific notation
-1.234e56
float
Decimal notation
-1.234
int
Signed integer
-1234
uint
Unsigned integer
1234
version
Version number
8.3.0
tag
XML tag
<a href="dictionaries.html">
entity
XML entity
&
blank
Space symbols
(any whitespace or punctuation not otherwise
recognized)
Además, el uso de diccionarios permite realizar acciones tales como:
Definir palabras que no deben ser indexadas.
Mapear variantes de una palabra a una forma canónica usando el diccionario Ispell.
PostgresSQL tiene funciones bastante potentes para búsqueda de texto, con lo cual se pueden
hacer búsquedas de palabras claves. Su uso es bastante complejo pero existe bastante
documentación al respecto en la web [3]. Desde el documento se buscaran y clasificaran las
palabras de interés que luego utilizando el mismo driver JDBC serán almacenadas en la base de
datos.
Utilizando la virtud que nos brinda PostgresSQL de “etiquetar” palabras hace posible la
eliminación de muchas cadenas de caracteres que no sean de interés, por ejemplo, direcciones url.
Por otro lado, el poder etiquetar palabras permite de manera fácil encontrar el email y facilitar en
gran medida el encontrar un número de teléfono y una dirección. Para el ejemplo, en el caso de la
dirección, facilitará la tarea el contar con una herramienta como el clasificador de tokens, ya que
se puede centrar en las palabras etiquetadas como números para ver si lo adyacente se trata de
una dirección. Para el caso del número de teléfono, se le pueden indicar patrones que faciliten la
búsqueda del número, debido a que será siempre el número más “largo”. PostgresSQL entrega la
posibilidad de ordenar el documento en arreglos, lo que facilita aún más el análisis.
10
Proyecto de Titulación
Es posible obviar en la búsqueda palabras que estén indexadas con cierto tipo de token (que no
sea lo buscado), como se muestra en el código que está en el recuadro un poco más abajo. Una
forma de discriminación es configurando la búsqueda de texto de manera tal que se descarten
palabras etiquetadas con ciertos tokens. Esto puede ayudar en forma significativa en la búsqueda
y clasificación de las palabras.
ALTER TEXT SEARCH CONFIGURATION pg
DROP MAPPING FOR email, url, url_path, sfloat, float;
Se pueden usar configuraciones predefinidas para realizar la búsqueda. En el ejemplo anterior de
código corresponde a la variable pg. También es posible transformar los tokens en lexemas,
siendo los lexemas un string en el que se normalizan las palabras: generalmente mayúsculas
pasan a ser minúsculas, permite encontrar variaciones de la palabra y también puede eliminar
palabras comunes. Para estos propósitos PostgresSQL utiliza diccionarios, los que incluso pueden
ser creados para fines especiales.
REFERENCIAS
[1] “Pruebas_con_Tesseract3.odt”, Hernán Barrios V.
[2] https://jdbc.postgresql.org/documentation/documentation.html
[3] http://www.postgresql.org/docs/9.1/interactive/textsearch.html
11