Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Términos Generales
2.1.1 Bancario
Algorithms, Human Factors, Documentation . Lectura de cheques de forma automática para la correcta
transferencia de dinero. No obstante, a veces requiere una
Palabras Clave confirmación manual. Aun así, en general reduce los tiempos de
OCR, redes neuronales, algoritmo knn, Matlab , Capchta, CCA. espera en muchos bancos.
2. APLICACIONES
En la actualidad son numerosas las aplicaciones de OCR en todos Figura 1. Reconocimiento de caracteres en el correo
los ámbitos. Entre ellas podríamos destacar las siguientes:
Una vez obtenidos los renglones sera necesaria aislar las palabras
y los caracteres de estas palabras. Nos basaremos en el uso de
proyecciones verticales en esta ocasión. Conseguiremos de esta
forma aislar cada carácter en una ventana rectangular con las
dimensiones correspondientes, su anchura y altura.
3.1 Binarizacion
Tras las digitalización del documento en cuestión, a través de un
3.2 Reducción de dimensiones y extracción de
escáner por ejemplo, y la separación previa en dicho documento características
de imágenes y texto, ya que ambos son entendidos por el
ordenador como 0s y 1s, se procede a convertir la imagen digital Una vez acabado el proceso de segmentación tenemos una
en una imagen en blanco y negro preservando las propiedades representación de cada carácter (obtenido tras la segmentación)
esenciales . representado en un formato matricial con las numerosas
características que lo representan.
3.4.1.1 Template macthing: Nearest Neighbour Los arboles de decisión son, al igual que KNN, una técnica de
minería de datos. Los atributos que se quieren evaluar de un
En este caso, se necesitan en memoria una serie de modelos que carácter determinado son los nodos del árbol y los resultados
corresponderán a cada carácter que se quiera identificar. finales de los mismos pasaran a ser las hojas.
Una vez que tengamos el carácter que queremos identificar, será Una vez construido el árbol, se puede tratar siguiendo la
necesario realizar la correlación entre este y todos los modelos arquitectura de condiciones ( si se cumple la condición se realiza
que tenemos guardados en memoria. El modelo en memoria que una acción y si no se cumple se realiza otra). En este tipo de
presente mayor correlación será el que se cree como escrito. clasificación es muy importante el orden de evaluación de los
atributos del carácter que se quiere clasificar para alcanzar un
Si ninguno de los modelos obtiene una correlación suficiente, se ajuste óptimo del árbol. Para ello será necesario realizar una serie
dejara ese carácter como no clasificable. Si, por el contrario, se de funciones que evalúan los atributos y les da diferente
obtienen dos o más modelos con una correlación alta, estos importancia.
modelos se pasan a la siguiente fase, el post-processing.
Finalmente, las redes neuronales son un tipo de arquitectura que
En esta fase, se calcula la distancia Euclidea (fig.1) entre los tratan de imitar la composición y funcionamiento del cerebro.
modelos que han dado correlación alta y el carácter a identificar. Básicamente, se componen de una serie de unidades llamadas
neuronas que reciben una entrada que es multiplicada por un peso
(peso de cada neurona) y en función del resultado y de la función
de activación usada, dará como resultado una salida u otra.
end end
end end
%Se calculan los autovalores y autovectores [autovectoresn5,autovaloresn5] =
autoEnOrden(MatrizCovarianzan5);
[autovectoresn0,autovaloresn0] =
autoEnOrden(MatrizCovarianzan0); MatrizCovarianzan6 = zeros(size(n6,1), size(n6,1));
for i = 1:size(n6,1)
%Mismo paso anterior para todos los numeros for j = 1:size(n6,1)
MatrizCovarianzan1 = zeros(size(n1,1), size(n1,1)); covarianza = mean((n6(i,:) - mean(n6(i,:))) * (n6(j,:) -
for i = 1:size(n1,1) mean(n6(j,:)))');
for j = 1:size(n1,1) MatrizCovarianzan6(i,j) = covarianza;
covarianza = mean((n1(i,:) - mean(n1(i,:))) * (n1(j,:) -
mean(n1(j,:)))'); end
MatrizCovarianzan1(i,j) = covarianza; end
[autovectoresn6,autovaloresn6] =
end autoEnOrden(MatrizCovarianzan6);
end
[autovectoresn1,autovaloresn1] = MatrizCovarianzan7 = zeros(size(n7,1), size(n7,1));
autoEnOrden(MatrizCovarianzan1); for i = 1:size(n7,1)
for j = 1:size(n7,1)
MatrizCovarianzan2 = zeros(size(n2,1), size(n2,1)); covarianza = mean((n7(i,:) - mean(n7(i,:))) * (n7(j,:) -
for i = 1:size(n2,1) mean(n7(j,:)))');
for j = 1:size(n2,1) MatrizCovarianzan7(i,j) = covarianza;
covarianza = mean((n2(i,:) - mean(n2(i,:))) * (n2(j,:) -
mean(n2(j,:)))'); end
MatrizCovarianzan2(i,j) = covarianza; end
[autovectoresn7,autovaloresn7] =
end autoEnOrden(MatrizCovarianzan7);
end
[autovectoresn2,autovaloresn2] =
autoEnOrden(MatrizCovarianzan2); MatrizCovarianzan8 = zeros(size(n8,1), size(n8,1));
for i = 1:size(n8,1)
MatrizCovarianzan3 = zeros(size(n3,1), size(n3,1)); for j = 1:size(n8,1)
for i = 1:size(n3,1) covarianza = mean((n8(i,:) - mean(n8(i,:))) * (n8(j,:) -
for j = 1:size(n3,1) mean(n8(j,:)))');
covarianza = mean((n3(i,:) - mean(n3(i,:))) * (n3(j,:) - MatrizCovarianzan8(i,j) = covarianza;
mean(n3(j,:)))');
MatrizCovarianzan3(i,j) = covarianza; end
end
end [autovectoresn8,autovaloresn8] =
end autoEnOrden(MatrizCovarianzan8);
[autovectoresn3,autovaloresn3] =
autoEnOrden(MatrizCovarianzan3); MatrizCovarianzan9 = zeros(size(n9,1), size(n9,1));
for i = 1:size(n9,1)
MatrizCovarianzan4 = zeros(size(n4,1), size(n4,1)); for j = 1:size(n9,1)
for i = 1:size(n4,1) covarianza = mean((n9(i,:) - mean(n9(i,:))) * (n9(j,:) -
for j = 1:size(n4,1) mean(n9(j,:)))');
covarianza = mean((n4(i,:) - mean(n4(i,:))) * (n4(j,:) - MatrizCovarianzan9(i,j) = covarianza;
mean(n4(j,:)))');
MatrizCovarianzan4(i,j) = covarianza; end
end
end [autovectoresn9,autovaloresn9] =
end autoEnOrden(MatrizCovarianzan9);
[autovectoresn4,autovaloresn4] =
autoEnOrden(MatrizCovarianzan4); %Cogemos el autovector que mas identifica a cada numero
autovectorn0 = autovectoresn0(:,1);
MatrizCovarianzan5 = zeros(size(n5,1), size(n5,1)); autovectorn1 = autovectoresn1(:,1);
for i = 1:size(n5,1) autovectorn2 = autovectoresn2(:,1);
for j = 1:size(n5,1) autovectorn3 = autovectoresn3(:,1);
covarianza = mean((n5(i,:) - mean(n5(i,:))) * (n5(j,:) - autovectorn4 = autovectoresn4(:,1);
mean(n5(j,:)))'); autovectorn5 = autovectoresn5(:,1);
autovectorn6 = autovectoresn6(:,1); numero = 0;
autovectorn7 = autovectoresn7(:,1); end
autovectorn8 = autovectoresn8(:,1);
autovectorn9 = autovectoresn9(:,1); %Del 1 con el numero introducido
correlacion =
for k = 1:10 %Este bucle indica el numero de veces que queremos mean(autovectortest'*test*n1'*autovectorn1)/sqrt(mean(autovector
probar el programa test'*test*test'*autovectortest)*mean(autovectorn1'*n1*n1'*autove
ctorn1));
%Pedimos al usuario que introduzca un numero
test = draw(11,20); if(correlacion > correlacionMayor)
%Normalizamos por filas tal como hemos hecho anteriormente correlacionMayor = correlacion;
test(1,:) = test(1,:)-mean(test(1,:)); numero = 1;
test(2,:) = test(2,:)-mean(test(2,:)); end
%Realizamos la matriz de covarianza para obtener sus %Del 2 con el numero introducido
autovectores y correlacion =
%autovalores mean(autovectortest'*test*n2'*autovectorn2)/sqrt(mean(autovector
MatrizCovarianzaTest = zeros(size(test,1), size(test,1)); test'*test*test'*autovectortest)*mean(autovectorn2'*n2*n2'*autove
for i = 1:size(test,1) ctorn2));
for j = 1:size(test,1)
covarianza = mean((test(i,:) - mean(test(i,:))) * (test(j,:) - if(correlacion > correlacionMayor)
mean(test(j,:)))'); correlacionMayor = correlacion;
MatrizCovarianzaTest(i,j) = covarianza; numero = 2;
end end
end
[autovectorestest,autovalorestest] = %Del 3 con el numero introducido
autoEnOrden(MatrizCovarianzaTest); correlacion =
mean(autovectortest'*test*n3'*autovectorn3)/sqrt(mean(autovector
%Obtenemos el autovector que mas identifica del numero test'*test*test'*autovectortest)*mean(autovectorn3'*n3*n3'*autove
introducido que se ctorn3));
%quiere averiguar
autovectortest = autovectorestest(:,1); if(correlacion > correlacionMayor)
correlacionMayor = correlacion;
numero = 3;
%CorrelacionMayor va a guardar la que actualmente es la mayor end
correlacion
%hasta el momento (puede que todavia no se haya hecho la %Del 4 con el numero introducido
correlacion con correlacion =
%todos los numeros) mean(autovectortest'*test*n4'*autovectorn4)/sqrt(mean(autovector
correlacionMayor = 0; test'*test*test'*autovectortest)*mean(autovectorn4'*n4*n4'*autove
%esta variable "numero" va a ser el numero que en ese momento ctorn4));
se cree que
%es el escrito if(correlacion > correlacionMayor)
numero = -1; correlacionMayor = correlacion;
numero = 4;
%Ahora, calculamos la correlacion entre el numero a identificar y end
los
%numeros que tenemos guardados. Si la correlacion que da es la %Del 5 con el numero introducido
mas alta correlacion =
%hsata el momento, se guarda y se cree que demomento es ese mean(autovectortest'*test*n5'*autovectorn5)/sqrt(mean(autovector
numero el test'*test*test'*autovectortest)*mean(autovectorn5'*n5*n5'*autove
%escrito ctorn5));
6. REFERENCES
[1] Blog de Fantini Fani Natali , estudiantes de Programador en
Sistemas administrativos http://ocr-
fantini.blogspot.com.es/2012/11/el-reconocimiento-optico-
de-caracteres.html