Content uploaded by Thomaz Maia de Almeida
Author content
All content in this area was uploaded by Thomaz Maia de Almeida on Jul 26, 2016
Content may be subject to copyright.
FACULDADE 7 DE SETEMBRO - FA7
CURSO DE ESPECIALIZAÇÃO EM DESENVOLVIMENTO
DE SISTEMAS PARA DISPOSITIVOS MÓVEIS
THOMAZ MAIA DE ALMEIDA
UMA METODOLOGIA DE RECONHECIMENTO
INTELIGENTE DE CARACTERES MANUSCRITOS
UTILIZANDO REDES NEURAIS EMBARCADAS
FORTALEZA, CEARÁ
2014
THOMAZ MAIA DE ALMEIDA
UMA METODOLOGIA DE RECONHECIMENTO
INTELIGENTE DE CARACTERES MANUSCRITOS
UTILIZANDO REDES NEURAIS EMBARCADAS
Monografia submetida à Coordenação do
Curso de Especialização em Desenvolvimento
de Sistemas para Dispositivos Móveis, como
requisito parcial para a obtenção do grau de
Especialista.
Orientador: Prof. Msc. Régis Patrick Silva
Simão
FORTALEZA, CEARÁ
2014
THOMAZ MAIA DE ALMEIDA
UMA METODOLOGIA DE RECONHECIMENTO
INTELIGENTE DE CARACTERES MANUSCRITOS
UTILIZANDO REDES NEURAIS EMBARCADAS
Monografia submetida à Coordenação do Curso de Especialização em Desenvolvimento
de Sistemas para Dispositivos Móveis, como requisito parcial para a obtenção do grau de
Especialista.
Aprovada em: __/__/____
BANCA EXAMINADORA
Prof. Msc. Régis Patrick Silva Simão
Faculdade 7 de Setembro - FA7
Orientador
Prof. Msc. Robério Gomes Patrício
Faculdade 7 de Setembro - FA7
Prof. Msc. Francisco Cristino de França
Júnior
Faculdade 7 de Setembro - FA7
Prof. Msc. Robério Gomes Patrício
Coordenador
À minha mãe, Luciliane Maia
Agradecimentos
À minha mãe, Maria Luciliane Maia de Almeida, a quem me espelho em tudo
que busco fazer e por ela tenho gratidão eterna.
À minha namorada, Luciana Araújo Gurgel, por me apoiar durante mais esse
passo na caminhada acadêmica.
Ao professor Régis Patrick Silva Simão pela confiança e oportunidade de rea-
lização desse trabalho.
Aos voluntários que contribuíram pacientemente com a diversificação de amos-
tras de caracteres coletadas para este trabalho.
Aos colegas e amigos feitos durante esse aprendizado que tanto me ajudaram
desde o seu início até o final desta monografia. Em especial agradeço aos amigos Carlos
M. Aderaldo, Leonel K. B. Araújo e Thiago N. de Castro.
Stay hungry, stay foolish
Steve Jobs
Resumo
O mercado de dispositivos móveis continua em crescente ascensão e com ele diversos apli-
cativos inovadores estão sendo criados. Muitas vezes é utilizada Inteligência Artificial (IA)
em aplicações que visam mais interação dos usuários com o dispositivo. Uma aplicação
comum de IA é no reconhecimento dos caracteres fornecidos pelo usuário através da escrita
manual. Neste sentido, o presente trabalho tem como objetivo o detalhamento de uma
metodologia de reconhecimento de caracteres manuscritos embarcada em um dispositivo
android utilizando técnicas de processamento de imagens e inteligência computacional. O
trabalho traz, ainda, a construção de um conjunto de dados contendo amostras de 650
caracteres utilizado para treinar uma rede neural do tipo multi-camadas (MLP) junto
com suas taxas de acerto (geral e por caractere). Toda a metodologia é implementada
em Java sem a necessidade de nenhum framework ou biblioteca externa de imagens e
nem de IA. Os testes são realizados mediante divisão do conjunto de caracteres em treino
e teste, variando a porcentagem de divisão. Há ainda testes no próprio dispositivo com
voluntários que não ajudaram na criação do conjunto de caracteres. Ao dividir o conjunto
de caracteres em treino e teste, essa metodologia obteve taxas de acerto médio de 78,5%
com 80% dos dados utilizados para treino e 20% para testes. Nos testes no dispositivo, a
taxa de acerto médio subiu para 83,1%, provando a eficiência real e a aplicabilidade dessa
metodologia.
Palavras-chave: ICR. MLP. Android.
Abstract
The mobile devices market continues to rise and with it many innovative applications
are being created. Artificial Inteligente (AI) is often used in applications aimed to more
interaction with users. A common application of AI is in characters recognition by the
user through the handwriting. In this sense , the present paper aims to detail a metho-
dology for handwritten character recognition embedded in a android device using image
processing techniques and computational intelligence. This work also brings the cons-
truction of a data set containing 650 characters samples used to train a multilayer neural
network (MLP) with their hit rates (overall and per character). The entire methodology
is implemented in Java without the need for any framework or external library of ima-
ges or even IA. The tests are performed by splitting the dataset in training and testing,
varying the percentage split. There still another test in the device itself with volunteers
who have not helped in the creation of the character dataset. By splitting the number of
characters in training and testing, this methodology achieved average accuracy rates of
78.5% for 80% of the data used for training and 20% for testing. In testing in the device,
the average hit rate rose to 83.1%, proving the actual performance of this methodology
and its applicability.
Keywords: ICR. MLP. Android.
Lista de Figuras
Figura 1.1 esquema de ICR utilizando redes neurais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Figura 2.1 pixels em diferentes resoluções: (a) 3×4, (b) 12×16, (c) 48×64, (d)
192×256 pixels. ....................................................... 17
Figura 2.2 operação de subtração pixel apixel. .................................. 17
Figura 2.3 coordenadas da vizinhança do pixel p(x,y). ............................ 17
Figura 2.4 subárea de uma imagem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Figura 2.5 etapas fundamentais no processamento de imagens digitais. . . . . . . . . . . . 19
Figura 2.6 aplicação de limiar em (a) imagem original (b) histograma da imagem
original (c) imagem binarizada e (d) histograma da imagem limiarizada. 20
Figura 2.7 modelo de um neurônio artificial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Figura 2.8 (a) conjunto de dados Iris; (b) classes linearmente separáveis; (c) classes
não-linearmente separáveis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Figura 2.9 arquitetura de uma rede MLP com duas camadas ocultas. . . . . . . . . . . . . 24
Figura 2.10 exemplo de caracteres em (a), (d) e (g), exemplo de projeções verticais
em (b), (e) e (h) e exemplo de projeções horizontais em (c), (f) e (i). . . 27
Figura 3.1 fases da criação da metodologia de reconhecimento de caracteres. . . .. . 29
Figura 3.2 telas dos aplicativos implementados, em (a) é mostrada a tela do primeiro
aplicativo que serve para criar um banco de caracteres , e em (b) e (c) estão
as telas do segundo aplicativo que apresenta o resultado do reconhecimento
automático em conjunto com uma verificação de erro. . . . . . . . . . . . . . . . . . 31
Figura 3.3 (a) bitmap extraído do aplicativo (768 ×864 pixels), (b) limiarização
do caractere, (c) segmentação do caractere e (d) normalização para um
tamanho padrão dos caracteres (100 ×100 pixels). .................... 32
Figura 4.1 taxa de acerto (%) por rodada de treinamento/teste. . . . . . . . . . . . . . . . . . 36
Figura 4.2 variação da taxa de acerto em função da quantidade de dados usados para
treino. ................................................................ 36
Figura 4.3 caractere e suas projeções: (a) letra “V” e (b) letra “X”. . . . . . . . . . . . . . . . 37
Figura 4.4 caractere “R” e suas projeções em diferentes variações. . . . . . . . . . . . . . . . . 40
Lista de Tabelas
Tabela 4.1 matriz de confusão após 30 rodadas de treinamento e teste. . . . . . . . . . . . 34
Tabela 4.2 taxa de acerto médio por letra após 30 rodadas de treinamento e teste. 35
Tabela 4.3 matriz de confusão para os testes realizados no dispositivo. . . . . . . . . . . . 38
Tabela 4.4 taxa de acerto por letra após testes realizados no dispositivo. . . . . . .. . . 39
Sumário
1 INTRODUÇÃO .......................................................... 12
1.1 Motivação .................................................... 13
1.2 Objetivos ..................................................... 14
1.3 Organização da Monografia ................................... 15
2 FUNDAMENTAÇÃO TEÓRICA....................................... 16
2.1 Processamento de Imagens .................................... 16
2.1.1 Segmentação................................................ 19
2.2 Redes Neurais Artificiais ...................................... 21
2.2.1 Perceptron Simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2.2 Perceptron Multicamadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.2.3 Descritores de Caracteres Manuscritos . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3 METODOLOGIA ........................................................ 28
3.1 Ambiente de Desenvolvimento ................................ 28
3.2 Descrição do Sistema ......................................... 28
3.3 Interface Gráfica no Android .................................. 29
3.4 Aplicativos Desenvolvidos ..................................... 30
3.5 Detalhes da Implementação ................................... 31
4 TESTES E RESULTADOS.............................................. 33
4.1 Metodologia de Testes ........................................ 33
4.2 Análise de Resultados ......................................... 33
5 CONCLUSÕES E TRABALHOS FUTUROS ......................... 41
REFERÊNCIAS ................................................................. 43
12
Cap´
ıtulo 1
Introdução
É fato que o mercado de celulares smarphones está em crescente ascensão. De
acordo com Lecheta (2013), atualmente mais de 3 bilhões de pessoas possuem um celular.
Dado que a população mundial é de cerca de 7,2 bilhões de pessoas, isso significa que
quase a metade já possui pelo menos um celular.
Assim como cresce o número de usuários de smartphones, cresce também, por
consequência, o mercado de aplicações móveis. Empresas já consolidadas no mercado
corporativo estão investindo em aplicativos próprios e, para tal, novas empresas especia-
lizadas em desenvolvimento para dispositivos móveis estão surgindo no mercado.
Essas empresas e os desenvolvedores buscam uma plataforma moderna e ágil
para o desenvolvimento de aplicações. A plataforma Android veio suprir a necessidade de
um ambiente estável suportado por um grupo de empresas líderes de mercado (liderados
pelo Google), baseado em um sistema operacional Linux, bastante poderoso, constante-
mente atualizado e bem flexível.
Devido à essa flexibilidade do sistema Android, diversas aplicações são criadas
e publicadas diariamente em sua loja virtual. Essas aplicações vão desde soluções já bem
sucedidas de serviços em sua versão móvel, como o Facebook, até aplicativos trazendo
novos conceitos de outras áreas.
Um conceito que está em constante crescimento é o Reconhecimento Óptico
de Caracteres (OCR - Optical Character Recognition). Empresas como a Samsung, por
exemplo, tem investido nessa tecnologia com a introdução da caneta eletrônica “S Pen”,
na qual é possível reconhecer o que é escrito através dela. Outra empresa que também
investe no ramo é o próprio Google com o Tesseract, que é um software de OCR com
código aberto (SMITH, 2007).
Tecnologias que envolvem OCR permitem a identificação automática de ca-
racteres a partir de algum mecanismo óptico em conjunto com outro mecanismo de pro-
cessamento de informações. O ser humano, por exemplo, tem os olhos como mecanismos
ópticos e o cérebro que interpreta o que o olho vê e traduz em informações. Metodologias
13
de OCR se baseiam em técnicas de processamento de imagens e inteligência artificial vi-
sando a reprodução das funções dos olhos e do cérebro humano (MITHE; INDALKAR;
DIVEKAR, 2013).
Existem, hoje, inúmeros sistemas onde são aplicadas técnicas derivadas de
OCR. Exemplos dessas aplicações são sistemas de detecção e reconhecimento de placas de
carro (SULAIMAN et al., 2013; MAGLAD, 2012); sistemas de identificação e extração de
texto em vídeo (CHATTOPADHYAY; SINHA; BISWAS, 2011; ANTANI; CRANDALL;
KASTURI, 2000); reconhecimento de notas musicais (YAKOBOV; MASH; THIRER,
2010); reconhecimento de cheques bancários (SONG et al., 1997); etc. Dentre estas,
destacam-se as aplicações que envolvem o Reconhecimento Inteligente de Caracteres (ICR
-Intelligent Character Recognition).
Diferentemente das aplicações de OCR comuns, que normalmente seguem um
padrão conhecido (como as placas de carro, por exemplo), as aplicações envolvendo ICR
requerem mais atenção dada a ausência de um formato predefinido com uma alta variabi-
lidade de soluções (como o reconhecimento de caracteres manuscritos, por exemplo). Den-
tre as aplicações de ICR, destacam-se os sistemas de identificação de documentos antigos
(CECOTTI; BELAID, 2005); reconhecimento de formuários (DILRUKSHI; CHANDRA-
SEKARA, 2013); verificação de assinatura pessoal (SAE-BAE; MEMON, 2013); softwares
educacionais (HAMMADI et al., 2012); etc.
Na Figura 1.1 é apresentado um esquema ilustrando um sistema de ICR desde
o texto de entrada manuscrito. A primeira etapa é a de segmentação da imagem, onde os
caracteres são extraídos. A partir da imagem segmentada (e muitas vezes pré-processada
e/ou redimensionada) são extraídas características que descrevem o caractere segmentado.
Existem diversos descritores de características. No esquema da Figura 1.1 são utilizadas
projeções no eixo X e no eixo Y que servem como entrada para uma rede neural. Uma
abordagem neural comumente utilziada é a rede Perceptron Multicamadas (PARVEZA;
MAHMOUD, 2013; DELAYE; ANQUETIL, 2013; VELLASQUESA et al., 2008) Dado
que a rede já esteja treinada, ao final de sua execução haverá uma indicação a qual letra
pertence aquelas projeções.
1.1 Motivação
Sabe-se que uma das áreas onde há constante estudo é a área de inteligência
computacional. Isto é de fácil verificação devido ao fato desta área buscar modelar e
reproduzir funções de um órgão vital e complexo do ser humano: o cérebro (ZHANG et
al., 2013). Aliado à esse campo de estudo está a área de processamento de imagens, onde
também traz o desafio de reproduzir a função dos olhos humanos. Uma das tecnologias que
envolve essas duas grandes e complexas áreas é a de reconhecimento óptico/inteligente de
caracteres, onde é necessário extrair uma informação a partir de uma imagem e processá-la
de acordo com um conhecimento previamente adquirido.
Nos dias atuais já é comum que computadores com hardware potente e câme-
14
Figura 1.1: esquema de ICR utilizando redes neurais.
Fonte: adaptado de Jain, Mao e Mohiuddin (1996).
ras de alta definição consigam realizar esse trabalho. Contudo, ainda é um desafio para
a área de dispositivos móveis devido à limitação de hardware. Principalmente no tocante
a imagens, pois à medida que a tecnologia avança com o hardware, os sensores das câ-
meras desses dispositivos também avançam e isto demanda mais tempo na captura e no
processamento das imagens adquiridas, que estão com resoluções cada vez mais altas.
Neste sentido, esse trabalho busca detalhar uma metodologia de ICR em um
sistema operacional Android visando o reconhecimento de caracteres manuscritos. Neste
trabalho é proposta, ainda, a criação e validação de um conjunto de imagens de caracteres
que deverá servir como base para testes e comparação de futuras metodologias, podendo,
dessa maneira, enriquecer e contribuir de forma positiva para o meio acadêmico.
15
1.2 Objetivos
Este trabalho busca desenvolver uma metodologia para reconhecer caracteres
manuscritos através de técnicas de processamento de imagens e inteligência computaci-
onal embarcadas em um sistema operacional android. Durante o desenvolvimento desta
monografia outros objetivos específicos devem ser alcançados:
i. Implementar uma rede neural artificial do tipo perceptron multi-camadas em java
sem a dependência de bibliotecas externas.
ii. Estudar e implementar funções de processamento de imagens a fim de adequar às
entradas dos neurônios.
iii. Desenvolver uma aplicação android para o reconhecimento de caracteres offline.
iv. Criar um conjunto de imagens de caracteres e disponibilizá-lo entre o meio acadê-
mico.
1.3 Organização da Monografia
No Capítulo 2 é realizada uma explanação sobre as duas grandes áreas que com-
põem sistemas de OCR/ICR: Processamento de Imagens Digitais (PDI) e Redes Neurais
Artificiais (RNA). Neste Capítulo se faz uma breve revisão sobre técnicas de PDI dando
enfoque na área de segmentação com a técnica de limiarização. É realizada, ainda, uma
descrição do neurônio artificial e como são formadas as RNAs. Ao final é feito revisão bi-
bliográfica sobre descritores de caracteres utilizado em sistemas ICR/OCR com o enfoque
do descritor utilizado neste trabalho: as projeções.
A metodologia proposta nesse trabalho é detalhada no Capítulo 3. Inicial-
mente é descrito o ambiente de desenvolvimento utilizado e depois é descrito o sistema
implementado. Posteriormente são dadas explicações acerca da interface gráfica do An-
droid seguida de um detalhamento dos aplicativos desenvolvidos neste trabalho. Outros
pontos não abordados em seções anteriores são explicados no final do desse Capítulo, tais
como o número de neurônios utilizados para treinar a RNA.
O Capítulo 4 trata dos testes e resultados obtidos com a metodologia proposta
e o banco de dados criado. Nesse Capítulo são realizados testes com o conjunto de
caracteres criados a fim de conseguir os melhores parâmetros no treino da rede neural. É
nesse Capítulo que se encontram as matrizes de confusão referentes aos testes, bem como
tabelas com taxas de acerto gerais e por caractere.
Por fim, o Capítulo 5 tece conclusões a respeito do desenvolvimento e imple-
mentação da metodologia de reconhecimento de caracteres, bem como da criação do banco
de caracteres. Ao final são sugeridos e detalhados alguns tipo de aplicações que envolvem
essa metodologia para serem desenvolvidos como trabalhos futuros e correlatos.
16
Cap´
ıtulo 2
Fundamentação Teórica
O Reconhecimento Inteligente de Caracteres (ICR) é uma abordagem que mes-
cla duas grandes áreas da Inteligência Computacional, que por sua vez envolve várias
outras sub-áreas multidisciplinares: Processamento de Imagens (PDI) e de Redes Neurais
Artificiais (RNA).
2.1 Processamento de Imagens
De acordo com Gonzalez e Woods (2007), uma imagem digital é definida como
uma função bidimensional de intensidade luminosa denotada por f(x,y), em que a ampli-
tude de fnas coordenadas espaciais (x,y)resulta no brilho da imagem naquele ponto.
Sabe-se que os computadores, assim como os dispositivos móveis, não manipu-
lam imagens contínuas, mas apenas dados numéricos. Percebe-se, assim, a necessidade de
uma representação vetorial em duas dimensões (matricial) para imagens, em que a menor
unidade desta representação é chamada de pixel (picture element). Sendo assim, uma
imagem digital é descrita por uma matriz de M×Nvalores de pixels, que indica o brilho
em cada posição espacial da imagem.
O valor associado a cada pixel é normalmente representado pela irradiação
naquele ponto. Quanto maior é o pixel, mais fácil se consegue vê-lo e pior é a representação
da imagem. Em contrapartida, quanto menor é o pixel, mais difícil para distinguí-lo de
seus pixels vizinhos e melhor representada é a imagem. Essa situação, ilustrada na Figura
2.1, ocorre quando os pixels se tornam menores que a resolução espacial do sistema de
visão humano.
Existe uma gama de ferramentas matemáticas utilizadas para manipular os
pixels de uma imagem digital, tais como transformadas, operações lógicas, operações
aritméticas, momentos estatísticos, etc. No domínio espacial, Gonzalez e Woods (2007)
dividem as formas de manipulação de pixels em duas grandes categorias: operações pixel -
a-pixel e operações baseadas em vizinhança.
17
Figura 2.1: pixels em diferentes resoluções: (a) 3×4, (b) 12×16, (c) 48×64, (d) 192×256
pixels.
(a) (b) (c) (d)
Fonte: Jähne (2005).
A operação mais simples em uma imagem digital é realizada pixel-a-pixel onde
aplica-se uma transformação individual em um único pixel de uma imagem original e este
é mapeado em uma imagem resultante. Dentre as operações pixel-a-pixel, destacam-se as
operações lógicas e aritméticas. Um exemplo clássico desse processamento de imagens é
o de uma câmera de segurança interna de uma agência bancária: a câmera é acionada e
a cada intervalo fixo de tempo uma fotografia é tirada. Essa imagem é comparada com a
anterior através de uma subtração de imagens e se o resultado da subtração não estiver
dentro de uma tolerância pré-definida um alarme é acionado pois algo significativo na
imagem foi alterado. Essa subtração é feita pixel-a-pixel, como é mostrado na Figura 2.2.
Figura 2.2: operação de subtração pixel apixel.
10 20 10 5 12 10 5 8 0
25 5 25 - 5 5 22 = 20 0 3
15 20 15 7 20 13 8 0 2
Fonte: Almeida (2009).
A segunda maneira de transformar pixels não acontece apenas sobre um único
pixel mas sobre um conjunto específico de pixels. Uma importante propriedade de imagens
digitais são as relações de vizinhança entre os pixels. Um pixel p, de coordenadas (x,y),
possui 8 vizinhos, sendo 2 nas horizontais (direita e esquerda), 2 nas verticais (em cima
e em baixo) e 4 nas diagonais. Percebe-se que as coordenadas da vizinhança de pem
relação à sua coordenada x,y são dadas de acordo com a Figura 2.3.
Figura 2.3: coordenadas da vizinhança do pixel p(x,y).
(x-1,y-1) (x,y-1) (x+1,y-1)
(x-1,y) (x,y) (x+1,y)
(x-1,y+1) (x,y+1) (x+1,y+1)
Fonte: Almeida (2009).
Esta figura, chamada de máscara, é a base para as operações de manipulação de
18
imagens não pontuais. A ideia em se utilizar operações com máscaras é modificar o valor
de um pixel em função de seu próprio nível de cinza e o de seus vizinhos (GONZALEZ;
WOODS, 2007). Um exemplo clássico desse tipo de operação é a filtragem passa-baixas
com o filtro da média, onde o valor de um determinado pixel é dado pela média aritmética
do próprio pixel central com seus vizinhos direto, como é mostrado na Equação 2.1,
referente à Figura 2.4, em que z1,z2, ..., z9são os valores em tons de cinza dos pixels de
uma imagem.
z5=1
9(z1+z2+. . . +z9) = 1
9
9
∑
i=1
zi(2.1)
Figura 2.4: subárea de uma imagem.
.
.
.
z1z2z3
. . . z4z5z6. . .
z7z8z9
.
.
.
Fonte: Gonzalez e Woods (2007).
Sistemas de Visão Computacional (VC) não se resumem a manipular imagens
digitais. Um sistema de VC pode ser definido como um sistema computadorizado capaz
de adquirir, processar e interpretar imagens correspondente a cenas reais. (GONZALEZ;
WOODS, 2007) dividem um sistema de VC em seis etapas, que podem ser esquematizadas
conforme Figura 2.5, em que:
•aquisição de imagens: é o primeiro passo, em que a imagem digital é adquirida
(normalmente através de câmeras).
•pré-processamento: tem por objetivo o melhoramento da imagem em função do
que se deseja fazer com ela. Nesta fase, normalmente são aplicadas técnicas de realce
de contrastes, remoção de ruídos, etc;
•segmentação: segmentar uma imagem nada mais é do que extrair da cena partes
de interesse mediante a análise de suas características comuns;
•representação e descrição: logo após a etapa de segmentação, é necessário con-
verter os dados (pixels) em uma forma adequada ao processamento computacional e,
em seguida, extrair atributos que resultem em algum tipo de informação de interesse;
•reconhecimento e interpretação: a última etapa é o processo baseado nas infor-
mações fornecidas previamente pelo seu descritor. A interpretação, normalmente,
envolve o reconhecimento de padrões já conhecidos a fim de compará-los com os
resultados obtidos e haver um posterior reconhecimento.
19
Figura 2.5: etapas fundamentais no processamento de imagens digitais.
Fonte: Gonzalez e Woods (2007).
Dentre as etapas citadas, a etapa de segmentação merece destaque como uma
das mais importantes (se não a mais importante) pois uma vez que segmentada uma
imagem erroneamente, a etapa seguinte, extração de características, é diretamente afe-
tada gerando descritores ruins. Em contrapartida, uma boa segmentação facilita todo o
processamento seguinte.
2.1.1 Segmentação
A segmentação de imagens é uma das tarefas mais difíceis no processamento de
imagens digitais sendo geralmente o segundo ou terceiro passo de um sistema de visão com-
putacional, dependendo do fato de existir ou não a necessidade de um pré-processamento.
A segmentação consiste em identificar regiões de uma determinada imagem que possuem
uma forte correlação entre si, seja por nível de cinza, por textura ou por outra caracterís-
tica de interesse, dependendo da aplicação (ALMEIDA, 2009).
De acordo com Nartker (apud MURALIKRISHNA; REDDY, 2011), a maioria
dos erros relacionados a OCR dizem respeito à etapa de segmentação. Existem diversas
técnicas para a resolução de problemas de segmentação, tais como crescimento de região
(YANG; MA; XIE, 2006), métodos dos contornos ativos (snakes) (BUKHARI; SHAFAIT;
BREUEL, 2008), limiarização (KITA; WAKAHARA, 2010), etc. Em estudos recentes,
(ZHANG et al., 2013) comprovou que a técnica mais utilizada (combinada a outras téc-
nicas) para segmentar caracteres é a limiarização.
A limiarização, ou binarização, tem por objetivo se transformar uma imagem
em tons de cinza em uma imagem preta e branca (binária). Esta técnica consiste em
estabelecer um valor limite de nível de cinza L. Os pixels de valor abaixo deste limiar
recebem valor igual a 0 (preto), e os pixels de valor acima do limiar recebem valor igual
20
255 (branco). A operação de limiarização pode ser equacionada como (GONZALEZ;
WOODS, 2007):
g(x,y) = (1,se f(x,y)>L
0,caso contrário (2.2)
em que Lé o valor de limiar escolhido; f(x,y), a imagem original, e g(x,y), a imagem
binarizada.
Um exemplo de limiarização é mostrado na Figura 2.6, digitalizada de um
jornal. Percebe-se, pelo histograma1da Figura 2.6a, que existe uma clara divisão em seus
níveis de cinza. Essa divisão é ressaltada em seu histograma, apresentado na Figura 2.6c,
em que há picos nos níveis próximos a 255 e próximos a 100. É, então, aplicado um limiar
de valor de nível de cinza igual a 160, fazendo que os valores menores que 160 tornem-se
0 e que os valores maiores que 160 tornem-se 255 (Figura 2.6d). Com isso, há uma clara
separação dos objetos da cena em relação ao fundo. Isto é, o que está impresso no jornal
é aguçado em relação ao fundo do jornal (Figura 2.6b).
Figura 2.6: aplicação de limiar em (a) imagem original (b) histograma da imagem original
(c) imagem binarizada e (d) histograma da imagem limiarizada.
(a) (b)
(c) (d)
Fonte: Almeida (2009).
Para fins de OCR, após a aplicação da limiarização espera-se obter os caracte-
res separados do fundo da imagem. Desta maneira se consegue isolar os caracteres como
1Histograma é uma forma de representar a distribuição dos níveis de cinza de um canal em uma
imagem digital.
21
tudo aquilo que não for branco na imagem. Após a etapa de segmentação, esses caracteres
seguem, conforme diagrama da Figura 2.5, para as etapas de representação/descrição e
reconhecimento/interpretação, que podem ser realizadas com o auxílio de RNAs.
2.2 Redes Neurais Artificiais
As Redes Neurais Artificiais (RNAs) foram criadas inspiradas nas redes neurais
biológicas para tentar resolver uma gama de problemas computacionais em áreas como
reconhecimento e classificação de padrões, aproximação de funções, predição de séries,
otimização, clusterização, controle, etc. A técnica da computação neural é aprender a
metodologia utilizada pelo cérebro humano para solucionar problemas e aplicá-la aos
sistemas computacionais (ALEXANDRIA, 2005).
2.2.1 Perceptron Simples
O Perceptron Simples é um tipo elementar de algoritmo adaptativo considerado
como a primeira arquitetura neural inventada: o neurônio artificial. O Perceptron é
composto de nentradas (xi) às quais se associam a npesos (wi) e uma função de ativação
uque geram uma saída y(HAYKIN, 1998), conforme é apresentado na Figura 2.7.
Figura 2.7: modelo de um neurônio artificial.
Fonte: McCulloch e Pitts (1988).
Tratando em notação matricial, o vetor de entradas do Perceptron pode ser
definido de acordo com a equação 2.3:
x(t) =
x0(t)
x1(t)
x2(t)
.
.
.
xn(t)
(2.3)
em que xi(t)denota uma entrada qualquer do vetor de entradas x(t)etrepresenta o
instante que essa entrada chega à rede neural.
O vetor de pesos associado ao neurônio pode ser determinado de acordo com
22
a equação 2.4:
wi(t) =
w0(t)
w1(t)
w2(t)
.
.
.
wn(t)
(2.4)
em que wirepresenta o peso que conecta a i-ésima entrada ao neurônio.
A função de ativação, u, pode ser encontrada mediante a regra de ativação do
Perceptron que é calculada pelo somatório da equação 2.5:
u(t) =
n
∑
j=0
wi(t)xi(t)(2.5)
em que wiexisão o i-ésimo peso e a i-ésima entrada, respectivamente.
Finalmente, a saída do neurônio artificial trata-se de um número escalar que
é dependente da função de ativação. Esta função é normalmente uma função sinal, dada
pela equação 2.6:
y(t) = sinal(u(y)) = (+1,se u(t)≥0
−1,se u(t)<0(2.6)
A utilização do Perceptron é dividida em duas grandes etapas: a etapa de
aprendizado, onde o neurônio artificial “aprende” o que se deseja através de exemplos, e
a etapa de generalização, onde o neurônio consegue aplicar o “conhecimento adquirido”.
A fase de aprendizado do Perceptron está ligado ao processo de atualização
de seus pesos. Nesta fase, também chamada de fase de treinamento, os pesos são modi-
ficados de acordo com exemplos que são apresentados ao neurônio através da regra delta
(HAYKIN, 1998), que utiliza a diferença entre a saída desejada (cedida no treinamento)
e a saída obtida para nortear a atualização dos pesos. Essa regra pode ser sucintamente
descrita pelos seguintes passos (JAIN; MAO; MOHIUDDIN, 1996):
1. Inicializar os pesos com valores aleatórios.
2. Apresentar exemplos de entradas para o neurônio e calcular a saída.
3. Atualizar os pesos mediante equação 2.7:
wi(t+1) = wi(t) + η(d−y)xi,(2.7)
em que wié o i-ésimo peso, ηé a taxa de aprendizado do neruônio, dé a saída
desejada, yé a saída obtida e xiai-ésima entrada de exemplo.
23
A outra etapa, também chamada de fase de testes, consiste simplesmente em
aplicar entradas aos neurônios e verificar sua saída mediante equação 2.6. Na prática,
as duas etapas são utilizadas em conjunto com um banco de dados já conhecido, como o
banco de dados da Iris (BLAKE; KEOGH; MERZ, 1998), por exemplo.
Apesar de eficiente, há várias limitações na capacidade do Perceptron. De
acordo com a equação 2.6, percebe-se que a saída do Perceptron Simples é binária: só
existem duas saídas possíveis. Por este motivo, pode-se inferir que o Perceptron só pode
ser utilizado em tarefas de classificação de padrões em que os dados são linearmente
separáveis. Contudo, na prática não se sabe quando dados são linearmente separáveis ou
não (e muitas vezes não são).
O banco de dados da Iris (BLAKE; KEOGH; MERZ, 1998) ilustra bem dados
linearmente e não-linearmente separáveis. Este conjunto de dados é composto por 150
amostras de três tipos de plantas: Iris-Setosa; Iris-Versicolor; Iris-Virginica. Cada amostra
contém quatro valores: comprimento da sépala; largura da sépala; comprimento da pétala;
largura da pétala. Na Figura 2.8a é mostrado um gráfico de dispersão com os valores de
comprimento da sépala ×comprimento da pétala das 150 amostras, em que os pontos
vermelhos são exemplos da classe Iris-Setosa, os pontos verdes são exemplos da classe
Iris-Versicolor e os pontos azuis são exemplos da classe Iris-Virginica. É possível perceber
claramente que se consegue separar a classe Iris-Setosa das demais com uma reta. Essa
situação, ilustrada pela Figura 2.8b, indica que essa classe é linearmente separável das
demais. Ao passo que é impossível traçar uma reta e separar as outras duas classes. A
única maneira de fazê-lo, indicada pela Figura 2.8c, seria com curvas cheias de vales e
picos.
Figura 2.8: (a) conjunto de dados Iris; (b) classes linearmente separáveis; (c) classes
não-linearmente separáveis.
(a) (b) (c)
Fonte: autor.
Visando superar a limitação do Perceptron Simples, foi pensado em várias
camadas de Perceptrons para tentar resolver problemas mais complexos, não-linearmente
separáveis.
24
2.2.2 Perceptron Multicamadas
Uma rede Perceptron Multicamadas (MLP - Multilayer Perceptron) é uma
generalização do Perceptron Simples. Por se tratar de uma rede, existem vários neurônios
envolvidos e, por se tratar de uma rede de Perceptrons, existem vários perceptrons na
rede. O diferencial está em como os perceptrons estão dispostos. Diferentemente da
Figura 2.7, onde existiam apenas entradas, pesos e uma saída, na rede MLP existem além
dos citados, camadas internas de neurônios, o que faz aumentar a quantidade de pesos
entre essas camadas, como é mostrado na Figura 2.9, que traz uma rede MLP com duas
camadas ocultas.
Figura 2.9: arquitetura de uma rede MLP com duas camadas ocultas.
Fonte: autor.
As entradas da rede MLP são conectadas sempre à primeira camada oculta de
neurônios e a saída destes é conectada a outra camada oculta ou à camada de saída. O
sinal da rede se propaga sempre para a frente, camada por camada.
Assim como as redes de Perceptrons, a rede MLP também é dividida em duas
fases: aprendizado (ou treino) e generalização (ou execução). Contudo, não se pode utili-
zar a regra delta para o treinamento dessa rede visto que ela não permite a atualização dos
pesos nas camadas ocultas mediante a correção de erro. O algoritmo largamente utilizado
para treinar a rede MLP é o algoritmo de retropropagação do erro (backpropagation), que
é dividido em duas fases: fase direta e fase inversa.
A primeira fase é a chamada de fase direta ou fase de propagação devido ao
sentido do fluxo da informação, que se dá a partir dos neurônios na camada de entrada
passando pelos neurônios da(s) camada(s) oculta(s) até produzir uma saída.
Na segunda fase, nomeada de fase inversa ou fase de adaptação, ocorre a
adaptação dos pesos da rede de acordo com o fluxo inverso, ou seja, a partir da camada
de saída à camada de entrada. Diferentemente da primeira fase, esta fase só acontece
durante o treinamento da rede, onde as diferenças entre os valores de saída da rede e os
valores desejados geram parcelas individuais de erro para cada neurônio em cada camada.
25
O algoritmo backpropagation pode ser implementado com uma camada oculta
seguindo os seguintes passos:
1. Inicializar os pesos de entre todas as camadas com valores aleatórios não nulos.
2. Apresentar um exemplo com ide entradas xi(t)à rede e propagá-lo até a saída.
3. Calcular os erros ek(t)instantâneos na saída da rede.
4. Calcular os gradientes locais δs
i(t)dos neurônios da camada de saída.
5. Ajustar os pesos da camada de saída através da equação 2.8:
ws
i(t+1) = ws
i(t) + ηδ s
i(t)yi(t)(2.8)
em que ηé uma taxa de aprendizado e yé a saída do neurônio da camada oculta.
6. Calcular os gradientes locais δo
i(t)dos neurônios da camada oculta.
7. Ajustar os pesos da camada de oculta através da equação 2.9:
wo
i(t+1) = wo
i(t) + ηδ o
i(t)xi(t)(2.9)
8. Repetir os passos de 2 a 7 para todos os padrões de treinamento (1 época de trei-
namento).
9. Repetir o passo 8 enquanto o erro quadrático médio (EQM) de treinamento (equação
2.10) for maior que um valor de tolerância.
EQM =1
p
p
∑
k=1
e2
k(2.10)
em que pé o número de épocas de treinamento.
2.2.3 Descritores de Caracteres Manuscritos
Para que o sistema de reconhecimento de caracteres tenha sucesso é necessário
que a RNA esteja bem treinada e isto depende de vários fatores, como, por exemplo, quais
características descrevem aquele caractere. Essas características descrevem cada caractere
de uma maneira individual para que a RNA não confunda nenhum deles e, por isso, são
chamadas de descritores de caracteres.
Existem, na literatura, diversos descritores. Em Dimauro et al. (1997) e Freitas
et al. (2007) é utilizado o método zoning (comumente utilizada para extrair informações
topológicas) no reconhecimento de números manuscritos. Já Cheung et al. (1998) uti-
lizaram modelos deformáveis para o reconhecimento de caracteres manuscritos da base
especial NIST1.
26
Técnicas de extração de contorno como, por exemplo, perfil de contorno (LA-
AKSONEN, 1997) e código de cadeia (NGUYEN; BLUMENSTEIN, 2011) tem sido lar-
gamente utilizadas para reconhecimento de caracteres há décadas.
Outra técnica bastante utilizada se baseia em projeções. Esta não é só utilizada
em reconhecimento de caracteres mas também em reconhecimento facial (FENG; YUEN,
1998), detecção de olhos (ZHOU, 2004) e segmentação de imagens médicas (FELIX et al.,
2012). Esta técnica consiste em calcular algumas projeções de uma imagem de entrada,
combinando-as a fim de formar um único vetor de características descritor daquela imagem
(CRUZ G. D. C. CAVALCANTI, 2009).
Para poder utilizar a técnica de projeções deve-se, primeiramente, normalizar
a imagem para uma resolução comum a todas as outras imagens. Isso garante que o
tamanho do vetor de características terá o mesmo tamanho para todos os caracteres. A
partir da imagem redimensionada calculam-se algumas projeções, como, por exemplo,
horizontais e verticais, conforme é ilustrado na Figura 2.10 que mostra caracteres ao
lado de suas projeções. Nas Figuras 2.10a, 2.10d e 2.10g são mostradas as imagens
normalizadas (75x75 pixels) de caracteres, nas Figuras 2.10b, 2.10g e 2.10h estão ilustradas
as projeções verticais de seus respectivos caracteres (ao lado) onde são contados os pixels
nas colunas da imagem. Por fim, nas Figuras 2.10c, 2.10f e 2.10i estão as projeções
horizontais onde contam-se todos os pixels do caractere em relação às linhas da imagem.
Se a imagem normalizada possui dimensões 75x75, tanto a projeção horizontal quanto
a projeção vertical terá 75 elementos. Logo, o vetor descritor desse caractere terá 150
elementos, que é a concatenação das duas projeções.
27
Figura 2.10: exemplo de caracteres em (a), (d) e (g), exemplo de projeções verticais em
(b), (e) e (h) e exemplo de projeções horizontais em (c), (f) e (i).
(a) (b) (c) (d) (e) (f) (g) (h) (i)
Fonte: autor.
28
Cap´
ıtulo 3
Metodologia
Com base nos conceitos dispostos no Capítulo anterior, torna-se possível a
implementação dos componentes que integram uma metodologia especializada em reco-
nhecer caracteres manuscritos. Este Capítulo traz, inicialmente, a descrição do ambiente
de desenvolvimento utilizado neste trabalho. Os detalhes da implementação desta me-
todologia desde a aquisição da imagem, através da tela do dispositivo Android, até o
reconhecimento pela RNA MLP são detalhados posteriormente. São descritos, ainda, os
aplicativos implementados para a criação do banco de dados de treino e teste da RNA.
3.1 Ambiente de Desenvolvimento
A implementação do sistema e de suas partes é desenvolvida completamente
em Java sem nenhuma dependência de biblioteca de Visão Computacional/Processamento
de Imagens ou Redes Neurais/Aprendizado de Máquina. Sendo assim, de fácil integração e
portabilidade em sistemas operacionais embarcados baseados em Java (SILBERSCHATZ;
GALVIN; GAGNE, 2008).
Toda a implementação é realizada em um Sistema Operacional OS X 10.9.1
através da IDE ADT (Android Developer Tools ), que inclui a plataforma Eclipse. Todos
os testes e a interação com o sistema Android são realizados em um smartphone Nexus 4
com Android 4.4.2 (KitKat).
3.2 Descrição do Sistema
Como detalhado na Seção 2.2.2, uma RNA do tipo MLP precisa ser treinada
corretamente para ter resultados corretos. Por este motivo, a metodologia para reconhe-
cimento de caracteres é dividida em duas etapas: treinamento e teste.
Na etapa de treinamento é criado um aplicativo para coletar amostras de letras
escritas a mão. É nesta etapa que é criado o banco de dados que serve para treinar a
29
MLP. A rede MLP não é implementada neste primeiro aplicativo, pois seu treinamento é
feito offline no computador.
Outro aplicativo é criado para a etapa de teste. Neste aplicativo a MLP é
embarcada já treinada com os pesos especificados pelo treinamento offline pronta para
ser utilizada de forma que o usuário desenha uma letra e esta é reconhecida. Após o
reconhecimento é feita uma verificação para detectar se a rede acertou a letra ou não. Por
fim, os resultados são contabilizados e armazenados para posterior análise. A Figura 3.1
mostra um esquema com os módulos da abordagem proposta.
Figura 3.1: fases da criação da metodologia de reconhecimento de caracteres.
Fonte: autor.
3.3 Interface Gráfica no Android
O principal componente de ambos os aplicativos é o mesmo: classe Canvas
(android.graphics.Canvas). É através de um objeto do tipo Canvas que é possível o desenho
em uma View. A classe View (android.view.View) é responsável por prover uma interface
de desenho na tela e tratar seus eventos, quando necessários (LECHETA, 2013). A classe
View é, em outras palavras, a classe-base para todos os componentes visuais presentes no
Android, tais como TextView,ImageView,SurfaceView, etc.
O método onDraw, da classe View, recebe um objeto do tipo Canvas como
argumento que permite o desenho através de bitmaps na tela. A classe Canvas fornece
várias primitivas de desenho, tais como (GOOGLE, 2014):
•Pontos:void drawPoint (float x, float y, Paint paint)
em que (x,y) são as coordenadas do ponto e paint o objeto de configuração do
desenho.
•Linhas:void drawLine (float startX, float startY, float stopX, float stopY, Paint paint)
em que (startX,startY) e(stopX,stopY) são as coordenadas dos pontos iniciais e finais
da linha, respectivamente, e paint o objeto de configuração do desenho.
•Retângulos:void drawRect (float left, float top, float right, float bottom, Paint
paint)
em que (left, top) são as coordenadas do ponto superior esquerdo do retângulo,
30
()right,bottom) são as coordenadas do ponto inferior direito e paint o objeto de
configuração do desenho.
•Retângulos arredondados:void drawRoundRect (RectF rect, float rx, float ry, Paint
paint)
em que rect são os limites do retângulo com vértices arredondados, rx ery os raios
dos vértices arredondados em relação aos eixos X e Y respectivamente e paint o
objeto de configuração do desenho.
Outro importante método da classe View é o onTouchEvent, que é chamado
quando a tela é tocada. Este método recebe um objeto do tipo MotionEvent que trata
de diversas informações sobre possíveis eventos de toque na tela, tais como (GOOGLE,
2014):
•ACTION_DOWN: existe algo pressionando a tela.
•ACTION_MOVE: a posição de algo que estava pressionando a tela mudou.
•ACTION_UP: algo que estava pressionando a tela acabou de ser liberado.
Com essas funções é possível adquirir a imagem em bitmap de qualquer desenho
fornecido pelo usuário. Depois de adquirida essa imagem se pode continuar o fluxo do
Processamento de Imagens descrito na Figura 2.5.
3.4 Aplicativos Desenvolvidos
O primeiro aplicativo desenvolvido, chamado MLPmanager e ilustrado na Fi-
gura 3.2a, serve para criar um conjunto de caracteres fornecidos por usuários. Este apli-
cativo contém três objetos do tipo Button e um objeto EditText, além de uma View para
desenho. O botão “Clear” apenas limpa o que foi desenhado pelo usuário. O botão “Start”,
que muda para “Stop” ao pressionado, facilita o processo de criação do banco de dados da
seguinte maneira: ao clicá-lo o usuário deve desenhar a letra que for mostrada no campo
de texto e ao terminar deve clicar em “Save”. Imediatamente depois é gerada uma outra
letra no campo de texto e a área de desenho é limpa para o usuário desenhar novamente.
Esse processo só termina quando forem desenhadas todas as letras do alfabeto ou quando
o usuário clicar em “Stop”.
Ao clicar em “Save” é desencadeada uma sequência de etapas que se iniciam
com a aquisição da imagem através do bitmap descrito na seção anterior. Esse bitmap é
composto de basicamente duas formas: o caractere desenhado pelo usuário e uma borda
arredondada. O caractere é desenhado na cor preta (#000000 em hexadecimal), a borda
na cor cinza (#353535 em hexadecimal) e ambos em um fundo branco (#FFFFFF em
hexadecimal). A pequena diferença entre esses tons é suficiente para que um processo de
limiarização separe o caractere da borda e do fundo. Com o caractere isolado na imagem é
31
possível segmentá-lo facilmente buscando o retângulo que o circunscreve. Esse caractere é
normalizado para uma resolução padrão de 100 ×100 pixels comum a todos os caracteres.
Esta imagem resultante é utilizada para gerar as duas projeções (vertical e horizontal)
que são concatenadas num array de comprimento 200 que é finalmente salvo na memória
interna do dispositivo junto com a imagem que o gerou. A Figura 3.3 ilustra algumas
dessas etapas.
Figura 3.2: telas dos aplicativos implementados, em (a) é mostrada a tela do primeiro
aplicativo que serve para criar um banco de caracteres , e em (b) e (c) estão as telas do
segundo aplicativo que apresenta o resultado do reconhecimento automático em conjunto
com uma verificação de erro.
(a) (b) (c)
Fonte: autor.
O segundo aplicativo tem etapas semelhantes ao primeiro. Este aplicativo
possui uma área de desenho e o mesmo botão “Clear” com a finalidade de limpá-la. O
botão “Recognize” é semelhante ao botão “Save” do aplicativo anterior. Ao clicar nesse
botão acontece o mesmo processamento ilustrado na Figura 3.3 mas ao invés de salvar
oarray com as projeções, este é enviado como entrada à rede MLP, que é carregada e
configurada ao iniciar o aplicativo. A MLP gera uma saída que é decodificada em uma
letra. Após essa decodificação, uma caixa de alerta (ilustrado na Figura 3.2c) aparece
para que o usuário confirme o acerto da rede neural ou a corrija.
3.5 Detalhes da Implementação
Para que seja possível efetuar o treinamento da rede neural MLP, um conjunto
representativo de caracteres é adquirido. Esse conjunto foi criado mediante exemplos
32
Figura 3.3: (a) bitmap extraído do aplicativo (768 ×864 pixels), (b) limiarização do
caractere, (c) segmentação do caractere e (d) normalização para um tamanho padrão dos
caracteres (100 ×100 pixels).
(a) (b) (c) (d)
Fonte: autor.
de caracteres em letras maiúsculas. Sete pessoas forneceram, ao todo, 650 caracteres
sendo 25 exemplos para cada uma das 26 letras do alfabeto. Esses 650 caracteres foram
binarizados, segmentados e redimensionados para a resolução 100 ×100 pixels, o que
gera 650 arrays com 200 elementos cada um. Desta maneira, um conjunto de dados com
650 linhas e 200 colunas é formado. À este conjunto foi adicionado uma última coluna
contendo um número de 0 a 25 que indica qual letra aqueles atributos representam.
Em relação ao treinamento da MLP, utilizou-se uma taxa de aprendizado (η)
de valor 0,5 com condição de parada por erro quadrático médio no valor de 10−6ou 10000
época de treinamento, o que ocorrer primeiro. Em relação à arquitetura topológica da
rede, são empregadas 200 entradas e 26 neurônios na camada de saída. As 200 entradas
foram escolhidas devido à resolução das imagens dos caracteres que geram um array
de projeções com tamanho 200. Cada array recebe uma classe enumerada de 0 a 25
representando um caractere distinto, sendo 0 para o caractere “A”, 1 para o “B” e assim
por diante. Desta maneira existem 26 possíveis saídas para a MLP.
Sabe-se que definir o número de neurônios na única camada oculta da rede
é uma tarefa complexa, levando quase sempre ao uso de heurísticas em sua definição
(ALEXANDRIA, 2005). De acordo com Yin, Liu e Han (2005), a quantidade de neurônios
na camada oculta pode ser calculada conforme a equação 3.1.
H=max(M1,M2)×
2
3,(3.1)
em que Hé o número de neurônios na camada oculta, M1é a quantidade de entradas e
M2a quantidade de saídas da rede.
Desta maneira, definiu-se uma rede MLP com os parâmetros 200/233/26. Ou
seja, 200 entradas, 233 neurônios na camada oculta e 26 neurônios na camada de saída.
33
Cap´
ıtulo 4
Testes e Resultados
4.1 Metodologia de Testes
A metodologia é analisada em diversas formas através de taxas de erros e
acertos. Primeiramente é validada a implementação da rede neural MLP através da
solução de problemas não linearmente separáveis. Esses problemas vão desde os triviais
como o problema do Ou Exclusivo (XOR) a problemas complexos com taxas de acerto
conhecidas e disponibilizadas em Blake, Keogh e Merz (1998).
Depois de validada a rede isolodamente, foi analisado o desempenho dessa rede
com a o conjunto de dados criado pelo banco de caracteres. Para isso foram calculadas
as taxas de acerto média, mínima e máxima ao longo de 30 rodadas de treinamento e
teste. Isto é, o conjunto de 650 amostras de caracteres foi aleatorizado para evitar o
viés de algum caractere e divido em duas partes, sendo uma para treino e outra para
teste. Isto foi feito para garantir que nenhum exemplo utilizado no treino da rede fosse
também utilizado no teste. Como os pesos iniciais da rede são fornecidos aleatoriamente,
é necessário um número alto de rodadas para garantir a fidelidade das taxas médias.
Após o treinamento eficiente da rede, os pesos sinápticos ideais foram salvos
e carregados no segundo aplicativo descrito na seção anterior. Dessa maneira, a última
metodologia de avaliação se deu de forma online com pessoas desenhando caracteres no
aplicativo e verificando se a rede acertou ou não.
4.2 Análise de Resultados
A cada rodada de treinamento e testes, o conjunto de dados foi dividido: 80%
dos dados foi utilizado para treino e o restante para teste. Ou seja, a cada rodada 130
exemplos escolhidos aleatoriamente foram testados e seus resultados computados mediante
a matriz de confusão da Tabela 4.1.
34
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
10810000000000007023200411000A
01171240830012105106110010230B
11122040202101007000131000102C
0531030101202201611191100000D
081001070200104006001100000020E
0013312500001100580213000000F
0802001151000001406140000000G
0000000130000055300150000000H
00000000129300005000500000012I
1000002061100000300064000203J
05001200001200104001230001120K
0000000000012700300040000000L
00000000000011813710050040010M
0200000000104110400550603000N
00015001000003011807050000000O
0110050000100071290730000010P
20000040010000110126140022000Q
11203132100300154012440000000R
02022060220000501010900000011S
1000000020000030006135000040T
0102000200101380006012702000U
710000000010527013700105111360V
19200001000301940815004100100W
60000000110010402140011112410X
0000000020001061004208051190Y
00100010910000300015000000106Z
Tabela 4.1: matriz de confusão após 30 rodadas de treinamento e teste.
35
Sabe-se que a matriz de confusão traz todas as informações referentes reconhe-
cimentos corretos, incorretos, bem como os falsos positivos e falsos negativos. Contudo,
por se tratar de um problema com grande quantidade de saídas, sua visualização e análise
se torna uma tarefa complicada. Logo, a partir dessa tabela se conseguiu extrair informa-
ções sobre os resultados individuais referente a cada letra. Esses dados são sumarizados
na Tabela 4.2.
Letra Acertos Erros Acerto Médio (%)
A 108 30 78,3%
B 117 51 69,6%
C 122 36 77,2%
D 103 37 73,6%
E 107 44 70,9%
F 125 28 81,7%
G 115 27 81,0%
H 130 19 87,2%
I 129 25 83,8%
J 110 27 80,3%
K 120 32 78,9%
L 127 7 94,8%
M 118 31 79,2%
N 110 30 78,6%
O 118 31 79,2%
P 129 26 83,2%
Q 126 27 82,3%
R 124 40 75,6%
S 109 33 76,8%
T 135 16 89,4%
U 127 26 83,0%
V 105 64 62,1%
W 100 58 63,3%
X 124 33 79,0%
Y 119 29 80,4%
Z 106 30 77,9%
Total 3063 837 78,5%
Tabela 4.2: taxa de acerto médio por letra após 30 rodadas de treinamento e teste.
Analisando esta nova Tabela se conclui que dentre os 3900 exemplos de ca-
racteres utilizados para treino (30 rodadas de 130 exemplos), 3063 foram reconhecidos
corretamente e apenas 837 tiveram uma detecção incorreta, gerando uma taxa de acerto
média de 78,5%. É importante destacar que todos os testes foram realizados da mesma
maneira: os exemplos do conjunto de dados foram embaralhados e uma parte deste con-
junto foi separada para treino e outra para teste. Nada impede que depois embaralhar o
conjunto e separar uma parte para treinar a rede neural, alguma letra não seja utilizada
no treino. Logo, esta letra com certeza irá gerar uma baixa taxa de acerto. Por isso a
necessidade de uma boa forma de aleatorização dos dados além de ter o mesmo número
de exemplos para cada letra a fim de não beneficiar uma em detrimento a outra.
36
Durante as 30 rodadas, todos as taxas de acertos foram computados e estão
esquematizados no gráfico da Figura 4.1 através de uma linha tempo. A menor taxa de
acerto, ocorreu na 17arodada com um valor de 6,9%. Já a maior taxa de acerto foi de
90,8% e ocorreu na 9arodada. Ao final, obteve-se uma taxa de acerto média de 78,5%,
como já ilustrado na tabela anterior. Devido a essa grande variabilidade das taxas de
acerto constata-se a importância do teste repetitivo e com dados aleatórios.
Figura 4.1: taxa de acerto (%) por rodada de treinamento/teste.
Fonte: autor.
Ainda analisando a Tabela 4.2 percebe-se que o caractere com menor taxa de
acerto foi a letra “V”, seguida pela letra “W”, com taxas de 62,1% e 63,3%, respectivamente.
A análise detalhada desses casos, através da matriz de confusão, revela que a letra “V”
foi confundida com a letra “X” 13 vezes e 11 vezes com a letra “W”. Já a letra “W”
foi confundida 19 vezes com a letra “A” e 9 vezes com a letra “N”. Esses resultados
falsos positivos mais recorrentes são explicáveis e até de certo modo aceitáveis devido
à semelhança entre o formato das letras. A letra “X”, por exemplo, é composta por uma
letra “V” espelhada verticalmente.
Figura 4.2: variação da taxa de acerto em função da quantidade de dados usados para
treino.
Fonte: autor.
A fim de verificar a influência da quantidade de dados utilizadas para treinar
37
a rede neural de maneira eficiente, foram feitos testes com diferentes quantidade de dados
utilizados no treino da rede. O conjunto de caracteres foi, inicialmente, particionado de
modo que 10% do conjunto fosse utilizado para treinar a rede e 90% para testar. Essa
porcentagem foi variada de 10% até 90% para treino da rede. A taxa de acerto em cada
um desses testes foi calculada e está ilustrada pelo gráfico da Figura 4.2. É possível
perceber que há uma curva crescente com uma certa estabilidade linear na metade da
curva. Esse comportamento é o esperado, dado que com poucos dados para treino (início
da curva) não são suficientes para treinar a rede de maneira eficiente. De maneira oposta,
com muitos dados para treino restam poucos para teste e, por isso, a probabilidade de
erro é menor.
A última metodologia de análise não utilizou o banco de dados criados mas
sim a rede já treinada. Alguns voluntários, dos quais nem todos ajudaram a criar o
banco de dados que treinou a rede, foram instruídos a desenharem uma letra qualquer
com qualquer tamanho e em qualquer posição da tela para testar a eficiência da rede. A
restrição para o desenho da letra foi que ela fosse desenhada verticalmente e em caixa
alta. Foram desenhadas 515 letras com maios ou menos 20 desenhos por letra, como pode
ser visto em detalhes pela matriz de confusão da Tabela 4.3.
De acordo com a Tabela 4.3 percebe-se que duas letras (“K” e “L”) não obtive-
ram nenhum erro. A letra “L” também foi a que obteve a maior taxa de acerto durante os
testes anteriores, conforme mostrado na Tabela 4.2 e isto se deve ao fato de suas projeções
não se parecerem com as projeções de nenhuma outra letra (ver exemplos de projeções na
Figura 2.10), o que faz das projeções serem bons descritores para esse caractere. Contudo,
isso não se repete para todos os outros caracteres. As letra “V”, por exemplo, obteve a
pior taxa de acerto durante a etapa de treinamento e teste e a segunda pior taxa nos
testes com o dispositivo. Das 28 vezes em que foi desenhada, a leltra “V” foi confundida
7 vezes com a letra “X”. É fácil de verificar que isso se deu devido à semelhança de suas
projeções, conforme ilustrado na Figura 4.3.
Figura 4.3: caractere e suas projeções: (a) letra “V” e (b) letra “X”.
(a) (b)
Fonte: autor.
A quantidade de acertos, erros e taxa de acerto percentual durante esta etapa
de testes no dispositivo está resumida na Tabela 4.4 a fim de facilitar a análise individual
de cada caractere.
38
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
18 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 A
0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 B
0 0 19 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 C
0 0 1 13 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 D
0 0 0 0 13 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 E
0 1 0 0 0 15 0 0 0 0 2 0 0 0 0 2 0 0 1 0 0 0 0 1 0 0 F
0 0 0 0 0 0 19 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 G
1 0 0 0 0 0 0 17 0 0 0 0 1 2 0 0 0 0 4 0 0 0 1 0 0 0 H
0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 I
0 0 0 0 0 0 1 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 J
0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 K
0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 L
0 0 0 0 0 0 0 1 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 M
0 0 0 0 0 0 0 0 0 0 1 0 0 9 0 0 0 0 0 0 0 0 2 0 0 0 N
0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 0 1 0 0 O
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 0 3 0 P
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 12 3 0 0 0 0 0 0 0 0 Q
0 2 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 11 0 0 0 2 0 2 0 0 R
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 0 0 0 0 0 0 S
0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 20 0 0 0 0 1 0 T
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 0 1 0 0 0 U
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 2 7 1 0 V
1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 7 18 0 0 0 W
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 21 1 0 X
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 26 0 Y
0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 22 Z
Tabela 4.3: matriz de confusão para os testes realizados no dispositivo.
39
Ao analisar a quantidade de erros por letra percebe-se um alto índice com a
letra “R”. Percebeu-se, ao longo dos testes com os voluntários, que existem letras com alta
variabilidade de desenho variando de pessoa para pessoa. Para o ser humano é apenas um
detalhe a mais ou menos que não interfere na identificação da letra, mas para a inteligência
artificial esses detalhes geram projeções bem diferentes, conforme pode ser visto na Figura
4.4.
Letra Acertos Erros Acerto (%)
A 18 4 81,9%
B 10 2 83,3%
C 19 2 90,5%
D 13 5 72,2%
E 13 1 92,9%
F 15 7 68,2%
G 19 1 95,0%
H 17 9 65,5%
I 11 2 84,6%
J 12 1 92,3%
K 14 0 100,0%
L 10 0 100,0%
M 11 1 91,7%
N 9 3 75,0%
O 19 1 95,0%
P 21 4 84,0%
Q 12 4 75,0%
R 11 8 57,9%
S 26 1 96,3%
T 20 3 87,0%
U 23 2 92,0%
V 18 10 64,3%
W 18 9 66,7%
X 21 3 87,5%
Y 26 1 96,3%
Z 22 3 88,0%
Total 428 87 83,1%
Tabela 4.4: taxa de acerto por letra após testes realizados no dispositivo.
A partir dessa análise, se verifica que problemas de Reconhecimento Inteligente
de Caracteres através de Redes Neurais Artificiais necessitam de muitos exemplos de
amostras de caracteres diferentes, de pessoas diferentes. As projeções conseguem descrever
corretamente um caracteres mas são sensíveis aos detalhes. É fácil perceber que a projeção
de um caractere “Z” será a mesma do caractere “S” se este for desenhado mais retilíneo,
por exemplo.
Com base no conjunto de resultados das diferentes análises e nas discussões
apresentadas nesse Capítulo, algumas conclusões, contribuições e sugestões para trabalhos
futuros podem ser evidenciadas.
40
Figura 4.4: caractere “R” e suas projeções em diferentes variações.
(a) (b)
(c) (d)
(e) (f)
Fonte: autor.
41
Cap´
ıtulo 5
Conclusões e Trabalhos Futuros
Nesta monografia é descrito o desenvolvimento de uma metodologia para reco-
nhecer caracteres manuscritos através de uma combinação de técnicas de processamento
de imagens e inteligência artificial embarcadas em um dispositivo móvel com sistema ope-
racional android. Além disto, um banco com 650 amostras de caracteres manuscritos foi
criado, testado e analisado.
Os testes, bem como o processo de análise, se divide em três momentos. Inici-
almente é desenvolvido um aplicativo para criar o banco de dados contendo exemplos de
imagens de caracteres e seus descritos, que neste trabalho foram utilizadas as projeções.
Depois de criado o banco, este é utilizado para testar a rede neural MLP implementada
em Java. Nesta etapa são levantadas as taxas de acerto do banco em diferentes divisões
de treino e teste e em grande quantidade de rodadas de treino e teste. A terceira e úl-
tima etapa é realizada com a rede já treinada. Um segundo aplicativo é desenvolvido
para testar o desempenho da metodologia com diferentes pessoas, que ajudaram ou não
a construir o banco de dados. Taxas de acerto também foram levantas e comentadas as
dificuldades encontradas.
Baseado nas taxas de acerto encontradas (acerto médio de 78,5% por letra
em uma simulação cruzada e 83,1% em uma validação com pessoas reais em testes no
dispositivo), a metodologia desenvolvida se mostrou aplicável em diversas situações. Como
trabalhos futuros pretende-se desenvolver diversos aplicativos, tais como os descritos em
seguida.
Um aplicativo educacional para crianças entre três e cinco anos de idade onde
a criança deve estar aprendendo a ler e escrever. Neste aplicativo deverá ser mostrado
uma imagem de algo que a criança conheça, como um animal, por exemplo. Embaixo
da imagem do animal deve conter o nome do animal com uma ou mais letras faltando.
A criança deve desenhar a letra que está faltando com sua própria grafia. O aplicativo,
então verificaria se a criança teria acertado ou não.
Outro aplicativo, também ligado à área de educação, seria voltado para a ajuda
de jovens com as contas matemáticas. É comum a dificuldade no começo do processo de
42
aprendizagem de equações e inequações. Este aplicativo serviria como uma espécie de
gabarito onde o estudante escreveria a equação (até determinado grau) com uma incógnita,
o aplicativo reconheceria os caracteres à medida que estes fossem desenhados e realizaria
o cálculo resultando com o valor da incógnita.
Outra sugestão de aplicativo é um identificador de símbolos. A escrita de
símbolos gregos é comum em disciplinas envolvendo cálculos e equações e muitas vezes
não se sabe o nome do símbolo, apenas o seu formato. Já existe um único aplicativo
semelhante na Play Store (pesquisado em: 05/04/2014) onde o usuário desenha o símbolo
e este o reconhece e indica qual o comando necessário para fazer este símbolo no L
A
T
EX1,
mas este reconhecimento é feito online. Com a abordagem descrita neste trabalho se pode
fazer o mesmo aplicativo sem a necessidade de uma conexão com a internet.
1L
A
T
E
X é um sistema de composição de textos de alta qualidade muito utilizado no âmbito técnico e
científico através de uma espécie de linguagem.
43
Referências
ALEXANDRIA, A. R. d. Sistema de Reconhecimento Óptico de Algarismos para
Medidores Convencionais de Energia. Dissertação (Mestrado) — Universidade Federal
do Ceará (UFC), 2005.
ALMEIDA, T. M. de. Implementação e testes de método de contornos ativos t-snakes
para a segmentação de imagens. Monografia. Dezembro 2009.
ANTANI, S.; CRANDALL, D.; KASTURI, R. Robust extraction of text in video. In: .
[S.l.: s.n.], 2000. v. 1, p. 831–834.
BLAKE, C.; KEOGH, E.; MERZ, C. UCI Repository of Machine Learning Algorithms
Databases. Irvine, CA: University of California. Department of Information and
Computer Science, 1998.
BUKHARI, S.; SHAFAIT, F.; BREUEL, T. Segmentation of curled textlines using active
contours. In: The Eighth IAPR International Workshop on Document Analysis Systems,
2008. DAS ’08. [S.l.: s.n.], 2008. p. 270–277.
CECOTTI, H.; BELAID, A. Hybrid ocr combination approach complemented by a
specialized icr applied on ancient documents. In: Eighth International Conference on
Document Analysis and Recognition. [S.l.: s.n.], 2005. v. 2, p. 1045–1049.
CHATTOPADHYAY, T.; SINHA, P.; BISWAS, P. Performance of document image ocr
systems for recognizing video texts on embedded platform. In: . [S.l.: s.n.], 2011. p.
606–610.
CHEUNG, K.-W. et al. Recognition of handwritten digits using deformable models.
In: in Downton, A., Impedovo, S. (Ed) Progress in Handwriting Recognition, World
Scientific. [S.l.: s.n.], 1998.
CRUZ G. D. C. CAVALCANTI, T. I. R. R. O. Análise de técnicas de extração de
características para o reconhecimento de dígitos manuscritos. In: Proceedings of WUW
2009 (SIBGRAPI 2009), 2009. [S.l.: s.n.], 2009.
DELAYE, A.; ANQUETIL, E. Hbf49 feature set: A first unified baseline for online
symbol recognition. Pattern Recognition, v. 46, p. 117–130, 2013.
44
DILRUKSHI, I.; CHANDRASEKARA, N. Automated response recognition system
for questionnaires. In: 8th International Conference on Computer Science Education
(ICCSE). [S.l.: s.n.], 2013. p. 51–55.
DIMAURO, G. et al. Zoning design for handwritten numeral recognition. In: ICIAP (2).
[S.l.: s.n.], 1997.
FELIX, J. H. S. et al. Autoin: Method of automatic initialization of active contours
applied to lungs in ct images. Latin America Transactions, IEEE (Revista IEEE America
Latina), v. 10, n. 4, p. 1954–1960, 2012.
FENG, G.; YUEN, P. Variance projection function and its application to eye detection
for human face recognition. Pattern Recognition Letters, v. 19, n. 9, p. 899–906, 1998.
FREITAS, C. O. A. et al. Handwritten character recognition using nonsymmetrical
perceptual zoning. In: International Journal of Pattern Recognition and Artificial
Intelligence. [S.l.: s.n.], 2007. v. 21, n. 1, p. 135–155.
GONZALEZ, R. C.; WOODS, R. E. Digital Image Processing (3rd Edition). [S.l.]:
Prentice Hall, 2007.
GOOGLE. Android Developers. Janeiro 2014. Acesso em 27/01/2014. Disponível em:
<http://developer.android.com/reference/>.
HAMMADI, M. et al. Towards an educational tool for arabic handwriting learning. In:
International Conference on Education and e-Learning Innovations (ICEELI). [S.l.:
s.n.], 2012. p. 1–6.
HAYKIN, S. Neural Networks: A Comprehensive Foundation. [S.l.]: Prentice Hall, 1998.
JÄHNE, B. Digital Image Processing. [S.l.]: Springer, 2005.
JAIN, A.; MAO, J.; MOHIUDDIN, K. M. Artificial neural networks: a tutorial. IEEE
Computer, v. 29, n. 3, p. 31–44, 1996.
KITA, K.; WAKAHARA, T. Binarization of color characters in scene images using
k-means clustering and support vector machines. In: 20th International Conference on
Pattern Recognition (ICPR), 2010. [S.l.: s.n.], 2010. p. 3183–3186.
LAAKSONEN, J. Subspace Classifiers in Recognition of Handwritten Digits. Tese
(Doutorado) — Helsinki University of Technology, 1997.
LECHETA, R. R. Google Android. [S.l.]: Novatec, 2013.
MAGLAD, K. W. A vehicle licence plate detection and recognition system. Journal of
Computer Science, v. 8, n. 3, p. 310–315, Janeiro 2012.
MCCULLOCH, W. S.; PITTS, W. Neurocomputing: Foundations of research. In:
ANDERSON, J. A.; ROSENFELD, E. (Ed.). Cambridge, MA, USA: MIT Press, 1988.
cap. A Logical Calculus of the Ideas Immanent in Nervous Activity, p. 15–27. ISBN
0-262-01097-6.
MITHE, R.; INDALKAR, S.; DIVEKAR, N. Optical character recognition. International
Journal of Recent Technology and Engineering (IJRTE), v. 2, n. 1, Março 2013.
45
MURALIKRISHNA, M.; REDDY, D. K. An ocr-character segmentation using routing
based fast replacement paths in reach algorithm. In: International Conference on Image
Information Processing (ICIIP), 2011. [S.l.: s.n.], 2011. p. 1–7.
NARTKER, T. ISRI 1992 Annual Report. Nevada, Las Vegas, 1992.
NGUYEN, V.; BLUMENSTEIN, M. An application of the 2d gaussian filter for
enhancing feature extraction in off-line signature verification. In: International
Conference on Document Analysis and Recognition (ICDAR), 2011. [S.l.: s.n.], 2011. p.
339–343.
PARVEZA, M. T.; MAHMOUD, S. A. Arabic handwriting recognition using structural
and syntactic pattern attributes. Pattern Recognition, v. 46, p. 141–154, 2013.
SAE-BAE, N.; MEMON, N. A simple and effective method for online signature
verification. In: International Conference of the Biometrics Special Interest Group
(BIOSIG). [S.l.: s.n.], 2013. p. 1–12.
SILBERSCHATZ, A.; GALVIN, P. B.; GAGNE, G. Sistemas Operacionais com Java.
[S.l.]: Campus, 2008.
SMITH, R. An overview of the tesseract ocr engine. In: Proc. Ninth Int. Conference on
Document Analysis and Recognition (ICDAR). [S.l.: s.n.], 2007. p. 629–633.
SONG, W. et al. A fault tolerant chinese bank check recognition system based on som
neural networks. In: International Conference on Neural Networks. [S.l.: s.n.], 1997. v. 4,
p. 2560–2565.
SULAIMAN, N. et al. Development of automatic vehicle plate detection system. In: .
[S.l.: s.n.], 2013. p. 130–135.
VELLASQUESA, E. et al. Filtering segmentation cuts for digit string recognition.
Pattern Recognition, v. 41, p. 3044 – 3053, 2008.
YAKOBOV, V.; MASH, L.; THIRER, N. On chip implementation of an ocr algorithm
for musical notation. In: IEEE 26th Convention of Electrical and Electronics Engineers
in Israel (IEEEI). [S.l.: s.n.], 2010. p. 581–584.
YANG, F.; MA, Z.; XIE, M. A novel approach for license plate character segmentation.
In: 1ST IEEE Conference on Industrial Electronics and Applications, 2006. [S.l.: s.n.],
2006. p. 1–6.
YIN, X.-C.; LIU, C.-P.; HAN, Z. Feature combination using boosting. Pattern Recogn.
Lett., Elsevier Science Inc., New York, NY, USA, v. 26, n. 14, p. 2195–2205, out. 2005.
ISSN 0167-8655.
ZHANG, H. et al. Text extraction from natural scene image: A survey. Neurocomputing,
v. 122, p. 310–232, 2013.
ZHOU, X. G. Z.-H. Projection functions for eye detection. Pattern Recognition, v. 37,
n. 5, p. 1049–1056, Maio 2004.