uso de vis~ao computacional para interface homem-computador · catal~ao - 2011. lucas faria porto...
TRANSCRIPT
UNIVERSIDADE FEDERAL DE GOIAS – UFG
CAMPUS CATALAO – CAC
DEPARTAMENTO DE CIENCIA DA COMPUTACAO – DCC
Bacharelado em Ciencia da Computacao
Projeto Final de Curso
Uso de Visao Computacional para InterfaceHomem-Computador
Autor: Lucas Faria Porto
Orientador: Marcio de Souza Dias
Catalao - 2011
Lucas Faria Porto
Uso de Visao Computacional para Interface Homem-Computador
Monografia apresentada ao Curso de
Bacharelado em Ciencia da Computacao da
Universidade Federal de Goias Campus Catalao
como requisito parcial para obtencao do tıtulo de
Bacharel em Ciencia da Computacao
Area de Concentracao: Visao Computacional
Orientador: Marcio de Souza Dias
Catalao - 2011
F. Porto, Lucas
Uso de Visao Computacional para Interface Homem-Computador/Marcio
de Souza Dias- Catalao - 2011
Numero de paginas: 48
Projeto Final de Curso (Bacharelado) Universidade Federal de Goias, Campus
Catalao, Curso de Bacharelado em Ciencia da Computacao, 2011.
Palavras-Chave: 1. Visao Computacional. 2. Processamento de Imagens Digitais.
3. Interface Homem-Computador
Lucas Faria Porto
Uso de Visao Computacional para Interface Homem-Computador
Monografia apresentada e aprovada em de
Pela Banca Examinadora constituıda pelos professores.
Marcio de Souza Dias – Presidente da Banca
Marcio Antonio Duarte
Thiago Jabur Bittar
Dedico este trabalho a todos que me apoiaram nesta ardua jornada; os meu amigos,
minhas irmas e principalmente aos meus pais.
AGRADECIMENTOS
Agradeco primeiramente a Deus por ter me dado sabedoria para superar todos os de-
safios durante esta jornada. Agradeco especialmente aos meus pais, Eloi Porto e Gessiene
Andrade, no qual sou eternamente grato por me apoiarem em minhas escolhas, por esta-
rem comigo nesta caminhada e principalmente por compreenderem a minha ausencia. As
minhas irmas que sao um exemplo carater e determinacao para vencer qualquer desafio.
O agradecimento a todos os professores do DCC no qual sou grato pelos conhecimentos
adquiridos. Aos colegas e companheiros de curso nos quais serao sempre lembrados: pelas
historias, aulas, provas, algumas brigas, festas e principalmente pela amizade construıda;
lembrados como uma famılia, caracterizada pela amizade forte que permanece mesmo
com aqueles que por algum motivo mudaram de rumo no meio da jornada. Agradeco a
turma de 2007, vale ressaltar ”a melhor”.
Algumas pessoas em especial que apareceram atraves do destino e que de maneira inex-
plicavel marcou minha vida: Adam Moreira, Ana Paula Suzuki, Bleno Sampaio, Fabio
Amorim, Faimison Porto, Fernando Antonio, Hugo Sica, Igor Andre, Janaına Teixeira,
Leandro Pedrosa, Luana Fidellys (Band), Luiz Gustavo, Marcia Ribeiro, Marcos Braulio,
Max Gabriel, Renato Franca, Ricardo Rodrigues, Roger Costa, Vinıcius Gustavo, Wilkly-
ney Pires.
Muito obrigado a todos.
”As derrotas so existem para aqueles que deixam de acreditar nas vitorias”
(Gichin Funakoshi)
RESUMO
Porto, L. Uso de Visao Computacional para Interface Homem-Computador.
Curso de Ciencia da Computacao, Campus Catalao, UFG, Catalao, Brasil, 2011, 48p.
Pacientes portadores de tetraplegia apresentam um quadro clınico de paralisia grave
dos membros abaixo do pescoco, como resultado, estas pessoas, portadoras de necessidades
especiais tornam-se extremamente dependentes de auxılio em suas atividades cotidianas,
tendo diversas dificuldades ao acesso a informacao e uso dos meios computacionais dis-
ponıveis atualmente. O trabalho em questao aborda o estudo de tecnicas processamento
digital de imagens com foco em visao computacional, para o desenvolvimento de uma
interface homem-computador voltado para estes usuarios; baseado na utilizacao de uma
webcam de baixa qualidade sem a necessidade de investimento ou criacao de um hardware
especial. Com o resultado deste estudo foi possıvel o desenvolvimento de um prototipo
para captacao e interpretacao dos movimentos do olhar do usuario atraves da webcam e
refletindo na movimentacao do cursor do mouse. Os resultados obtidos foram satisfatorios
com altas taxas de acertos, comprovando a viabilidade do modelo proposto de interface
homem-computador.
Palavras-Chaves: Visao Computacional, Processamento de Imagens Digitais, Inter-
face Homem-Computador
i
Sumario
1 Introducao 1
2 Estado da Arte 4
3 Fundamentacao Teorica 6
3.1 Imagem Digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.2 Visao Computacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.3 Busca por Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.3.1 Imagem Integral . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3.2 Algoritmo AdaBoost . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.3.3 Arvore de Decisao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4 Desenvolvimento 16
4.1 Abordagem Inicial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.2 Restricoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.3 Carregar Modelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.4 Obter Imagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.5 Localizar Olhos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.6 Pre-processamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.7 Comparar Modelo de Decisao . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.8 Mover Cursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5 Analise e Resultados 26
5.1 Detalhes dos Testes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.2 Testes e Analises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6 Conclusao 31
Referencias 33
Apendices 35
ii
A Codigo Fonte 36
A.1 Classe eyeMouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
iii
Lista de Figuras
3.1 Representacao de uma Imagem digital, origem dos eixos em uma imagem
e a representacao de um ponto. . . . . . . . . . . . . . . . . . . . . . . . . 6
3.2 Relacao entre as areas de utilizacao de imagens. . . . . . . . . . . . . . . . 7
3.3 Passos de um sistema de Visao Computacional [Junior, 2009]. . . . . . . . 8
3.4 Dispositivos utilizados para aquisicao de imagem [Junior, 2009]. . . . . . . 9
3.5 Exemplo utilizacao de filtros de pre-processamento de imagem. . . . . . . . 9
3.6 Exemplo de extracao de borda e contorno. . . . . . . . . . . . . . . . . . . 10
3.7 Exemplo de segmentacao de imagem [Junior, 2009]. . . . . . . . . . . . . . 10
3.8 Exemplo de uma representacao [Junior, 2009]. . . . . . . . . . . . . . . . . 10
3.9 Exemplo de reconhecimento das maos para execucao de uma determinada
musica [Junior, 2009]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.10 Exemplos de calculos com imagem integral [Viola e Jones, 2001]. . . . . . . 12
3.11 Caracterısticas Haar-like [Viola e Jones, 2001]. . . . . . . . . . . . . . . . . 13
3.12 Exemplo de calculo de um elemento de caracterıstica Haar-like. . . . . . . 13
3.13 Caracterısticas Haar-like selecionadas pelo AdaBoost [Santos, 2008]. . . . . 14
3.14 Exemplo do classificador em cascata [Ma, 2007]. . . . . . . . . . . . . . . . 15
4.1 Passos de execucao do prototipo proposto. . . . . . . . . . . . . . . . . . . 17
4.2 Exemplos de posicoes do usuario em frente a webcam. . . . . . . . . . . . . 19
4.3 Pontos na tela onde o usuario tem que olhar, tanto para a criacao dos
modelos quanto para o funcionamento do prototipo. . . . . . . . . . . . . . 19
4.4 Modelos de decisao: Imagens capturadas do usuario olhando para cada
regiao no monitor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.5 Parte da codificacao do arquivo classificador no formato XML. . . . . . . . 20
4.6 Exemplo de criacao de classificador e utilizacao do metodo de busca Haar
de faces em uma imagem. . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.7 Regiao do par de olhos encontrados delimitado pelo retangulo vermelho. . . 22
4.8 Histogramas referentes a quatro tipos basicos de imagens [Gonzalez e Woods, 2000]. 23
iv
4.9 Aplicacao de Tecnicas de processamento de Imagens, temos respectiva-
mente a imagem colorida, a mesma em escala de cinza e apos a equalizacao
do histograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.10 Imagem sendo comparada com os modelos de decisao carregados em memoria 25
5.1 Imagem obtida durante a aplicacao do primeiro teste. . . . . . . . . . . . . 27
5.2 Imagem obtida durante a aplicacao do segundo teste. . . . . . . . . . . . . 28
5.3 Imagem obtida durante a aplicacao do terceiro teste. . . . . . . . . . . . . 29
v
Lista de Tabelas
4.1 Resultado da comparacao da imagem obtida na webcam com os modelos
de decisao conforme a Figura 4.10 . . . . . . . . . . . . . . . . . . . . . . . 25
5.1 Resultado referente ao primeiro teste. . . . . . . . . . . . . . . . . . . . . . 28
5.2 Resultado referente ao segundo teste. . . . . . . . . . . . . . . . . . . . . . 29
5.3 Resultado referente ao terceiro teste. . . . . . . . . . . . . . . . . . . . . . 30
vi
Lista de Siglas
FPS Frames Por Segundo
LED Light-Emitting Diode
OpenCV Open Source Computer Vision
PDI Processamento Digital de Imagens
RAM Random Access Memory
SSR Six Segmented Rectangular
SVM Support Vector Machines
XML eXtensible Markup Language
vii
Capıtulo 1
Introducao
Atualmente o computador e a forma de comunicacao mais utilizada no mundo, ofe-
recendo ferramentas cada dia mais presente na comunicacao. Sendo utilizados e-mails,
foruns de discussao, mensageiros eletronicos e outros. A vantagem dos recursos compu-
tacionais para a comunicacao e a facilidade ao acesso a informacao e a integracao entre
pessoas do mundo inteiro, seja de forma para o convıvio social ou um meio para relacoes
comerciais [Martins, ]. Infelizmente uma parcela da populacao fica restringida ao acesso
da tecnologia por nao existir um mecanismo de interacao com o mundo ao seu redor que
se encaixe com sua limitacao fısica.
No Brasil existem mais de 24,5 milhoes de pessoas com algum tipo de necessidade
especial, incluindo fısica e mental. Isso representa 14,5% da populacao no ano 2000
[IBGE, 2000]. No mundo ja existem diversas tecnologias com a finalidade de promover
uma inclusao social para as pessoas com necessidades especiais, possibilitando uma maior
acessibilidade a elas. Como exemplos, podem ser citadas adaptacoes em estruturas fısicas
de edifıcios e ruas para facilitar o deslocamento para os cadeirantes, produtos com texto
em braile para deficientes visuais, veıculos adaptados, etc. Ambos os exemplos citados,
sao alguns dos diversos utensılios, adaptacoes, dispositivos e equipamentos criados visando
facilitar a realizacao de algumas tarefas diarias e proporcionar uma vida mais produtiva
e feliz, em casa, na escola ou no trabalho [Rocha e Couto, 2008].
No uso dos computadores a historia nao e diferente, para casos de deficiencia fısica
mais complexa, as tarefas mais simples, como uso do mouse e teclado se tornam difıceis e
limitadas. Pessoas com tetraplegia ou problemas motores nos membros superiores ficam
impossibilitadas do uso dos mesmos. Para tentar contornar essas limitacoes, diversos
meios, sejam por softwares ou hardwares especiais foram criados e/ou adaptados para
possibilitar interacao destes usuarios com o computador [Rocha e Couto, 2008].
O avanco das tecnicas de processamento digital de imagens, estao possibilitando mais
qualidade, melhoramento nas imagens, equipamentos mais avancados e viaveis, conse-
quentemente novas solucoes estao surgindo para possibilitar o acesso das pessoas de-
1
ficientes no meio computacional, onde estas solucoes estao conseguindo ajudar na in-
teracao destes usuarios. Um exemplo disso sao as tecnicas de Processamento Digital
de Imagens (PDI) aplicadas nos tons das imagens, melhorando o entendimento de um
usuario com dificuldades de distinguir ou perceber as diferencas entre as cores (dalto-
nismo) [Moreira e Santos, 2009].
Com novos avancos e pesquisas na area de PDI, o termo visao computacional surge
como um conjunto de tecnicas possibilitando um programa extrair dados e interpretar
as caracterısticas relevantes em uma imagem possibilitando que um sistema ou o com-
putador extraia as informacoes que foi pre-determinado. A ideia central dessa tecnica
e simular a visao humana no meio computacional baseando-se como o homem conse-
gue distinguir um objeto ou uma caracterıstica importante em uma determinada imagem
[Nascimento, 2009].
Com a aplicacao das tecnicas de PDI e Visao Computacional, espera-se neste trabalho
conseguir por meio do uso de uma simples webcam do usuario, desenvolver um prototipo
que identifique nas imagens obtidas em tempo real o rosto do mesmo, caracterısticas e
dados relevantes para obter a localizacao dos olhos e saber para qual a direcao que o olho
esta apontando na tela, com intuito de movimentar o cursor do mouse.
Muitos detalhes vao ser relevantes para que este estudo obtenha um resultado satis-
fatorio nos testes finais, onde diversas situacoes poderao influenciar no comportamento
do prototipo, sendo alguns deles: o ambiente em que o usuario se encontra (iluminacao),
posicionamento do usuario em frente a camera, se o mesmo usa oculos, computadores com
poder de processamento considerados fracos, baixa qualidade da webcam, etc.
Portanto, seria possıvel a criacao do prototipo resultante deste estudo visando o con-
trole do cursor do mouse atraves da mudanca da posicao dos olhos do usuario de forma
eficaz e financeiramente acessıvel, sem a necessidade da criacao de um hardware especıfico
ou investimentos em uma webcam com uma resolucao maior? E o que este estudo pretende
responder.
A presente monografia esta dividida nos capıtulos a seguir:
Capıtulo 1: Introducao
Texto introdutorio sobre a visao inicial do trabalho abordado, uma ideia do prototipo
a ser desenvolvido, com enfase no problema, objetivos e metas.
Capıtulo 2: Estado da Arte
Aborda varios trabalhos semelhantes ao proposto neste trabalho, citando as principais
caracterısticas abordadas, as tecnicas utilizadas, etc.
Capıtulo 3: Fundamentacao Teorica
2
Enfase na parte teorica por tras do trabalho proposto, reunindo a maioria dos concei-
tos cientıficos sobre processamento Digital de Imagens e Visao Computacional.
Capıtulo 4: Desenvolvimento
Enfase completa do desenvolvimento do prototipo. Descricao detalhada do algoritmo
e das tecnicas empregadas neste trabalho.
Capıtulo 5: Analise e Resultados
Neste capıtulo e abordada toda a analise referente a execucao de testes e resultados
alcancados no prototipo.
Capıtulo 6: Conclusao
Conclusao do trabalho proposto e abordagem de trabalhos futuros.
3
Capıtulo 2
Estado da Arte
Nesta secao sao apresentados alguns estudos semelhantes ao abordado aqui. Demons-
trando ao leitor que a area citada neste trabalho trata-se de fontes de interesse de estudos
cientıficos.
Diversos trabalhos de processamento de imagens e visao computacional estao focados
na extracao de caracterısticas faciais. No trabalho apresentado em [Carvalho et al., 2005]
o objetivo e detectar as informacoes do olho humano por meio de suas caracterısticas
geometricas em uma imagem estatica. Neste trabalho, tecnicas de processamento foram
utilizadas para possibilitar a extracao de bordas revelando a circunferencia que caracteriza
a ıris, posteriormente o centro da mesma.
E apresentado em [Moreira e Santos, 2009], o desenvolvimento de um software com
a mesma finalidade proposta neste trabalho. Os autores utilizaram alguns conceitos de
processamento de imagens digitais e visao computacional importantes para chegar ao
resultado esperado.
A captacao para a extracao e interpretacao dos dados essenciais, se deu com o uso
de uma webcam localizada na parte central e superior do monitor possibilitando captura
total da face do usuario. O desenvolvimento das tecnicas de processamento das imagens e
toda feita na linguagem de programacao Matlab que comporta diversos recursos e tecnicas
para o processamento de imagens.
O funcionamento geral e descrito com os seguintes passos: localizacao da regiao dos
olhos atraves da comparacao de template, neste caso o template e uma imagem de um
olho que serve como modelo para a busca em imagem e posteriormente, localizacao da
pupila comparando com um template padrao da pupila. Com a regiao da pupila localizada
na imagem, o ultimo passo e obter a coordenada cartesiana (x,y) referente ao centro da
pupila, possibilitando associar esta posicao em uma coordenada no monitor, toda mudanca
da posicao central da pupila reflete na posicao do cursor do mouse no monitor.
Outro trabalho semelhante, apresentado em [Peixoto et al., 2008], demonstra a com-
paracao de algumas tecnicas existentes para localizacao da regiao dos olhos em uma
4
imagem digitalizada. A metodologia deste trabalho consiste no uso de tres tipos de com-
binacoes entre redes neurais artificiais e algoritmos de aprendizado de maquinas.
No treinamento da rede foram utilizadas imagens de faces possibilitando maior fi-
delidade do sistema de reconhecimento. Cada imagem foi devidamente normalizada e
distribuıda como entrada de treinamento para futuras comparacoes para a rede. A saıda
foi previamente definida com apenas quatro posicoes, sao elas: esquerda, direita, em baixo
e em cima; na qual se refere a direcao que o cursor do mouse tem que se mover.
A tecnica de rastreamento do olhar usando redes neurais tambem e proposto em
[Nascimento, 2009] que tem como caracterıstica principal o uso de um oculos especial para
utilizacao do usuario, que tem acoplado uma webcam que utiliza iluminacao de 6 LEDs
infravermelhos cujo comprimento de onda melhora a visualizacao da ıris. Este dispositivo
foi proposto no trabalho [Vieira, 2009] e desenvolvido em 2008 [Vieira e Fontana, 2008].
O trabalho proposto em [Restom, 2006] propoe o reconhecimento das caracterısticas
faciais (ponta do nariz e olhos), que sao detectados e monitorados em tempo real para
usar suas acoes como eventos de mouse. As coordenadas e movimento da ponta do nariz
no vıdeo sao interpretados para tornar as coordenadas e movimento do ponteiro do mouse
na tela do usuario.
O piscar dos dois olhos sao interpretados como eventos de click do botao do mouse. O
unico dispositivo externo que o usuario precisa e de uma webcam que alimenta o programa
com as imagens de vıdeo. O trabalho e desenvolvido na linguagem de programacao Java
que implementa o filtro SSR (Six Segmented Rectangular) e o classificador SVM (Support
Vector Machines) que trabalha com aprendizado de maquina a partir de imagens de
exemplo, ambas tecnicas sao utilizadas para encontrar a face e as caracterısticas faciais.
No proximo capıtulo sera abordada a parte teorica do trabalho proposto.
5
Capıtulo 3
Fundamentacao Teorica
3.1 Imagem Digital
A representacao de uma imagem digital se da por meio de uma matriz cujos ındices
de linhas e colunas identificam um determinado ponto na imagem. Essa representacao e
definida por uma funcao bidimensional f(x,y), onde x e y sao coordenadas espaciais na
imagem chamados ”pixels”, que corresponde ao valor do elemento e a intensidade ou nıvel
de cinza naquele ponto da matriz.
Uma imagem digital e em geral composta por uma quantidade finita de pixels, sendo
que cada um dos quais tem uma localizacao e um valor de intensidade especıfico. A Figura
3.1 abaixo, representa uma imagem digital, monocromatica, mostrando sua origem no
ponto (0,0) e o posicionamento dos eixos de coordenadas cartesianas.
Figura 3.1: Representacao de uma Imagem digital, origem dos eixos em uma imagem e a
representacao de um ponto.
O termo Processamento de Imagens Digitais e o estudo computacional sobre imagens
que se divide nas seguintes subareas; de acordo com o foco realizado sobre a imagem,
6
sendo elas a computacao grafica, processamento de imagens e visao computacional, cada
uma destas subareas contem aspectos particulares que as diferenciam das demais.
A computacao grafica e a subarea que procura a representacao de dados e informacao
atraves de uma visualizacao grafica. A area de processamento de imagem tem como carac-
terıstica a entrada de uma determinada imagem em seu processo, que apos ser processada
tem como resultado de saıda uma nova imagem.
A visao computacional utiliza uma imagem como ponto de partida para a identificacao,
medicao ou quantificacao de objetos na mesma. A subdivisao das areas comentadas
anteriormente e representada conforme a Figura 3.2 que tambem mostra a subarea de
processamento de dados; a mesma tem como caracterıstica a entrada de uma massa de
dados, a mesma e processada e tem como retorno informacoes relevantes para resolucao
de um determinado problema. Mesmo com esta divisao, nada impede que as subareas se
relacione entre si para alcancar o objetivo desejado [Souza, 2008].
Figura 3.2: Relacao entre as areas de utilizacao de imagens.
3.2 Visao Computacional
Na visao computacional, os algoritmos mais sofisticados vem sendo usados em aplicacoes
de diversas areas e finalidades, tais como rastreamento de objetos, deteccao de movimen-
tos, reconhecimento de gestos e faces, dentre outras. Um exemplo de aplicacao seria um
sistema de reconhecimento de caracteres, que poderia ser utilizado para obter a informacao
automaticamente da placa de um motorista multado; outro exemplo de aplicacao seria
um sistema de vigilancia capaz de identificar o movimento de uma pessoa e movimentar
a camera para acompanha-la de maneira automatica [Leao et al., 2011].
Em geral, as aplicacoes de Visao Computacional sao estruturadas conforme ilustrado
7
na Figura 3.3. Nesta figura, cada retangulo representa uma etapa do processo de extracao
e transformacao de imagens em dados.
Figura 3.3: Passos de um sistema de Visao Computacional [Junior, 2009].
A primeira etapa corresponde a aquisicao da imagem, isto e, captar uma imagem
digital atraves de um dispositivo de captacao, por exemplo, uma camera, scanner, lei-
tor biometrico, etc. Essa imagem capturada e tratada durante o pre-processamento a
fim de prepara-la para a etapa seguinte, as melhorias depende do problema relacionado,
as tecnicas podem ser para retirar ruıdos, realcar o contraste, entre outras; visando au-
mentar o sucesso da extracao de caracterısticas importantes para a solucao do problema.
Durante a deteccao e segmentacao sao selecionadas as regioes das imagens que podem
ter informacoes relevantes, um exemplo seria um sistema de reconhecimento de caracte-
res, onde as informacoes relevantes sao os caracteres disponıveis na imagem. Na repre-
sentacao, as regioes segmentadas na etapa anterior sao preparadas para o ultimo passo,
a interpretacao. Nesta etapa, finalmente e retido as informacoes desejadas da imagem.
Logo abaixo ha a descricao mais detalhada dos passos citados acima.
Aquisicao: Como visto em [Gonzalez e Woods, 2000] e [Jahne et al., 2002], este passo
permite a producao de uma imagem digital, sendo que a aquisicao esta ligada diretamente
ao processo de captura da imagem por um ou varios dispositivos de captura. O resultado
da aquisicao da imagem pode variar entre uma imagem bidimensional, tridimensional ou
ainda um vıdeo que e uma sequencia de imagens. O resultado da imagem depende dire-
tamente do dispositivo de captura. Na Figura 3.4 mostra alguns dispositivos comuns de
aquisicao de imagens.
Pre-processamento: De acordo com [Gonzalez e Woods, 2000], neste passo e utili-
zado tecnicas relevantes na visao computacional que sao aplicadas em imagens; visando
melhorar significativamente a qualidade e/ou realcar alguma caracterıstica presente na
imagem, assim deixa-la mais adequada para as proximas etapas. Tem como exemplo de
aplicacao de filtros em imagens: a reducao de ruıdos, o controle do nıvel de brilho ou con-
8
Figura 3.4: Dispositivos utilizados para aquisicao de imagem [Junior, 2009].
traste, entre outras aplicacoes. A seguir dois exemplos de aplicacao de filtros em imagem;
na Figura 3.5(a) temos a imagem original; enquanto na Figura 3.5(b) temos a mesma
imagem em escala de cinza, e por ultimo na Figura 3.5(c), temos a imagem em preto e
branco, tambem conhecida como imagem binaria.
Figura 3.5: Exemplo utilizacao de filtros de pre-processamento de imagem.
Extracao de caracterısticas: Este passo visa transformar os dados de entrada da
imagem em um conjunto de caracterısticas relevantes para alcancar o objetivo esperado,
como exemplos, a deteccao de textura, deteccao de formas geometricas, deteccao de bor-
das, cantos, pontos ou movimento; como e mostrado na Figura 3.6(a), temos uma imagem
comum e na Figura 3.6(b) temos a extracao das bordas da mesma, deixando evidente a
presenca das formas geometricas presentes nos edifıcios [Jahne e Haußecker, 2000].
Deteccao e segmentacao: Em [Gonzalez e Woods, 2000], o autor cita que em algum
ponto do processo, uma decisao e feita sobre a importancia de uma ou mais regioes da
imagem. Neste passo visa dividir a imagens em partes ou objetos para facilitar sua
analise, um exemplo pratico seria em um sistema de reconhecimento de caracteres, onde a
segmentacao extrairia os caracteres presentes na imagem. A Figura 3.7 ilustra um exemplo
de segmentacao. Temos na Figura 3.7(a) a imagem com o objeto a ser localizado, enquanto
na Figura 3.7(b) temos a imagem de fundo sem a existencia do mesmo, por ultimo na
Figura 3.7(c), temos a identificacao do objeto de interesse na imagem.
9
Figura 3.6: Exemplo de extracao de borda e contorno.
Figura 3.7: Exemplo de segmentacao de imagem [Junior, 2009].
Representacao: No passo de representacao e uma parte da solucao para transformar
os dados da imagem em uma forma adequada de dados, agrupando-os e armazenando
os diversos padroes presentes no objeto [Jahne e Haußecker, 2000]. Sao enfatizadas as
caracterısticas de interesse para o passo seguinte. No exemplo de reconhecimento de ca-
racteres, buracos e concavidades sao caracterısticas importantes que ajudam na distincao
de algumas letras [Gonzalez e Woods, 2000]. Outro exemplo de representacao pode ser
visto na Figura 3.8; na Figura 3.8(a) temos a imagem sem a presenca do objeto. Na Figura
3.8(b) temos a presenca do objeto na imagem; a localizacao atraves da segmentacao pode
ser vista na Figura 3.8(c). No ultimo passo (Figura 3.8(d)), a imagem e transformada
para preto e branco contendo apenas o contorno do objeto, neste caso o contorno poderia
representar que o objeto esta em movimento.
Figura 3.8: Exemplo de uma representacao [Junior, 2009].
10
Interpretacao: Por fim, no passo de interpretacao permite a atribuicao de signifi-
cado ao conjunto de objetos reconhecidos na imagem [Gonzalez e Woods, 2000]. Geral-
mente neste passo, a entrada e uma quantidade pequena de dados provinda dos passos
anteriores, efetuando uma classificacao dos objetos detectados em diferentes categorias
[Jahne e Haußecker, 2000]. No exemplo de reconhecimento de caracteres, este passo seria
responsavel por identificar que um determinado conjunto de objetos, onde neste caso,
cinco numeros seguidos por um hıfen e outros tres numeros representa um codigo de en-
dereco postal, porem outros conjuntos podem ter diversos significados. Outro exemplo na
Figura 3.9(a) mostra uma pessoa simulando estar tocando um instrumento, enquanto na
Figura 3.9(b) o sistema identifica e interpreta o posicionamento das maos, resultando na
execucao de uma musica (Figura 3.9(c)).
Figura 3.9: Exemplo de reconhecimento das maos para execucao de uma determinada
musica [Junior, 2009].
3.3 Busca por Objetos
No trabalho de [Fu e Mui, 1981], na visao computacional o primeiro passo em analise
de imagens e a segmentacao da imagem; como foi discutido anteriormente aplicacao de
tecnicas de segmentacao e importante para medicao, quantificacao ou identificacao de
objetos em uma cena. As tecnicas de segmentacao de imagens podem ser baseadas nas
caracterısticas de um determinado pixel como cor e intensidade; o mesmo e capaz de
identificar pontos, linhas, bordas e combina-los.
De acordo com [Carvalho et al., 2005], a deteccao de faces em uma imagem, pode
ser caracterizada pela utilizacao de tecnicas de extracao de contorno para localizacao
e identificacao de formas geometricas caracterısticas de um rosto humano, variacoes de
cores e deteccao de determinadas caracterısticas faciais, como sobrancelhas, orelhas, olho,
boca, etc.
Neste trabalho foi utilizo a tecnica de segmentacao proposta por [Viola e Jones, 2001].
Este metodo consiste no aprendizado a partir de uma entrada de um conjunto de imagens
11
que classifica o objeto a ser localizado. Como sugerido em [Viola et al., 2005], essa tecnica
pode ser usado para detectar faces humanas ou qualquer outro objeto dependendo do
treinamento inicial. Nos trabalhos apresentados em [Castrillon-Santana et al., 2008] e
[Lienhart e Maydt, 2002] e deixado bem claro a eficiencia na deteccao de faces do metodo
proposto acima.
O algoritmo de Viola-Jones e composto de tres partes distintas que o distingue de
outros, elas sao: (1) a criacao da imagem integral, (2) a utilizacao do algoritmo Adaboost
para classificacao utilizando caracterısticas Haar-like e (3) a criacao de uma estrutura em
arvore, chamada classificadores em cascata [Oliveira, 2008].
3.3.1 Imagem Integral
De acordo com [Santos, 2008], o metodo da imagem integral foi abordado para ser
possıvel localizar de maneira eficiente a presenca ou nao de uma caracterıstica Haar-like
em diversas localizacoes (sub-janelas) na imagem em que se quer localizar um objeto. Esta
tecnica corresponde ao somatorio dos valores da intensidade de todos os pixels localizados
acima e a esquerda do pixel em questao.
Na Figura 3.10 temos o exemplo de quatro sub-janelas em uma imagem qualquer,
onde o valor da imagem integral na posicao 1 e o resultado da soma da intensidade dos
pixels no retangulo A. O valor da posicao 2 e igual a soma de A+B, para a posicao 3 e
A+C e por ultimo a posicao 4, o valor e a soma de A+B+C+D. Para obter os valores dos
pixels do retangulo D o resultado e dado por 4+1-(2+3) [Santos, 2008]. Para descobrir
o valor medio desta regiao, basta dividir o valor do somatorio da intensidade dos pixels
pela quantidade dos mesmos. Os processos seguintes serao realizados com base no valor
da imagem integral como citado acima.
Figura 3.10: Exemplos de calculos com imagem integral [Viola e Jones, 2001].
Na Figura 3.11 mostra as caracterısticas do tipo Haar-like, cada uma contem retangulos
claros e escuros que representam as regioes da caracterıstica. O resultado referente a soma
12
dos valores de intensidade dos pixels entre as regioes claras sao subtraıdas pela soma das
regioes escuras (Figura 3.12(a)); este valor encontrado representa a caracterıstica deter-
minada para aquela regiao na imagem (Figura 3.12(b)). Esta tecnica e eficiente para
avaliar se existe ou nao uma caracterıstica Haar-like em uma determinada posicao na
imagem [Araujo, 2010].
Figura 3.11: Caracterısticas Haar-like [Viola e Jones, 2001].
Figura 3.12: Exemplo de calculo de um elemento de caracterıstica Haar-like.
3.3.2 Algoritmo AdaBoost
De acordo com [Kuncheva, 2004] o algoritmo de aprendizado AdaBoost e uma variacao
do Adaptive Boosting. O mesmo define quais das caracterısticas Haar-like serao utilizadas
e quais os valores dos limiares para cada uma das caracterısticas.
De acordo com [Viola e Jones, 2001] um bom classificador nao necessita de uma grande
quantidade de caracterısticas Haar-like, o mesmo pode ser obtido pela combinacao de um
numero pequeno das mesmas; tornando um dos principais problemas, escolher qual das
caracterısticas e mais indicada para alcancar o resultado desejado.
13
Nas Figuras 3.13(a) e 3.13(b) o algoritmo escolheu as duas caracterısticas Haar-like
para identificacao da face na imagem positiva de entrada (Figura 3.13(c)). Nas Figuras
3.13(d) e 3.13(e) mostra a sobreposicao das caracterısticas Haar-like na mesma imagem
de entrada.
Na Figura 3.13(d) e possıvel perceber que a caracterıstica selecionada foi a de dois
retangulos na altura dos olhos e do nariz, neste caso o algoritmo percebeu a diferenca de
luminosidade na imagem entre o nariz e a regiao dos olhos. Enquanto na Figura 3.13(e)
a diferenca de luminosidade esta entre a regiao dos olhos e a testa [Santos, 2008].
Figura 3.13: Caracterısticas Haar-like selecionadas pelo AdaBoost [Santos, 2008].
Para que a identificacao seja executada rapidamente, e necessario ter uma sequen-
cia de classificadores em ordem crescente, onde os primeiros classificadores contem uma
quantidade de caracterıstica muito menor que os ultimos, ou seja, o primeiro classificador
ja descarta a maioria das sub-janelas que nao contem o objeto com muito pouco pro-
cessamento, pois realiza o calculo para apenas duas caracterısticas Haar-Like; segundo
[Viola e Jones, 2001] esta operacao executa apenas 60 instrucoes de um microprocessa-
dor. Os proximos classificadores executam o mesmo procedimento citados acima, porem
utilizando uma quantidade maior de caracterısticas Haar-like.
A medida que a sub-janela vai avancando, outros classificadores mais complexos sao
aplicados, consequentemente mais processamento e necessario, esta estrutura de formacao
hierarquica dos classificadores e conhecida como arvore de decisao em cascata, se a sub-
janela passa por todos os classificadores da arvore, a mesma e reconhecida como face
[Santos, 2008].
14
3.3.3 Arvore de Decisao
Na etapa de aprendizado do AdaBoost, o algoritmo e responsavel por escolher as
caracterısticas Haar-like para cada classificador e treina-lo da melhor maneira possıvel. O
resultado do processo de aprendizagem sao os classificadores fracos, cada um contendo um
limiar e caracterısticas Haar-like; todos sao combinados, resultando em um classificador
forte visando minimizar a ocorrencia de falsos positivos durante a busca [Araujo, 2010].
A Figura 3.14 mostra os passos atraves dos classificadores, onde a sub-janela pode ser
rejeitada por um dos classificadores ou no fim ser considerada como o objeto localizado
na imagem.
A aplicacao do treinamento baseado em meta heurıstica AdaBoost, os ultimos classi-
ficadores sao treinados com as amostras que os primeiros nao conseguiram identificar de
maneira correta, ou seja, os falsos positivos que passaram pelos classificadores iniciais nao
irao passar pelos proximos classificadores [Santos, 2008]. Esta abordagem demonstra a
eficiencia na localizacao de um objeto em uma imagem.
No proximo capıtulo aborda a descricao detalhada do prototipo deste trabalho.
Figura 3.14: Exemplo do classificador em cascata [Ma, 2007].
15
Capıtulo 4
Desenvolvimento
4.1 Abordagem Inicial
Neste capıtulo serao abordados todos os passos realizados para se chegar ao resultado
esperado deste trabalho. Para o desenvolvimento foi utilizado a linguagem de programacao
C++ por ter suporte com a biblioteca OpenCV (Open Source Computer Vision) escrita
em C e C++ otimizada para processadores multicores ; com suporte aos sistemas ope-
racionais Unix e Windows. A biblioteca contem interface de desenvolvimento para as
linguagens de programacao C, C++ e Python; a mesma contem mais de 2000 tecnicas
robustas e eficientes voltadas para computacao aplicado nas areas de processamento de
imagens, visao computacional e com um forte foco em aplicacoes com imagens em tempo
real [Bradski e Kaehler, 2008].
O hardware envolvido no desenvolvimento e testes do prototipo foi um notebook, com
tela de 15,4 polegadas, processador Intel Core i3 2,26GHz com 3GB de memoria RAM, o
sistema operacional e o Windows 7 Ultimate 64 Bits. Para a programacao foi utilizada a
plataforma de desenvolvimento Microsoft Visual Studio C++ 2010 Express Edition que e
disponibilizada gratuitamente no site do software e e de simples configuracao a integracao
da biblioteca OpenCV.
Para atender a proposta deste trabalho, a webcam utilizada e que vem integrada no
notebook, uma webcam com resolucao baixa de 640 X 480 pixels. Esta decisao visa o
funcionamento do prototipo sem a necessidade de criacao ou compra de um hardware
especial como acontece em [Nascimento, 2009] que utiliza uma webcam com iluminacao
especial acoplado em um oculos para identificacao da ıris.
Com esta escolha, a mesma influenciou na precisao final do prototipo, pois a ideia
inicial era o desenvolvimento de um prototipo que rastreasse as coordenadas do centro da
pupila do olho do usuario, fazendo uma referencia desta coordenada com uma coordenada
qualquer no monitor, com isso para qualquer regiao que o usuario olhasse na tela o mouse
16
iria se mover para a mesma.
A aplicacao da ideia inicial nao foi possıvel pelo fato da webcam nao ter resolucao e
qualidade suficiente para extracao das borda do olho e o cırculo da ıris para a localizacao
do centro da pupila. A abordagem deste trabalho foca com a comparacao de imagens da
regiao dos olhos do usuario, descrita com mais detalhes neste capıtulo. A mesma nao e
tao precisa quanto a primeira, mas bons resultados com os recursos de hardware presentes
foram alcancados.
Os passos de execucao do prototipo podem ser observados na Figura 4.1, onde cada
retangulo representa um passo importante para obter o resultado esperado, sendo eles
”Carregar Modelos”, ”Obter Imagem”, ”Localizar Olhos”, ”Pre-processamento”, ”Com-
parar Modelo de Decisao”e por ultimo ”Mover Cursor”.
Figura 4.1: Passos de execucao do prototipo proposto.
Carregar Modelos: Neste passo e carregado em memoria o classificador XML (Ex-
tensible Markup Language) para localizacao da regiao dos olhos e as imagens para com-
paracao em tempo de execucao, estas imagens sao chamadas de ”Modelos de Decisao”.
Obter Imagem: Neste passo e responsavel por obter o fluxo de imagens do usuario
captadas pela webcam.
Localizar Olhos: Em cada imagem captada pela webcam no passo anterior e feita a
busca para identificacao da regiao dos olhos do usuario.
Pre-processamento: Neste passo e efetuado o tratamento na imagem da regiao
dos olhos obtida do passo anterior, este tratamento tem como objetivo realcar as carac-
17
terısticas presente na imagem deixando-a mais adequada para o proximo passo.
Comparar Modelo de Decisao: Com a imagem pre-processada o proximo passo e
compara-la com todas as imagens em memoria (Modelos de Decisao) visando descobrir
em qual direcao o usuario esta focando o olhar. Esta comparacao leva em conta com qual
dos modelos a imagem mais se parece.
Mover Cursor: No ultimo passo e movimentado o cursor do mouse para a direcao
da regiao resultante do passo anterior.
Apos a movimentacao do cursor do mouse, o prototipo pode ter dois possıveis estados,
onde o prototipo teria sua execucao finalizada ou voltar para o passo ”Obter Imagem”.
Caso o prototipo nao seja finalizado sera obtida a proxima imagem do fluxo da webcam
sendo aplicado todos os passos ate a nova movimentacao do mouse. Todos os passos acima
serao detalhados mais adiante neste capıtulo.
4.2 Restricoes
Antes de descrever todos os passos do prototipo e necessario que algumas restricoes
sejam obedecidas, tais como manter a cabeca na posicao reta, com toda a face do usuario
de frente, centralizada e visıvel para captura da webcam, visando o processamento correto
da regiao dos olhos.
A Figura 4.2 mostra alguns exemplos de posicoes do usuario em frente a webcam, note
que o unico posicionamento correto e da Figura 4.2(a); enquanto na Figura 4.2(b) mostra
a posicao do usuario mais a esquerda na imagem, nesta posicao o olhar do usuario nao tem
deslocamento da ıris para a esquerda quando o mesmo olhando nesta regiao do monitor,
ja nos demais exemplos se torna impossıvel da localizacao da regiao dos olhos necessaria
para o funcionamento correto do prototipo.
4.3 Carregar Modelos
No inıcio da execucao do prototipo ocorre com o carregamento em memoria das ima-
gens dos modelos de decisao e do classificador XML que serao abordados com mais detalhes
mais adiante neste capıtulo. Os modelos de decisao sao imagens da regiao dos olhos ja
processadas e criadas pelo prototipo a partir de imagens do usuario. As mesmas servirao
de modelos para comparacao com a imagem da regiao dos olhos do usuario capturadas
em tempo real pela webcam.
18
Figura 4.2: Exemplos de posicoes do usuario em frente a webcam.
Para a criacao dos modelos de decisao, o usuario devera olhar em alguns pontos da
tela do computador. As imagens modelos da regiao dos olhos do usuario sao processadas,
salvas em um diretorio do prototipo e sao carregadas em memoria uma unica vez no inıcio
a cada execucao do mesmo. Os modelos de decisao sao divididos em cinco classificacoes
das regioes no monitor, com elas o prototipo podera identificar para qual das cinco regioes
o usuario esta olhando, sendo elas: 1 - Em cima, 2 - Centro, 3 - Em Baixo, 4 -Direita e
5 - Esquerda, conforme representado na Figura 4.3 os pontos. Na Figura 4.4 demonstra
as imagens adotadas como modelo comparativo para determinar qual regiao o usuario
esta olhando no monitor. Para cada regiao e captura uma imagem da regiao dos olhos do
usuario, a mesma e pre-processada e salva pelo prototipo.
Figura 4.3: Pontos na tela onde o usuario tem que olhar, tanto para a criacao dos modelos
quanto para o funcionamento do prototipo.
19
Figura 4.4: Modelos de decisao: Imagens capturadas do usuario olhando para cada regiao
no monitor.
Tambem e neste passo que e efetuado carregamento do arquivo classificador no for-
mato XML, o mesmo contem os modelos de classificacao de reconhecimento da regiao
dos olhos baseado na tecnica de segmentacao para busca em tempo real proposta em
[Viola e Jones, 2001], na Figura 4.5 representa uma pequena parte da codificacao deste
classificador mostrando descricao dos retangulos presentes na caracterıstica e dos valores
obtidos apos o treinamento em uma imagem positiva. Uma vantagem desta tecnica de
busca e para alterar o objeto a ser localizado basta carregar o classificador referente ao
mesmo.
A OpenCV contem diversos classificadores prontos para serem utilizados em aplicacoes,
como busca de faces e caracterısticas faciais tais como par de olhos, sobrancelha, nariz,
boca, olho esquerdo, olho direito, etc. Neste trabalho foi utilizado o classificador de busca
para localizacao da regiao na imagem que contenha o par de olhos, este classificador
contem 15000 amostras negativas e 7000 amostras positivas de pares de olhos detectados,
de tamanho 45x11 pixels cada [Castrillon Santana et al., 2007]. Com essa classificador
e possıvel a localizacao do par de olhos disponıvel em qualquer face em uma imagem
estatica ou em tempo real [Bradski e Kaehler, 2008].
Figura 4.5: Parte da codificacao do arquivo classificador no formato XML.
20
4.4 Obter Imagem
Com os modelos carregados em memoria no passo anterior, agora e obter o fluxo de
vıdeo da webcam. Este passo e responsavel pela entrada da imagem do usuario para
alcancar o resultado proposto.
O fluxo de vıdeo da webcam processado pelo prototipo e cerca de 30 FPS (Frames
Por Segundo) ou seja 30 imagens capturadas do usuario, onde cada uma vai passar pe-
los demais passos para a movimentacao do cursor do mouse. No trabalho proposto em
[Jackson, 1995], este valor obtido (30 FPS ), para a industria, e o mınimo para poder de-
terminar sendo um fluxo de vıdeo com qualidade. Esta informacao e de suma importancia
para a resposta do movimento do cursor do mouse, nao sendo perceptıvel qualquer atraso
em todos os passos do processamento da informacao, desde a captura da image ate a
movimentacao do cursor.
4.5 Localizar Olhos
Para o processo de reconhecimento da regiao dos olhos em imagens utilizada neste
trabalho, e uma tecnica de aprendizado de maquina baseada nas caracterısticas Haar-like
vista na secao 3.3. Esta foi proposta por [Viola e Jones, 2001] e em [Viola et al., 2005]
sendo aperfeicoada por Rainer Lienhart e faz parte das tecnicas de busca disponıveis na
biblioteca OpenCV. A mesma e capaz de processar imagens em alta velocidade com altas
taxas de acertos; para sua utilizacao e necessario o classificador citado anteriormente com
as caracterısticas do objeto para busca do mesmo.
A abordagem de busca de [Viola e Jones, 2001] atraves das caracterısticas Haar-like
e muito interessante, esta abordagem codifica a existencia dos contrastes entre regioes
da imagem. O conjunto destas informacoes podem ser usadas codificando regioes de
contraste localizadas, por exemplo, em uma face humana. Este metodo de busca atraves
das caracterısticas comuns presentes no objeto visa tornar a deteccao em um processo
mais eficiente.
Para a utilizacao do metodo de deteccao e necessario a utilizacao do classificador
citado anteriormente. O classificador e obtido apos o treinamento com muitas imagens
do objeto a ser identificado em imagens, uma bola, um carro ou uma face por exemplo.
Essas imagens recebem a classificacao de Imagens Positivas. Sao utilizadas outras imagens
durante o treinamento, sendo imagens aleatorias que nao contenha o objeto em questao,
estas sao classificadas como Imagens Negativas [Viola e Jones, 2001]. A Figura 4.6 mostra
este processo descrito acima, onde na Figura 4.6(a) temos a representacao das ”Imagens
Positivas”e ”Imagens Negativas”, aplicando-as no metodo de treinamento disponıvel na
biblioteca OpenCV obteremos o classificador XML conforme a Figura 4.6(b). Aplicando
21
o metodo de busca em uma imagem qualquer utilizando este classificador (Figura 4.6(b)),
obteremos a localizacao de todas as faces na foto (Figura 4.6(c)).
Figura 4.6: Exemplo de criacao de classificador e utilizacao do metodo de busca Haar de
faces em uma imagem.
Como pode ser visto em [Castrillon-Santana et al., 2008] e [Junior, 2009] a aplicacao
desta tecnica acima e bastante eficiente. Na Figura 4.7 mostra a regiao dos olhos encon-
trado pelo metodo de classificacao Haar delimitada pelo retangulo vermelho. A aplicacao
no fluxo de vıdeo da webcam, retorna apenas a regiao dos olhos do usuario necessaria para
atingir o objetivo proposto, sendo o restante da imagem eliminado para evitar processa-
mento desnecessario que pode prejudicar o desempenho final.
Figura 4.7: Regiao do par de olhos encontrados delimitado pelo retangulo vermelho.
22
4.6 Pre-processamento
O proximo passo e de pre-processamento da imagem na regiao dos olhos retornado do
passo anterior. Esta etapa e de suma importancia nesta parte do prototipo, a imagem
captada e convertida de imagem colorida para imagem em escala de cinza, este proces-
samento e necessario para a aplicacao do proximo metodo de processamento visando a
melhora do contraste da imagem.
No trabalho de [Gonzalez e Woods, 2000] a representacao do contraste e uma medida
qualitativa e que esta relacionada com a distribuicao dos tons de cinza em uma imagem.
O histograma e a representacao grafica desta distribuicao dos nıveis de cinza de uma
imagem. A tecnica equalizacao de histograma tem como objetivo melhorar a qualidade
da imagem obtendo o melhor contraste da imagem capturada. Na Figura 4.8 tem a
representacao dos histogramas de quatro imagens basicas, sendo elas uma imagem escura
na Figura 4.8(a), uma imagem clara (Figura 4.8(b)), imagem de baixo contraste (Figura
4.8(c)) e a ultima, uma imagem de alto contraste (Figura 4.8(d)).
Figura 4.8: Histogramas referentes a quatro tipos basicos de imagens
[Gonzalez e Woods, 2000].
Esta tecnica melhora o contraste da imagem, resolvendo parcialmente a questao do
problema de variacao de luminosidade no ambiente, pois mesmo com uma mudanca sig-
nificativa na claridade, mais escuro ou mais claro, o resultado da equalizacao preserva as
caracterısticas importantes para o passo seguinte na execucao do prototipo.
A Figura 4.9 mostra a melhora na imagem apos aplicacao das tecnicas de processa-
mento de imagens, onde temos a imagem colorida a esquerda, ao centro a imagem em
23
escala de cinza e a direita a imagem apos a equalizacao de seu histograma.
Figura 4.9: Aplicacao de Tecnicas de processamento de Imagens, temos respectivamente
a imagem colorida, a mesma em escala de cinza e apos a equalizacao do histograma
4.7 Comparar Modelo de Decisao
Com a imagem processada, o proximo passo e a comparacao desta com os modelos
de decisao. Como visto na secao 4.3, os modelos de decisao sao imagens processadas
do usuario focando o olhar nos pontos determinados na regiao do monitor carregada em
memoria no inıcio da execucao do prototipo. A regiao dos olhos encontrada em cada frame
da webcam, e comparada apos o pre-processamento com todos os modelos de decisao. No
trabalho apresentado em [Bradski e Kaehler, 2008] descreve claramente a eficiencia do
metodo proposto para comparacao de duas imagens disponıvel na OpenCV; este processo
e feito pixel-a-pixel levando em conta a posicao do mesmo na imagem.
Para cada comparacao com o modelo, e retornado um valor referente a igualdade das
duas imagens, onde se o retorno for zero significa que as duas imagens sao identicas, caso
for diferente de zero, significa que as imagens nao sao iguais, quanto maior este valor
maior a diferenca entre mesmas.
Durante a execucao do prototipo a imagem pre-processada originada do passo anterior
e comparada com as imagens dos modelos de decisao. Este passo de comparacao visa
identificar com qual dos modelos em memoria a imagem obtida em tempo real mais se
parece. Esta identificacao e importante para determinar para qual sentido o cursor do
mouse tem que se mover. Na Figura 4.10 representa o metodo de comparacao citado
anteriormente, onde cada imagem do modelo de decisao que representa uma regiao do
monitor e comparada com a imagem da obtida pela webcam em tempo real.
O resultado deste processo comparativo entre as imagens dos modelos de decisao e a
imagem pre-processada da regiao dos olhos do usuario, obtida pela webcam, pode ser visto
na tabela 4.1. Com a identificacao do menor valor de comparacao na tabela, podemos
associar que o usuario esteja olhando para aquela determinada regiao no monitor, com
isso definimos para qual direcao o cursor do mouse devera se mover.
24
Figura 4.10: Imagem sendo comparada com os modelos de decisao carregados em memoria
Tabela 4.1: Resultado da comparacao da imagem obtida na webcam com os modelos de
decisao conforme a Figura 4.10
Resultado da Comparacao
Modelo Resultado
Imagem 1 6345
Imagem 2 4789
Imagem 3 5234
Imagem 4 7123
Imagem 5 2145
4.8 Mover Cursor
Com o resultado da comparacao com os modelos de decisao, agora e possıvel movi-
mentar o cursor do mouse para o lado que o usuario esta olhando, para cada regiao dos
olhos encontrada no frame, o prototipo pega no momento localizacao (x,y) do mouse no
monitor e altera os valores da posicao cartesiana; como exemplo, se for constatado que o
usuario estiver olhando para a regiao ”em cima”o valor de posicao Y tera seu valor decre-
mentado, por outro lado, se o usuario estiver olhando na regiao ”em baixo”do monitor,
o valor de posicao Y tera seu valor incrementado. O mesmo vale para quando o usuario
estiver olhando para a regiao ”esquerda”e para a regiao ”direita”do monitor; sendo para
esquerda o valor de posicao X sera decrementado e para a direita o valor de posicao X
sera incrementado. Ao contrario desses quatro pontos, o central nao modifica a posicao
do cursor, o mesmo serve apenas como referencia para os demais modelos de decisao. No
proximo capıtulo sera abordada a parte referente aos testes no prototipo e analises dos
resultados dos mesmos.
25
Capıtulo 5
Analise e Resultados
5.1 Detalhes dos Testes
Neste capıtulo serao abordados os testes no prototipo e a analise dos resultados. Para
execucao dos testes, foram levadas em consideracao algumas possıveis posicoes do usuario
durante o uso do mesmo, sendo que ao utilizar um computador as pessoas fazem diversos
movimentos com o tronco e com a cabeca, estes movimentos, mesmo que involuntarios
podem afetar diretamente o funcionamento do prototipo.
Este posicionamento do usuario em frente ao computador pode variar dependendo
do comportamento, postura, etc. Porem os testes foram aplicados nas possıveis posicoes
permitidas para o uso do prototipo respeitando as restricoes vistas na Secao 4.2. As
situacoes de postura em frente a webcam para os testes foram:
• Posicionamento Ideal. Neste caso o usuario se mantem em frente ao computador
na mesma posicao e distancia de quando foram gerados os modelos de decisao.
• Movimento da Face. Neste posicionamento, o usuario move a face para qualquer
lado, mas sempre permitindo a captacao da regiao dos olhos.
• Usuario Distante. No ultimo caso, o usuario se encontra mais afastado do com-
putador.
Os testes foram executados visando reconhecer os limites e o desempenho final do
prototipo. Para cada teste foi verificado a capacidade de reconhecimento do usuario
olhando nos pontos definidos para funcionamento do prototipo. Para cada um dos cinco
pontos foi executado 500 comparacoes com imagens em tempo real do usuario, totalizando
2500 comparacoes para da cada posicionamento.
Os resultados dos testes estao divididos em dois grupos distintos, um grupo referente
aos ”Acertos”e outro de ”Erros”. No grupo de acertos foram computadas as comparacoes
26
corretas, onde o usuario olhava para uma determinada regiao e o prototipo movimentou o
cursor do mouse para o sentido correto. No grupo de erros foi contabilizada a quantidade
de interpretacoes erradas do prototipo, onde o usuario olhava para uma determinada
regiao no monitor e o mesmo interpretava outra.
5.2 Testes e Analises
Como citado anteriormente, os testes levaram em consideracao tres possıveis posicio-
namento do usuario em frente ao computador. No primeiro teste e aplicado na posicao
ideal, onde o usuario mantem a face estatica e com uma distancia proxima ao monitor,
por volta de 30 a 40 centımetros; de preferencia similar quando foi calibrado no prototipo
na geracao dos modelos de decisao.
No segundo teste refere-se ao usuario movimentando a face para algum dos lados, mas
sendo possıvel a captacao da regiao dos olhos. No ultimo teste representa o usuario mais
afastado da tela, ou seja, com uma distancia maior da posicao da geracao dos modelos
que ocorre durante a calibracao.
• O primeiro teste foi com a cabeca na mesma distancia e posicao de criacao dos mo-
delos de decisao, como citado anteriormente, esta posicao e a ideal para a utilizacao
do prototipo, pois as imagens captadas tiveram um ındice de igualdade excelente.
Para este caso o resultado alcancado foi de 98,6% de acerto, a Figura 5.1 demonstra
o posicionamento correto sendo capturada durante dos testes. Na tabela 5.1 consta
os resultados deste teste para as direcoes consideradas.
Figura 5.1: Imagem obtida durante a aplicacao do primeiro teste.
27
Tabela 5.1: Resultado referente ao primeiro teste.
Resultado do Primeiro Teste
Total Imagens Acertos Erros % Acertos
Em Cima 500 489 11 97,80%
Centro 500 493 7 98,60%
Em Baixo 500 492 8 98,40%
Esquerda 500 497 3 99,40%
Direita 500 494 6 98,80%
TOTAL 2500 2465 35 98,60%
• O segundo teste foi com a cabeca na mesma distancia de criacao dos modelos de
decisao, porem com variacoes da face do usuario, tanto para esquerda, direita, em
cima e em baixo. Para este teste teve como resultado 74,48% de acertos. Na Figura
5.2 mostra o usuario olhando para a regiao central com a face voltada para a regiao
a direita do monitor, este movimento com a face pode influenciar na decisao para
qual sentido o mouse devera se mover. Com a execucao dos calculos de comparacao
com os modelos de decisao, a regiao dos olhos desta imagem poderia se parecer com
a outra, neste caso a regiao esquerda, logo o prototipo erra no sentido do movimento
do cursor. Na tabela 5.2 consta os resultados referentes aos testes no posicionamento
citado acima.
Figura 5.2: Imagem obtida durante a aplicacao do segundo teste.
• O terceiro e ultimo teste foi com a mesma posicao de criacao dos modelos de decisao
e com variacao na distancia, onde neste caso o usuario ficou mais afastado da tela,
a Figura 5.3 foi capturada durante o teste. O resultado obtido neste teste foi de
28
Tabela 5.2: Resultado referente ao segundo teste.
Resultado do Segundo Teste
Total Imagens Acertos Erros % Acertos
Em Cima 500 351 149 70,20%
Centro 500 370 130 74,00%
Em Baixo 500 369 131 73,80%
Esquerda 500 392 108 78,40%
Direita 500 380 120 76,00%
TOTAL 2500 1862 638 74,48%
89,24% de acerto, visto que mesmo com uma distancia maior do monitor o olhar do
usuario permanece voltado para a mesma regiao, porem com um deslocamento da ıris
menor, esta diferenca influencia principalmente para identificar o olhar nas regioes
”Em Cima”, ”Centro”e ”Em Baixo”, pois o deslocamento da ıris e menor, resultante
ao formato Widescreen do monitor. Outro ponto interessante destes testes e que
em hipotese temos que, com um monitor com um tamanho maior possivelmente os
resultados seriam melhores, para este caso da distancia, um monitor maior poderia
garantir um resultado mais preciso diante do metodo de comparacao com os modelos
de decisao. Na tabela 5.3 consta os resultados deste teste.
Figura 5.3: Imagem obtida durante a aplicacao do terceiro teste.
Ao concluir os testes e possıvel ver claramente a eficiencia do prototipo quando o
usuario esta na posicao de criacao dos modelos de decisao. Uma vantagem da abordagem
comparativa de imagens e que o prototipo funcionaria mesmo para uma pessoa utili-
29
Tabela 5.3: Resultado referente ao terceiro teste.Resultado do Terceiro Teste
Total Imagens Acertos Erros % Acertos
Em Cima 500 453 47 90,60%
Centro 500 411 89 82,20%
Em Baixo 500 466 34 93,20%
Esquerda 500 454 46 90,80%
Direita 500 447 53 89,40%
TOTAL 2500 2231 269 89,24%
zando oculos, claro que para isso dependeria de condicoes de luminosidade no ambiente;
e tambem para pessoas que sofrem de estrabismo, que e a perda de paralelismo dos olhos.
O prototipo resultante deste trabalho tem caracterısticas importantes que o difere dos
demais. No modelo proposto em [Moreira e Santos, 2009], foi obtido 10 frames por se-
gundo, isso ocorreu devido a busca da regiao dos olhos atraves do template, tendo em vista
que o posicionamento da face do usuario esta ao centro da imagem, sendo assim, com-
paracoes desnecessarias sao feitas nas extremidades da imagem. Este trabalho, baseado
na tecnica de busca de [Viola e Jones, 2001] e com comparacao com imagens em memoria,
o resultado chegou a 30 frames por segundo, dando resposta imediata ao movimento do
olho do usuario, desde a captacao ate o deslocamento do cursor do mouse.
No modelo semelhante ao proposto neste trabalho, apresentado em [Peixoto et al., 2008],
e utilizado tecnicas de comparacao de imagens utilizando tres metodos de redes neurais.
O resultado alcancado obtido pelo prototipo apresentado aqui e superior quando compa-
rado com o melhor resultado destas tres tecnicas para identificar a regiao que o usuario
esta olhando.
Uma caracterıstica importante e a utilizacao de uma simples webcam que esta agre-
gada ao notebook, sendo assim, nao ha a necessidade de um equipamento especıfico para
localizacao dos olhos, nao precisando comprar ou criar nenhum hardware para a execucao
de rastreamento como acontece em [Nascimento, 2009]. No proximo capıtulo aborda as
consideracoes finais deste trabalho.
30
Capıtulo 6
Conclusao
A execucao deste trabalho a respeito da utilizacao de tecnicas de Processamento de
Imagens Digitais e Visao Computacional para o desenvolvimento de uma interface homem-
computador propiciou um entendimento satisfatorio sobre o assunto. Como conclusao
deste trabalho obtem a resposta para a questao levantada no Capıtulo 1, mostrando que
se respeitado algumas restricoes de posicionamento e possıvel a criacao de um prototipo
para interpretacao do olhar do usuario para a movimentacao do cursor do mouse
O modelo resultante e baseado em tecnicas de processamento digital de imagens e visao
computacional, que estao entre as areas que mais crescem na area da computacao devido
a sua capacidade de abranger diversos segmentos de aplicacoes. Outra caracterıstica
importante foi a utilizacao da biblioteca OpenCV, a mesma demonstrou ser muito eficiente
e de simples utilizacao refletindo no bom resultado final.
Dentre as caracterısticas deste prototipo a que mais se destaca e a nao necessidade
de um hardware especıfico para seu funcionamento. Uma caracterıstica que deixou a
desejar e a nao existencia de um gerenciamento dos usuarios, necessitando a calibracao
do prototipo toda vez que trocar de usuario.
Os resultados dos testes mostram um grande potencial do prototipo, mostrando que
o modelo proposto pode ser empregado para o auxılio de pessoas portadoras de de-
ficiencia fısica, proporcionando maior acesso a informacao, conhecimento, independencia
e interacao social.
Como possıveis trabalhos futuros, pode-se apontar:
• Melhoria da imagem, aplicando filtros mais eficientes de processamento em para
solucao de ambientes com pouca luminosidade.
• Criar ambiente grafico para criacao dos modelos de decisao e execucao do prototipo,
possibilitando o mesmo ficar mais simples e intuitivo em seu uso.
• Agregar eventos de click do mouse associando os botoes aos olhos, sendo que, quando
o usuario piscar um determinado olho este representaria um dos botoes do mouse.
31
• Agregar calculo do angulo tridimensional da cabeca para melhorar a precisao quando
o usuario movimenta a face para algum sentido.
• Agregar calculo de deslocamento da regiao do usuario perante a webcam, para nao
necessitar do usuario permanecer no centro da imagem captada, proporcionando
mais liberdade para o mesmo.
• Agregar funcionalidade para o prototipo nao so movimentar o cursor do mouse, mas
tambem identificar o usuario que esta utilizando o mesmo.
• Utilizacao do prototipo para interacao em jogos eletronicos com interacao do meio
atraves do olhar.
32
Referencias
Araujo, G. C. (2010). Algoritmo para reconhecimento de caracterısticas faciais baseado
em filtros de correlacao. Master’s thesis, Universidade Federal do Rio de Janeiro.
Bradski, G. e Kaehler, A. (2008). Learning OpenCV: Computer vision with the OpenCV
library. O’Reilly Media, 1 edition.
Carvalho, F., T., S., e J.M.R. (2005). Deteccao e extraccao de caracterısticas do olho
humano a partir de um modelo prototipo deformavel. ENVC2005-Encontro Nacional
de Visualizacaoo Cientifica.
Castrillon-Santana, M., O. Deniz-Suarez, L. A.-C., e Lorenzo-Navarro, J. (2008). Face
and facial feature detection evaluation. In Third International Conference on Computer
Vision Theory and Applications, VISAPP08.
Castrillon-Santana, M., Deniz-Suarez, O., Anton-Canalıs, L., e Lorenzo-Navarro, J.
(2008). Face and facial feature detection evaluation. In International Conference on
Computer Vision Theory and Applications.
Castrillon Santana, M., Deniz Suarez, O., Hernandez Tejera, M., e Guerra Artal, C.
(2007). Encara2: Real-time detection of multiple faces at different resolutions in video
streams. Journal of Visual Communication and Image Representation, pages 130–140.
Fu, K. e Mui, J. (1981). A survey on image segmentation. Pattern Recognition, 13(1):3–16.
Gonzalez, R. e Woods, R. (2000). Processamento de imagens digitais. Edgard Blucher, 1
edition.
IBGE (2000). Censo 2000 - estatısticas de pessoas com deficiencia. Dis-
ponıvel em: http://www.ibge.gov.br/home/presidencia/noticias/noticia visualiza.php
id noticia=438&id pagina=1. Acessado em: Marco de 2011.
Jackson, M. (1995). Software requirements & specifications. 8.
Jahne, B. e Haußecker, H. (2000). Computer vision and applications: a guide for students
and practitioners. Academic Pr.
Jahne, B., Haußecker, H., e Ray, L. (2002). Computer vision and applications: A guide
for students and practitioners. Journal of Electronic Imaging, 11:115.
Junior, J. B. (2009). Novo aeon: Um ambiente de programacao para visao computacional.
Monografia, Departamento de Ciencia da Computacao, Universidade Federal da Bahia.
33
Kuncheva, L. (2004). Combining pattern classifiers: methods and algorithms. Wiley-
Interscience.
Leao, L. P. S. P., Marques, T. P., e Matos, L. N. (2011). Sistema atencional para deteccao
e rastreamento de faces. 3:53–63.
Lienhart, R. e Maydt, J. (2002). An extended set of haar-like features for rapid object
detection. In Image Processing. 2002. Proceedings. 2002 International Conference on,
volume 1, pages I–900. Ieee.
Ma, E. L. H. (2007). Avaliacao de caracterısticas haar em um modelo de deteccao de face.
Monografia, Universidade de Brasılia.
Martins, C. F. Meios de entretenimento com computador, suas vantagens e desvantagens.
pages 1–4.
Moreira, H. S. e Santos, T. A. (2009). Tecnicas de processamento digital de imagens para
captacao e interpretacao do movimento ocular. Monografia, Universidade Federal de
Goias.
Nascimento, L. A. (2009). Uma interface humano inteligente baseada inteligente baseada
no rastreamento ocular para comunicacao escrita de pacientes com sındrome locked-in.
Monografia, Universidade Federal de Pernambuco.
Oliveira, E. (2008). Captura de expressoes faciais para identificacao de emocoes basicas
em humanos. Monografia, Universidade do Vale do Rio dos Sinos.
Peixoto, H., de Farias Gomes, S., et al. (2008). Classificacao da direcao do olhar para
interatividade humana utilizando processamento de imagens digitais. In Proceedings of
the VIII Brazilian Symposium on Human Factors in Computing Systems, pages 318–
319. Sociedade Brasileira de Computacao.
Restom, A. (2006). Visage: Using the face as a mouse. Monografia, Departament Of
Artificial Intelligence,University Of Damascus.
Rocha, E. C. F. e Couto, D. B. S. (2008). Inclusao sociodigital de portadores de necessi-
dades especiais. page 9.
Santos, K. E. A. (2008). Uma implementacao do algoritmo haar-cascade para localizacao
facial. Monografia, Universidade do Vale do Rio dos Sinos.
Souza, L. (2008). Dendrocronologia digital. Monografia, Departamento de Ciencia da
Computacao, Universidade Federal de Goias.
34
Vieira, T. (2009). Dispositivo de tecnologia assistiva baseado em processamento em tempo
real de imagens do globo ocular. Monografia, Universidade Federal de Pernambuco.
Vieira, T. e Fontana, E. (2008). Dispositivo de rastreamento de movimentos oculares
baseado em webcam e iluminacao com led infravermelho. XXI Congresso Brasileiro de
Engenharia Biomedica, pages 669–672.
Viola, P. e Jones, M. (2001). Rapid object detection using a boosted cascade of simple
features. Published by the IEEE Computer Society.
Viola, P., Jones, M., e Snow, D. (2005). Detecting pedestrians using patterns of motion
and appearance. International Journal of Computer Vision, 63(2):153–161.
35
Apendice A
Codigo Fonte
A.1 Classe eyeMouse
1 // eyeMouse2 . cpp : De f ines the entry po int f o r the conso l e
a p p l i c a t i o n .
2 //
3
4 #inc lude ” s tda fx . h”
5 #inc lude <s t d i o . h>
6 #inc lude <highgu i . h>
7 #inc lude ”cv . h”
8
9 CvHaarClass i f i e rCascade ∗ cascade ,∗ ca s cade e ;
10 CvMemStorage ∗ s t o rage ;
11 IplImage ∗ imgCentro [ 5 ] , ∗imgCima [ 5 ] , ∗ imgBaixo [ 5 ] , ∗ imgEsquerda [ 5 ] , ∗imgDire i ta [ 5 ] ;
12
13 i n t img no ;
14 i n t t ipoPr ;
15
16 char ∗ f a c e c a s c a d e=”xml/ h a a r c a s c a d e f r o n t a l f a c e a l t 2 . xml” ;
17 char ∗ eye cascade =”xml/ haarca s cade mcs eyepa i r b i g . xml” ;
18
19 i n t tmain ( i n t argc , TCHAR∗ argv [ ] )
20 {21 CvCapture ∗ capture = 0 ;
22 IplImage ∗ frame = 0 ;
23 i n t key = 0 ;
24
25 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗26 //Tipo de execuc ao do programa
27 // 1 − Gerar Modelos
36
28 // 2 − Mostrar Jane la s
29 // 3 − Funcionamento Normal
30 t ipoPr = 3 ;
31 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗32
33
34
35 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗36 // Carregar os XML c l a s s i f i c a d o r e s da f a c e e dos o lhos
37 s to rage = cvCreateMemStorage ( 0 ) ;
38 cascade = ( CvHaarClass i f i e rCascade ∗ ) cvLoad ( f a ce ca s cade , 0 , 0 ,
0 ) ;
39 ca scade e = ( CvHaarClass i f i e rCascade ∗ ) cvLoad ( eye cascade , 0 , 0 ,
0 ) ;
40
41 // V e r i f i c a r se carregou os c l a s s i f i c a d o r e s
42 i f ( ! ( cascade | | ca s cade e ) ) {43 f p r i n t f ( s tde r r , ”ERRO: Nao f o i p o s s i v e l c a r r ega r os
c l a s s i f i c a d o r e s cascade \n” ) ;
44 re turn −1;
45 }46 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗47
48
49 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗50 // Carregar modelos em memoria
51 i f ( t ipoPr == 3) {52 carregaImgsModelo ( ) ;
53 }54 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗55
56
57 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗58 // i n i c i a l i z a a webcam
59 capture = cvCaptureFromCAM( 0 ) ;
60
61 // V e r i f i c a se conseguiu i n i c i a l i z a r a webcam
62 i f ( ! capture ) {63 f p r i n t f ( s tde r r , ”Nao f o i p o s s i v e l i n i c i a l i z a r a webcam !\n” )
;
64 re turn 1 ;
65 }66 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗67
68 // Cria uma j a n e l a para e x i b i c a o da webcam
37
69 cvNamedWindow( ” r e s u l t ” , CV WINDOW AUTOSIZE ) ;
70
71 // Mostrar j a n e l a s
72 i f ( t ipoPr == 2) {73 cvNamedWindow( ” o lhos1 ” , CV WINDOW AUTOSIZE ) ;
74 cvNamedWindow( ” o lhos2 ” , CV WINDOW AUTOSIZE ) ;
75 cvNamedWindow( ” o lhos3 ” , CV WINDOW AUTOSIZE ) ;
76 }77
78 whi l e ( key != ’ q ’ ) {79 //Pega o frame
80 frame = cvQueryFrame ( capture ) ;
81
82 // checa o frame
83 i f ( ! frame ) break ;
84
85 // car rega o frame na j a n e l a
86 de t e c t Fa c i a l Fe a t u r e s ( frame ) ;
87
88 cvShowImage ( ” r e s u l t ” , frame ) ;
89
90 // s a i r quando aper ta r ’ q ’
91 key = cvWaitKey ( 1 ) ;
92 }93
94 // Libera a memoria u t i l i z a d a
95 cvDestroyWindow ( ” r e s u l t ” ) ;
96
97 // l i b e r a r memoria j a n e l a s
98 i f ( t ipoPr == 2) {99 cvDestroyWindow ( ” o lhos1 ” ) ;
100 cvDestroyWindow ( ” o lhos2 ” ) ;
101 cvDestroyWindow ( ” o lhos3 ” ) ;
102 }103 cvReleaseCapture ( &capture ) ;
104 re turn 0 ;
105 }106
107
108
109 i n t d e t e c tF ac i a lF ea tu r e s ( IplImage ∗ img )
110 {111 IplImage ∗eyeFind , ∗eyeFindGray ;
112 i n t w = ( img )−>width ;
113 i n t h = ( img )−>he ight ;
38
114 i n t i ;
115 i n t acao = 0 ;
116 CvSeq∗ f a c e s , ∗ o lhos ;
117 CvRect ∗ r ;
118 CvMemStorage∗ s t o rage=cvCreateMemStorage (0 ) ;
119 cvClearMemStorage ( s t o rage ) ;
120
121 // V e r i f i c a se o modelo de busca dos o lhos e s ta OK
122 i f ( ca s cade e )
123 o lhos = cvHaarDetectObjects ( img , cascade e , s torage , 1 . 15 , 3 ,
0 , cvS i z e (25 , 15) ) ;
124 e l s e
125 p r i n t f ( ”\ n C l a s s i f i c a d o r dos o lhos nao carregado ” ) ;
126
127 //Para cada img dos o lhos encontrada
128 f o r ( i = 0 ; i < ( o lhos ? olhos−>t o t a l : 0 ) ; i++ )
129 {130 // Obter coordenadas da f a c e
131 r = ( CvRect∗ ) cvGetSeqElem ( olhos , i ) ;
132
133 // Desenhar um c i r c u l o vermelho na r e g i a o
134 cvRectangle ( img , cvPoint ( r−>x , r−>y ) , cvPoint ( r−>x + r−>width , r−>y + r−>he ight ) ,
135 CV RGB( 255 , 0 , 0 ) , 1 , 8 , 0 ) ;
136
137 // Imprimir dados da coordenada no conso l e
138 // p r i n t f (”\n f a c e x=%d f a c e y=%d wd=%d ht=%d” , r−>x , r−>y , r−>width , r−>he ight ) ;
139
140 // Def in indo r e g i a o de i n t e r e s s e onde encontrou os o lhos
141 cvSetImageROI ( img , cvRect ( r−>x , r−>y , r−>width , r−>he ight ) ) ;
142
143 // Cr iar imagem da r e g i a o encontrada
144 eyeFind = cvCreateImage ( cvS i z e ( r−>width , r−>he ight ) , img−>depth , img−>nChannels ) ;
145 eyeFindGray = cvCreateImage ( cvS i z e ( r−>width , r−>he ight ) ,
IPL DEPTH 8U , 1 ) ;
146
147 //Copiando a r e g i a o de i n t e r e s s e para uma v a r i a v e l
148 cvCopyImage ( img , eyeFind ) ;
149
150 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗151 i f ( t ipoPr == 2) {152 // Mostrar r e g i a o o lho encontrado
153 cvShowImage ( ” o lhos1 ” , eyeFind ) ;
39
154 }155 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗156
157
158 //Mudando cor da imagen de c o l o r i d a para c inza
159 cvCvtColor ( img , eyeFindGray , CV RGB2GRAY ) ;
160
161 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗162 i f ( t ipoPr == 2) {163 // Mostrar r e g i a o o lho c inza encontrado
164 cvShowImage ( ” o lhos2 ” , eyeFindGray ) ;
165
166 }167 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗168
169 // Equalizando o histograma da imagem em e s c a l a de c inza
170 cvEqua l i z eHi s t ( eyeFindGray , eyeFindGray ) ;
171
172 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗173 i f ( t ipoPr == 2) {174 // Mostrar r e g i a o o lho c inza equa l i zadoencontrado
175 cvShowImage ( ” o lhos3 ” , eyeFindGray ) ;
176 }177 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗178
179 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗180 i f ( t ipoPr == 1) {181 img no = 0 ;
182 cr iaModelos ( eyeFindGray ) ;
183 }184 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗185
186
187 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗188 //PROCESSAMENTO PRINCIPAL
189 i f ( t ipoPr == 3) {190 acao = comparaImagem ( eyeFindGray ) ;
191 executaAcao ( acao ) ;
192 }193
194 // detectEyes ( img , r ) ;
195 // r e s e t r eg i on o f i n t e r e s t
196 cvResetImageROI ( img ) ;
197 }198 // r e s e t r eg i on o f i n t e r e s t
40
199 cvResetImageROI ( img ) ;
200 re turn 0 ;
201 }202
203 /∗204 ∗ comparaImagem ( ) − Metodo para comparacao com os modelos na memoria
205 ∗206 ∗ @param img − imagem que se ra comparada com os modelos car regados em
memoria
207 ∗ @return − i n t − i n t e i r o que corresponde qual e o lado para que o
mouse deve se movimentar
208 ∗/209 i n t comparaImagem ( IplImage ∗ img ) {210 i n t acao = 0 ;
211 i n t i ;
212 double menor= 999999999;
213 double norm = 0 ;
214 IplImage ∗imgAux ;
215
216
217 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗218 // c a l c u l a r normal : CENTRO
219 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗220 f o r ( i = 0 ; i < 5 ; i++){221 // Redimensionar para imagem menor ( para nao perder qua l idade )
222 i f ( img−>width >= imgCentro [ i ]−>width ) {223 // ’ img ’ maior temos que pegar o tamanho de ’ imgCentro [ i ] ’
para o tamanho da ’ imgAux ’
224 imgAux = cvCreateImage ( cvS i z e ( imgCentro [ i ]−>width , imgCentro [
i ]−>he ight ) , img−>depth , img−>nChannels ) ;
225 // red imens ionar ’ img ’ para o mesmo tamanho de ’ imgCentro [ i ] ’
226 cvRes ize ( img , imgAux , 1 ) ;
227
228 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗229 // Calculo da normal da imagem com os modelos c e n t r a i s
230 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗231 norm += cvNorm( imgAux , imgCentro [ i ] , 4 , 0 ) ;
232 } e l s e {233 // nes t e caso ’ imgCentro [ i ] ’ e maior que ’ img ’ logo pegamos o
tamanho de ’ img ’ para o tamanho da ’ imgAux ’
234 imgAux = cvCreateImage ( cvS i z e ( img−>width , img−>he ight ) ,
imgCentro [ i ]−>depth , imgCentro [ i ]−>nChannels ) ;
235 // agora redimensionamos ’ imgCentro [ i ] ’
236 cvRes ize ( imgCentro [ i ] , imgAux , 1 ) ;
237
41
238 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗239 // Calculo da normal da imagem com os modelos c e n t r a i s
240 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗241 norm += cvNorm( imgAux , img , 4 , 0 ) ;
242 }243 }244 i f (norm < menor ) {245 menor = norm ;
246 acao = 0 ;
247 }248 norm = 0 ;
249 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗250
251
252 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗253 // c a l c u l a r normal : CIMA
254 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗255 f o r ( i = 0 ; i < 5 ; i++){256 // Redimensionar para imagem menor ( para nao perder qua l idade )
257 i f ( img−>width >= imgCima [ i ]−>width ) {258 // ’ img ’ maior temos que pegar o tamanho de ’ imgCima [ i ] ’ para
o tamanho da ’ imgAux ’
259 imgAux = cvCreateImage ( cvS i z e ( imgCima [ i ]−>width , imgCima [ i ]−>he ight ) , imgCima [ i ]−>depth , imgCima [ i ]−>nChannels ) ;
260 // red imens ionar ’ img ’ para o mesmo tamanho de ’ imgCima [ i ] ’
261 cvRes ize ( img , imgAux , 1 ) ;
262
263 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗264 // Calculo da normal da imagem com os modelos c e n t r a i s
265 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗266 norm += cvNorm( imgAux , imgCima [ i ] , 4 , 0 ) ;
267 } e l s e {268 // nes t e caso ’ imgCentro [ i ] ’ e maior que ’ img ’ logo pegamos o
tamanho de ’ img ’ para o tamanho da ’ imgAux ’
269 imgAux = cvCreateImage ( cvS i z e ( img−>width , img−>he ight ) , img−>depth , img−>nChannels ) ;
270 // agora redimensionamos ’ imgCentro [ i ] ’
271 cvRes ize ( imgCima [ i ] , imgAux , 1 ) ;
272
273 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗274 // Calculo da normal da imagem com os modelos c e n t r a i s
275 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗276 norm += cvNorm( imgAux , img , 4 , 0 ) ;
277 }278 }
42
279 i f (norm < menor ) {280 menor = norm ;
281 acao = 1 ;
282 }283 norm = 0 ;
284 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗285
286
287 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗288 // c a l c u l a r normal : BAIXO
289 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗290 f o r ( i = 0 ; i < 5 ; i++){291 // Redimensionar para imagem menor ( para nao perder qua l idade )
292 i f ( img−>width >= imgBaixo [ i ]−>width ) {293 // ’ img ’ maior temos que pegar o tamanho de ’ imgBaixo [ i ] ’
para o tamanho da ’ imgAux ’
294 imgAux = cvCreateImage ( cvS i z e ( imgBaixo [ i ]−>width , imgBaixo [ i
]−>he ight ) , imgBaixo [ i ]−>depth , imgBaixo [ i ]−>nChannels ) ;
295 // red imens ionar ’ img ’ para o mesmo tamanho de ’ imgBaixo [ i ] ’
296 cvRes ize ( img , imgAux , 1 ) ;
297
298 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗299 // Calculo da normal da imagem com os modelos c e n t r a i s
300 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗301 norm += cvNorm( imgAux , imgBaixo [ i ] , 4 , 0 ) ;
302 } e l s e {303 // nes t e caso ’ imgBaixo [ i ] ’ e maior que ’ img ’ logo pegamos o
tamanho de ’ img ’ para o tamanho da ’ imgAux ’
304 imgAux = cvCreateImage ( cvS i z e ( img−>width , img−>he ight ) , img−>depth , img−>nChannels ) ;
305 // agora redimensionamos ’ imgBaixo [ i ] ’
306 cvRes ize ( imgBaixo [ i ] , imgAux , 1 ) ;
307
308 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗309 // Calculo da normal da imagem com os modelos c e n t r a i s
310 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗311 norm += cvNorm( imgAux , img , 4 , 0 ) ;
312 }313 }314 i f (norm < menor ) {315 menor = norm ;
316 acao = 2 ;
317 }318 norm = 0 ;
319 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
43
320
321
322 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗323 // c a l c u l a r normal : ESQUERDA
324 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗325 f o r ( i = 0 ; i < 5 ; i++){326 // Redimensionar para imagem menor ( para nao perder qua l idade )
327 i f ( img−>width >= imgEsquerda [ i ]−>width ) {328 // ’ img ’ maior temos que pegar o tamanho de ’ imgEsquerda [ i ] ’
para o tamanho da ’ imgAux ’
329 imgAux = cvCreateImage ( cvS i z e ( imgEsquerda [ i ]−>width ,
imgEsquerda [ i ]−>he ight ) , imgEsquerda [ i ]−>depth ,
imgEsquerda [ i ]−>nChannels ) ;
330 // red imens ionar ’ img ’ para o mesmo tamanho de ’ imgEsquerda [ i
] ’
331 cvRes ize ( img , imgAux , 1 ) ;
332
333 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗334 // Calculo da normal da imagem com os modelos c e n t r a i s
335 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗336 norm += cvNorm( imgAux , imgEsquerda [ i ] , 4 , 0 ) ;
337 } e l s e {338 // nes t e caso ’ imgEsquerda [ i ] ’ e maior que ’ img ’ logo pegamos
o tamanho de ’ img ’ para o tamanho da ’ imgAux ’
339 imgAux = cvCreateImage ( cvS i z e ( img−>width , img−>he ight ) , img−>depth , img−>nChannels ) ;
340 // agora redimensionamos ’ imgEsquerda [ i ] ’
341 cvRes ize ( imgEsquerda [ i ] , imgAux , 1 ) ;
342
343 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗344 // Calculo da normal da imagem com os modelos c e n t r a i s
345 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗346 norm += cvNorm( imgAux , img , 4 , 0 ) ;
347 }348 }349 i f (norm < menor ) {350 menor = norm ;
351 acao = 3 ;
352 }353 norm = 0 ;
354 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗355
356
357 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗358 // c a l c u l a r normal : DIREITA
44
359 f o r ( i = 0 ; i < 5 ; i++){360 // Redimensionar para imagem menor ( para nao perder qua l idade )
361 i f ( img−>width >= imgDire i ta [ i ]−>width ) {362 // ’ img ’ maior temos que pegar o tamanho de ’ imgDire i ta [ i ] ’
para o tamanho da ’ imgAux ’
363 imgAux = cvCreateImage ( cvS i z e ( imgDire i ta [ i ]−>width ,
imgDire i ta [ i ]−>he ight ) , imgDire i ta [ i ]−>depth , imgDire i ta [ i
]−>nChannels ) ;
364 // red imens ionar ’ img ’ para o mesmo tamanho de ’ imgDire i ta [ i
] ’
365 cvRes ize ( img , imgAux , 1 ) ;
366
367 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗368 // Calculo da normal da imagem com os modelos c e n t r a i s
369 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗370 norm += cvNorm( imgAux , imgDire i ta [ i ] , 4 , 0 ) ;
371 } e l s e {372 // nes t e caso ’ imgDire i ta [ i ] ’ e maior que ’ img ’ logo pegamos
o tamanho de ’ img ’ para o tamanho da ’ imgAux ’
373 imgAux = cvCreateImage ( cvS i z e ( img−>width , img−>he ight ) , img−>depth , img−>nChannels ) ;
374 // agora redimensionamos ’ imgEsquerda [ i ] ’
375 cvRes ize ( imgDire i ta [ i ] , imgAux , 1 ) ;
376
377 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗378 // Calculo da normal da imagem com os modelos c e n t r a i s
379 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗380 norm += cvNorm( imgAux , img , 4 , 0 ) ;
381 }382 }383 i f (norm < menor ) {384 menor = norm ;
385 acao = 4 ;
386 }387 norm = 0 ;
388 // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗389
390 // l impar endere co memoria imagem
391 cvReleaseImage(&imgAux) ;
392
393
394 return acao ;
395 }396
397 /∗
45
398 ∗ executaAcao ( ) − Metodo para para executar para qual o lado que o
mouse va i se mover .
399 ∗400 ∗ @param acao − i n t e i r o r e f e r e n t e a acao do mouse
401 ∗402 ∗ 0 − Centro
403 ∗ 1 − Cima
404 ∗ 2 − Baixo
405 ∗ 3 − Esquerda
406 ∗ 4 − D i r e i t a
407 ∗/408 i n t executaAcao ( i n t acao ) {409 POINT cursorPos ;
410 long x = 0 ;
411 long y = 0 ;
412 GetCursorPos(&cursorPos ) ;
413
414 x = cursorPos . x ;
415 y = cursorPos . y ;
416
417 //Cima
418 i f ( acao == 1) {419 y −= 10 ;
420 }421 // Baixo
422 i f ( acao == 2) {423 y += 10 ;
424 }425 // Esquerda
426 i f ( acao == 3) {427 x −= 10 ;
428 }429 // D i r e i t a
430 i f ( acao == 4) {431 x += 10 ;
432 }433 SetCursorPos (x , y ) ;
434 }435
436 /∗437 ∗ carregaModelos ( ) − Metodo para ca r r ega r na memoria os modelos para
comparacao
438 ∗/439 i n t carregaImgsModelo ( ) {440 i n t i ;
46
441 char image [ 1 0 0 ] ;
442 IplImage ∗aux ;
443
444 // ca r r ega r imagem para os array : CENTRO
445 f o r ( i = 0 ; i < 5 ; i++){446 s p r i n t f ( image , ” imgModelos/ centro/%d . jpg ” , i ) ;
447 imgCentro [ i ] = cvLoadImage ( image ,CV LOAD IMAGE GRAYSCALE) ;
448 }449
450 // ca r r ega r imagem para os array : CIMA
451 f o r ( i = 0 ; i < 5 ; i++){452 s p r i n t f ( image , ” imgModelos/cima/%d . jpg ” , i ) ;
453 imgCima [ i ] = cvLoadImage ( image ,CV LOAD IMAGE GRAYSCALE) ;
454 }455
456 // ca r r ega r imagem para os array : BAIXO
457 f o r ( i = 0 ; i < 5 ; i++){458 s p r i n t f ( image , ” imgModelos/ baixo/%d . jpg ” , i ) ;
459 imgBaixo [ i ] =cvLoadImage ( image ,CV LOAD IMAGE GRAYSCALE) ;
460 }461
462 // ca r r ega r imagem para os array : ESQUERDA
463 f o r ( i = 0 ; i < 5 ; i++){464 s p r i n t f ( image , ” imgModelos/ esquerda/%d . jpg ” , i ) ;
465 imgEsquerda [ i ] =cvLoadImage ( image ,CV LOAD IMAGE GRAYSCALE) ;
466 }467
468 // ca r r ega r imagem para os array : DIREITA
469 f o r ( i = 0 ; i < 5 ; i++){470 s p r i n t f ( image , ” imgModelos/ d i r e i t a/%d . jpg ” , i ) ;
471 imgDire i ta [ i ] =cvLoadImage ( image ,CV LOAD IMAGE GRAYSCALE) ;
472 }473 return 0 ;
474 }475
476 /∗477 ∗ carregaModelos ( ) − Metodo para c r i a r modelos para comparacao
478 ∗479 ∗ @param img − imagem se ra sa lva como modelo
480 ∗/481 i n t cr iaModelos ( IplImage ∗ img ) {482 char image [ 1 0 0 ] ;
483 s p r i n t f ( image , ” cr iaModelos/%d . jpg ” , img no ) ;
484 cvSaveImage ( image , img , 0) ;
485 img no++;
47
486 return 0 ;
487 }
48