Reconocimiento de Caracteres

20
UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO. FACULTAD DE INGENIERIA ELECTRICA, ELECTRONICA, MECANICA Y MINAS. CARRERA PROFESIONAL DE INGENIERIA ELECTRONICA. ¨RECONOCIMIENTO DE CARACTERES¨ CURSO: INTELIGENCIA ARTIFICIAL Alumnos: Código: Ojeda Auccacusi, Jeancarlo. 110295

description

difuzzo

Transcript of Reconocimiento de Caracteres

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO.FACULTAD DE INGENIERIA ELECTRICA, ELECTRONICA, MECANICA Y MINAS.CARRERA PROFESIONAL DE INGENIERIA ELECTRONICA.

RECONOCIMIENTO DE CARACTERESCURSO: INTELIGENCIA ARTIFICIAL

Alumnos: Cdigo: Ojeda Auccacusi, Jeancarlo. 110295

SEMESTRE 2014-IICONCEPTO PREVIO

RED NEURONAL:"Una red neuronal es un sistema compuesto de muchos elementos procesadores simples operando en paralelo, cuya funcin es determinada por la estructura de la red, fuerza en las conexiones y el procesamiento realizado por los elementos computacionales en los nodos."Dr. Haykin, S. (1994, Neural Networks: A comprehensive foundation, NY, McMillan, P.2):"Una red neuronal es un procesamiento distribuido masivamente paralelo que tiene una tendencia natural para almacenar conocimiento emprico y hacerlo disponible para el uso.Recuerda al cerebro en dos aspectos:1.- El conocimiento se adquiere por la red a travs de un proceso de aprendizaje.2.- Las conexiones interneurnicas se conocen como pasos sinpticos y se usan para almacenar el conocimiento."REDES NEURONALES ARTIFICIALES.Las redes neuronales artificiales (ANN) imitan su funcionamiento a aquellas que se encuentran en el mbito biolgico. Son aptas para resolver problemas que no poseen un algoritmo claramente definido para transformar una entrada en una salida; aprenden, reconocen y aplican relaciones entre objetos.Se emplea normalmente un conjunto de ejemplos representativos de la transformacin deseada para "entrenar" el sistema, que, a su vez, se adapta para producir las salidas deseadas cuando se lo evala con las entradas "aprendidas".Adems se producirn respuestas cuando, en la utilizacin, se presenten entradas totalmente nuevas para sistema, esto es durante el modo entrenamiento la informacin sobre el sistema a resolver es almacenada dentro del ANN y la red utiliza su modo productivo en ejecutar transformaciones y aprender. De este modo el sistema de red neuronal no reside necesariamente en la elegancia de la solucin particular sino en su generalidad de hallar solucin a problemas particulares, habindose proporcionado ejemplos del comportamiento deseado. Esto permite la evolucin de los sistemas autmatas sin una reprogramacin explcita.Las redes neuronales artificiales se basan en el circuito de procesamiento de entradas en el cual los pesos son sumados. Las funciones de peso sern llamadas desde ahora como atenuadores. En la implementacin, las entradas a una neurona son pesadas multiplicando el valor de la entrada por un factor que es menor o igual a uno. El valor de los factores de peso es determinado por el algoritmo de aprendizaje.Las entradas atenuadas son sumadas usando una funcin no lineal llamada Funcin "Sigmoid". Si la salida de la funcin suma excede el valor de entrada mximo de la neurona, esta responde generando una salida.

En la figura podemos ver un modelo en capas de una red neuronal artificial, que consiste de un conjunto de neuronas.Cada neurona tiene varias entradas y su salida esta conectada a un conjunto de otros procesadores de entradas.Cuando una ANN funciona en modo normal, a partir de los datos presentados en la entrada, se genera un patrn especfico de salida. La relacin Entrada/Salida ser determinada durante el modo entrenamiento, entonces cuando una entrada conocida es presentada da la salida esperada.El algoritmo de entrenamiento ajusta los pesos de las entradas hasta que se alcanza la salida esperada.Las neuronas en la figura tienen una leve complejidad computacional, porque solo se comunican con las neuronas ms cercanas conectndose de forma simple. Por las caractersticas y capacidades que ofrece la tecnologa VLSI es posible (en costos) construir una Red Neuronal con muchos procesadores.

Ventajas que ofrecen las redes neuronalesDebido a suconstituciny a sus fundamentos, las redes neuronales artificiales presentan un gran nmero de caractersticas semejantes a las del cerebro. Por ejemplo, son capaces de aprender de la experiencia, de generalizar de casos anteriores a nuevos casos, de abstraer caractersticas esenciales a partir de entradas que representan informacin irrelevante, etc. Esto hace que ofrezcan numerosas ventajas y que este tipo detecnologase est aplicando en mltiples reas. Entre las ventajas se incluyen:Aprendizaje Adaptativo: capacidad de aprender a realizar tareas basadas en unentrenamientoo en una experiencia inicial.Auto-organizacin: una red neuronal puede crear su propia organizacin o representacin de la informacin que recibe mediante una etapa de aprendizaje.Tolerancia a fallos: la destruccin parcial de una red conduce a una degradacin de suestructura; sin embargo, algunas capacidades de la red se pueden retener, incluso sufriendo un grandao.Operacin en tiempo real: los cmputos neuronales pueden ser realizados en paralelo; para esto se disean y fabrican mquinas con hardware especial para obtener esta capacidad.Fcil insercin dentro de la tecnologa existente: se pueden obtener chips especializados para redes neuronales que mejoran su capacidad en ciertas tareas. Ello facilitar laintegracinmodular en los sistemas existentes.OBJETIVOPrincipalDisear una RNA utilizando Matlab para el reconocimiento de caracteres.EspecficosDisear una RNA utilizando matlab par que esta pueda reconocer caracteres las cuales son las letras del alfabeto Ingles en mayscula y minscula as como los nmeros de 0 a 9.Procedimiento Para poder disear esta red neuronal necesitamos contar con una base de datos amplia la cual nos permita entrenar a la red en todas las formas posibles de las letras y nmeros, tambin necesitamos un buen manejo de procesamiento de imgenes ya que la entrada que le damos a la red neuronal sern datos binarios 0 (negro) y 1(blanco), ya que tenemos la limitacin de una base de datos amplia, hice una base de datos para cada letra mayscula y minscula as como los nmeros de 568x568 pixeles con el fondo en negro y la letra en blanco.

Ya que tenemos la limitacin de la base de datos se utiliz diferentes redes neuronales para el entreno de cada 13 letras, en mayscula y minscula as como los 10 nmeros, aun as tenemos un margen de error muy alto al no contar con una buena base de datos.Se utiliz un perceptron multicapa con dos capas ocultas una de 100 y otra de 50 con la funcin logartmica signosoidal como funcin de activacin, y para la salida se utiliz una capa de 13 con la misma funcin de activacin, La funcin de entrenamiento es una gradiente descendiente con momento y tasa de aprendizaje adaptativo en forma de backpropagation.

Para el reconocimiento final del carcter correspondiente se hizo un arreglo en el cual al mayor resultado que daba de entre todos los mximos resultados de cada red neuronal corresponda al carcter reconocido. CODIGO MATLAB %ENTRENO DE UNA RED NEURONAL ARTIFICIALclc;warning off;figuras{1,1}=0;N=13;%Numero de imgenes a entrenar.fig=[]; for i=1:N for j=1:Nleer=imread(strcat('D:\letras a-m\',int2str(i),'-',int2str(j),'.bmp'));% lee una imagen con el formato bmpleer=double(imresize(leer,0.25));%cambia el tamao a un 25% es decir a 142x142 pixeles %tipos de datos dobles fig=horzcat(fig,leer);%son concatenadas horizontalmente figuras{i,j}=reshape(leer,20164,1);% se crea un arreglo unidimencional end end

inputs=figuras{1,1};%Crea entradas de imagenes ya leidas para la red neuronal for i=1:N for j=1:N if ((i~=1)||(j~=1)) inputs=horzcat(inputs,figuras{i,j});%concatena horizontalmene cada arreglo unidimencional end endend %Creacion de arreglo targetstargets=[];for i=1:Ntargets=horzcat(targets,eye(N));endtargets=targets*0.9+0.05; %/CREACION DE LA RED NEURONAL%Perceptron multicapa con 2 capas ocultas una de 100 y otra de 50 y 13 de%salida%La funcion de activacion es logaritmo signoide%La funcion de entrenamiento es un gradiente descendiente con momento y tasa de aprendizaje adaptativo %en forma de backpropagationnet3=newff(minmax(inputs),[100 50 N],{'logsig','logsig','logsig'},'traingdx'); %Parametrosnet3.trainParam.epochs=3000;%como maximo de 3000 epocasnet3.trainParam.goal=0.000001;%objetivo minimonet3.trainParam.show=200;net3=train(net3,inputs,targets);%se entrena la red con todas las figuras prueba=figuras{1,1};for i=1:N for j=1:N if ((i~=1)||(j~=1)) prueba=horzcat(prueba,figuras{i,j}); end endend resultados=sim(net3,prueba); recog=[];for i=1:N*N recog=[recog find(resultados(1:N,i)==max(resultados(1:N,i)))];end

Se hizo lo mismo para cada carpeta de imgenes que son: Letras A-M Letras N-Z Letras a-m Letras n-z Nmeros 0-9Y de cada entreno se obtiene su respectivo archivo que son net1, net2, net3, net4, net5 los cuales guardamos para un posterior reconocimiento de algn carcter.

Para reconocer cualquier carcter luego del entreno de las 5 redes neuronales primero cargamos los 5 archivos guardados de las redes neuronales al workspace de matlab, luego utilizando el siguiente cdigo tenemos:clear lee;clear leer;close all;clear resultados;clear figuras_test;clear testing;clear recog; clc;warning off;figuras_test{1,1}=0;leer=0;fig=[];lee=imread('prueba-4.bmp');%Leemos la imagen que deseamos reconocer tiene%que ser de 568x568 pixelesleer=double(imresize(lee,0.25));%cambia el tamao a 142x142 pixelesimshow(lee) N=13;for i=1:N for j=1:Nfiguras_test{i,j}=reshape(leer,20164,1);%se crea un arreglo unidimensional endend testing=figuras_test{1,1};for i=1:N for j=1:N if ((i~=1)||(j~=1)) testing=horzcat(testing,figuras_test{i,j});%concatenamos horizontalmente end endend %comparamos con cada red que entrenamosresultados1=sim(net1,testing);resultados2=sim(net2,testing);resultados3=sim(net3,testing);resultados4=sim(net4,testing);resultados5=sim(net5,testing); %recog=[recog find(resultados==max(resultados))];recog1=[];recog2=[];recog3=[];recog4=[];recog5=[];for i=1:N*N recog1=[recog1 find(resultados1(1:N,i)==max(resultados1(1:N,i)))];end

for i=1:N*N recog2=[recog2 find(resultados2(1:N,i)==max(resultados2(1:N,i)))];endfor i=1:N*N recog3=[recog3 find(resultados3(1:N,i)==max(resultados3(1:N,i)))];endfor i=1:N*N recog4=[recog4 find(resultados4(1:N,i)==max(resultados4(1:N,i)))];endfor i=1:10*10 recog5=[recog5 find(resultados5(1:10,i)==max(resultados5(1:10,i)))];end

if max(resultados1(:,1))>max(resultados2(:,1)) if max(resultados1(:,1))>max(resultados3(:,1)) if max(resultados1(:,1))>max(resultados4(:,1)) if max(resultados1(:,1))>max(resultados5(:,1)) disp('La letra mayuscula reconocida es: ') if recog1(1)==1; fprintf('A '); end if recog1(1)==2; fprintf('B '); end if recog1(1)==3; fprintf('C '); end if recog1(1)==4; fprintf('D '); end if recog1(1)==5; fprintf('E '); end if recog1(1)==6; fprintf('F '); end if recog1(1)==7; fprintf('G '); end if recog1(1)==8; fprintf('H '); end if recog1(1)==9; fprintf('I '); end if recog1(1)==10; fprintf('J '); end if recog1(1)==11; fprintf('K '); end if recog1(1)==12; fprintf('L '); end if recog1(1)==13; fprintf('M '); end end endendend

if max(resultados2(:,1))>max(resultados1(:,1)) if max(resultados2(:,1))>max(resultados3(:,1)) if max(resultados2(:,1))>max(resultados4(:,1)) if max(resultados2(:,1))>max(resultados5(:,1)) disp('La letra mayuscula reconocida es: ') if recog2(1)==1; fprintf('N '); end if recog2(1)==2; fprintf('O '); end if recog2(1)==3; fprintf('P '); end if recog2(1)==4; fprintf('Q '); end if recog2(1)==5; fprintf('R '); end if recog2(1)==6; fprintf('S '); end if recog2(1)==7; fprintf('T '); end if recog2(1)==8; fprintf('U '); end if recog2(1)==9; fprintf('V '); end if recog2(1)==10; fprintf('W '); end if recog2(1)==11; fprintf('X '); end if recog2(1)==12; fprintf('Y '); end if recog2(1)==13; fprintf('Z '); end end endendend

if max(resultados3(:,1))>max(resultados2(:,1)) if max(resultados3(:,1))>max(resultados1(:,1)) if max(resultados3(:,1))>max(resultados4(:,1)) if max(resultados3(:,1))>max(resultados5(:,1)) disp('La letra minuscula reconocida es: ') if recog3(1)==1; fprintf('a '); end if recog3(1)==2; fprintf('b '); end if recog3(1)==3; fprintf('c '); end if recog3(1)==4; fprintf('d '); end if recog3(1)==5; fprintf('e '); end if recog3(1)==6; fprintf('f '); end if recog3(1)==7; fprintf('g '); end if recog3(1)==8; fprintf('h '); end if recog3(1)==9; fprintf('i '); end if recog3(1)==10; fprintf('j '); end if recog3(1)==11; fprintf('k '); end if recog3(1)==12; fprintf('l '); end if recog3(1)==13; fprintf('m '); end end endendend

if max(resultados4(:,1))>max(resultados2(:,1)) if max(resultados4(:,1))>max(resultados3(:,1)) if max(resultados4(:,1))>max(resultados1(:,1)) if max(resultados4(:,1))>max(resultados5(:,1)) disp('La letra minuscula reconocida es: ') if recog4(1)==1; fprintf('n '); end if recog4(1)==2; fprintf('o '); end if recog4(1)==3; fprintf('p '); end if recog4(1)==4; fprintf('q '); end if recog4(1)==5; fprintf('r '); end if recog4(1)==6; fprintf('s '); end if recog4(1)==7; fprintf('t '); end if recog4(1)==8; fprintf('u '); end if recog4(1)==9; fprintf('v '); end if recog4(1)==10; fprintf('w '); end if recog4(1)==11; fprintf('x '); end if recog4(1)==12; fprintf('y '); end if recog4(1)==13; fprintf('z '); end end endendend

if max(resultados5(:,1))>max(resultados2(:,1)) if max(resultados5(:,1))>max(resultados3(:,1)) if max(resultados5(:,1))>max(resultados4(:,1)) if max(resultados5(:,1))>max(resultados1(:,1)) disp('El numero reconocido es: '); if recog5(1)==1; fprintf('1 '); end if recog5(1)==2; fprintf('2 '); end if recog5(1)==3; fprintf('3 '); end if recog5(1)==4; fprintf('4 '); end if recog5(1)==5; fprintf('5 '); end if recog5(1)==6; fprintf('6 '); end if recog5(1)==7; fprintf('7 '); end if recog5(1)==8; fprintf('8 '); end if recog5(1)==9; fprintf('9 '); end if recog5(1)==10; fprintf('0 '); end end endendend

Y as tendremos una respuesta satisfactoria en el comand window, tambin podremos los valores mximos en el workspace de cada resultado y as deducir que tanto de error hay en este sistema de redes neuronales.

El resultados5 es el que ms prximo a uno esta as que es el que menos error tiene y el cual corresponde al carcter deseado.CONCLUSIONES. Para poder utilizar una nica red neuronal para todos los caracteres aqu analizados necesitaremos una mejor base de datos la cual nos servir de mejor manera para entrenar la red neuronal as como incrementar la cantidad de neuronas en las capas ocultas. Si se deseara tomar una fotografa y luego tratar de reconocerla necesitaramos un algoritmo que haga solo tome la parte del carcter que deseramos analizar y as poder hacer un reconocimiento adecuado, El uso de una red neuronal para el uso de reconocimiento de caracteres se usa como un estndar a nivel mundial haciendo que algunos softwares con una mejor base de datos puedan reconocer palabra y frases de manuscritos, digitalizando toda la informacin.

BIBLIOGRAFA. https://www.youtube.com/watch?v=0L6OdG1afDA video tutorial donde se explica cmo realizar una RNA para el reconocimiento de imgenes. www.monografias.com/trabajos12/redneuro/redneuro.shtml pgina web de la cual se obtuvo la parte terica. http://www.usmp.edu.pe/publicaciones/boletin/fia/info32/pag4.htm sitio web de la cual se extrajo la parte terica.