Uso de Visão Computacional para Interface Homem-Computador



Documentos relacionados
Ferramenta para detecção de fadiga em motoristas baseada no monitoramento dos olhos

SEGMENTAÇÃO DE IMAGENS EM PLACAS AUTOMOTIVAS

ATENÇÃO: * Arquivos com tamanho superior a 500 KB NÃO SERÃO ACEITOS * SOMENTE serão aceitos documentos do formato: PDF

1.1. Organização de um Sistema Computacional

Detecção e Rastreamento de Objetos coloridos em vídeo utilizando o OpenCV

Procedimento de anexação de peças e envio

Disciplina: Introdução à Informática Profª Érica Barcelos

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software

Processamento de Imagem. Prof. MSc. André Yoshimi Kusumoto

SUMÁRIO Acesso ao sistema... 2 Atendente... 3

Aula 3 - Registro de Imagem

UNIVERSIDADE FEDERAL DE SANTA CATARINA GRADUAÇÃO EM SISTEMAS DE INFORMAÇÃO DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA DATA MINING EM VÍDEOS

Aula 3 - Registro de Imagem

SCANNER DE TRIANGULAÇÃO LASER PARA PROTOTIPAGEM 3D

Fluxo de trabalho do Capture Pro Software: Indexação de OCR e separação de documentos de código de correção

O Primeiro Programa em Visual Studio.net

VCA Treinamento em Algoritmo

Santa Cruz do Sul, outubro de 2015.

MANUAL PARA INCLUSÃO DIGITAL- ANDRAGOGIA

Segundo Pré-teste. Data de realização. 18 de Novembro de Local.

Pesquisa e organização de informação

Cálculo de volume de objetos utilizando câmeras RGB-D

RADIOLOGIA DIGITAL. Conceitos Básicos. Eizo Soluções Médicas

4 Segmentação Algoritmo proposto

Manual SAGe Versão 1.2 (a partir da versão )

Periféricos, dispositivos de entrada e dispositivos de saída

Alarme Automotivo com mensagem para móvel utilizando Arduino

Prof. Esp. Lucas Cruz

5 Extraindo listas de produtos em sites de comércio eletrônico

CorelDRAW UM PROGRAMA DE DESIGN

Passo 3: Posicionando a Câmera na Prova Didática Teórica ou na Prova de Defesa da Produção Intelectual

15 Computador, projeto e manufatura

Sistema de Controle de Solicitação de Desenvolvimento

Manual Sistema MLBC. Manual do Sistema do Módulo Administrativo

PORTAL DE COMPRAS SÃO JOSÉ DO RIO PRETO

Algoritmos. Cláudio Barbosa

TÍTULO: GARRA ROBÓTICA PERCEPTIVA CATEGORIA: CONCLUÍDO ÁREA: CIÊNCIAS EXATAS E DA TERRA SUBÁREA: COMPUTAÇÃO E INFORMÁTICA

Introdução a Informática - 1º semestre AULA 02 Prof. André Moraes

NAPNE / RENAPI. HEADdev. Versão traduzida e adaptada por Jéssica Froes NAPNE CEFET Bento Gonçalves RS 2006 Revisado por Josiane Pagani 2008

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

Universidade Federal de Goiás Instituto de Informática Processamento Digital de Imagens

PLANOS DE CONTINGÊNCIAS

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Localização de placas em imagens de veículos. Resumo

Pesquisa com Professores de Escolas e com Alunos da Graduação em Matemática

Configuração do Ambiente de Trabalho

UFGD FCA PROF. OMAR DANIEL BLOCO 6 CLASSIFICAÇÃO DE IMAGENS

Guia Rápido. Copyright Todos os direitos reservados.

Fundamentos de Hardware

ULA Sinais de Controle enviados pela UC

UFGD FCA PROF. OMAR DANIEL BLOCO 4 PROCESSAMENTO DE IMAGENS

Aula 2 Aquisição de Imagens

PROCEDIMENTOS PARA CONVERSÃO DE IMAGENS DIGITALIZADAS EM DOCUMENTO PDF ÚNICO UTILIZANDO A IMPRESSORA FREEPDF XP.

PALAVRAS-CHAVE: Massas Nodulares, Classificação de Padrões, Redes Multi- Layer Perceptron.

CHECK - LIST - ISO 9001:2000

Atividade: matrizes e imagens digitais

Esclarecimento: Não, a operação de matching ocorre no lado cliente da solução, de forma distribuída.

O Windows 7 é um sistema operacional desenvolvido pela Microsoft.

Software de segurança em redes para monitoração de pacotes em uma conexão TCP/IP

ESTUDO COMPARATIVO ENTRE AS PLATAFORMAS ARDUINO E PIC

SAJ. Cadastro Excepcional para Processos Digitais

7.Conclusão e Trabalhos Futuros

AULA 1 Iniciando o uso do TerraView

Departamento de Matemática - UEL Ulysses Sodré. Arquivo: minimaxi.tex - Londrina-PR, 29 de Junho de 2010.

Um Driver NDIS Para Interceptação de Datagramas IP

Universidade Federal de Santa Maria UFSM Centro de Tecnologia CT. Power Point. Básico

Entendendo como funciona o NAT

Lógica de Programação

Aula 01 - Formatações prontas e condicionais. Aula 01 - Formatações prontas e condicionais. Sumário. Formatar como Tabela

Análise de Dados do Financeiro

possível até impedir o funcionamento do Windows. Faz-scuidado redobrado ao ativar determinados recursos.

Aula 03 PowerPoint 2007

PRINCÍPIOS DE INFORMÁTICA PRÁTICA OBJETIVO 2. BASE TEÓRICA. 2.1 Criando Mapas no Excel. 2.2 Utilizando o Mapa

Manual do usuário. Mobile Player

Organização e Arquitetura de Computadores I

Manual do Publicador. Wordpress FATEA Sistema de Gerenciamento de Conteúdo Web

ArpPrintServer. Sistema de Gerenciamento de Impressão By Netsource Rev: 02

Anexo III Funcionamento detalhado do Sistema Montador de Autoria

Correção Automática de Testes de Múltipla Escolha MCTest - Versão para Android

CONTROLAR O PONTEIRO DO MOUSE UTILIZANDO O MOVIMENTO DE UM OLHO CAPTURADO ATRAVÉS DE UMA CÂMERA INFRAVERMELHA FIXA

Manual do Visualizador NF e KEY BEST

BRAlarmExpert. Software para Gerenciamento de Alarmes. BENEFÍCIOS obtidos com a utilização do BRAlarmExpert:

Sumário INSTALAÇÃO DO SIATRON CONDOMÍNIO ATIVAÇÃO DA LICENÇA PRESTADORES DE SERVIÇOS PARÂMETROS DO SISTEMA

Introdução. O que é o Registro do Windows

IW10. Rev.: 02. Especificações Técnicas

Informática. Prof. Macêdo Firmino. Macêdo Firmino (IFRN) Informática Setembro de / 25

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas

APOSTILA DE EXEMPLO. (Esta é só uma reprodução parcial do conteúdo)

Informática Aplicada a Radiologia

BH PARK Software de Estacionamento

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.

Desenvolvimento do Módulo de Pré-processamento e Geração de Imagens de. Imagens de Teste do Sistema DTCOURO

Instalação: permite baixar o pacote de instalação do agente de coleta do sistema.

Exercício 1: Ajustes rápidos em retrato

Planejando o aplicativo

O programa Mysql acompanha o pacote de instalação padrão e será instalado juntamente com a execução do instalador.

ÍNDICE MANUAL SITE ADMINISTRÁVEL TV. 1. Introdução 2. Acessando o site administrável/webtv SITE ADMINISTRÁVEL 3. CONFIGURAÇÕES

Ajuda On-line - Sistema de Portaria. Versão 4.8.J

Transcrição:

UNIVERSIDADE FEDERAL DE GOIÁS UFG CAMPUS CATALÃO CAC DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO DCC Bacharelado em Ciência da Computação Projeto Final de Curso Uso de Visão Computacional para Interface Homem-Computador Autor: Lucas Faria Porto Orientador: Márcio de Souza Dias Catalão - 2011

Lucas Faria Porto Uso de Visão Computacional para Interface Homem-Computador Monografia apresentada ao Curso de Bacharelado em Ciência da Computação da Universidade Federal de Goiás Campus Catalão como requisito parcial para obtenção do título de Bacharel em Ciência da Computação Área de Concentração: Visão Computacional Orientador: Márcio de Souza Dias Catalão - 2011

F. Porto, Lucas Uso de Visão Computacional para Interface Homem-Computador/Márcio de Souza Dias- Catalão - 2011 Número de páginas: 48 Projeto Final de Curso (Bacharelado) Universidade Federal de Goiás, Campus Catalão, Curso de Bacharelado em Ciência da Computação, 2011. Palavras-Chave: 1. Visão Computacional. 2. Processamento de Imagens Digitais. 3. Interface Homem-Computador

Lucas Faria Porto Uso de Visão Computacional para Interface Homem-Computador Monografia apresentada e aprovada em Pela Banca Examinadora constituída pelos professores. de Márcio de Souza Dias Presidente da Banca Márcio Antônio Duarte Thiago Jabur Bittar

Dedico este trabalho a todos que me apoiaram nesta árdua jornada; os meu amigos, minhas irmãs e principalmente aos meus pais.

AGRADECIMENTOS Agradeço primeiramente a Deus por ter me dado sabedoria para superar todos os desafios durante esta jornada. Agradeço especialmente aos meus pais, Eloi Porto e Gessiene Andrade, no qual sou eternamente grato por me apoiarem em minhas escolhas, por estarem comigo nesta caminhada e principalmente por compreenderem a minha ausência. As minhas irmãs que são um exemplo caráter e determinação 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 serão sempre lembrados: pelas histórias, 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. Agradeço a turma de 2007, vale ressaltar a melhor. Algumas pessoas em especial que apareceram através do destino e que de maneira inexplicável marcou minha vida: Adam Moreira, Ana Paula Suzuki, Bleno Sampaio, Fábio Amorim, Faimison Porto, Fernando Antônio, Hugo Sica, Igor André, Janaína Teixeira, Leandro Pedrosa, Luana Fidellys (Band), Luiz Gustavo, Márcia Ribeiro, Marcos Bráulio, Máx Gabriel, Renato França, Ricardo Rodrigues, Roger Costa, Vinícius Gustavo, Wilklyney Pires. Muito obrigado a todos.

As derrotas só existem para aqueles que deixam de acreditar nas vitórias (Gichin Funakoshi)

RESUMO Porto, L. Uso de Visão Computacional para Interface Homem-Computador. Curso de Ciência da Computação, Campus Catalão, UFG, Catalão, Brasil, 2011, 48p. Pacientes portadores de tetraplegia apresentam um quadro clínico de paralisia grave dos membros abaixo do pescoço, como resultado, estas pessoas, portadoras de necessidades especiais tornam-se extremamente dependentes de auxílio em suas atividades cotidianas, tendo diversas dificuldades ao acesso à informação e uso dos meios computacionais disponíveis atualmente. O trabalho em questão aborda o estudo de técnicas processamento digital de imagens com foco em visão computacional, para o desenvolvimento de uma interface homem-computador voltado para estes usuários; baseado na utilização de uma webcam de baixa qualidade sem a necessidade de investimento ou criação de um hardware especial. Com o resultado deste estudo foi possível o desenvolvimento de um protótipo para captação e interpretação dos movimentos do olhar do usuário através da webcam e refletindo na movimentação do cursor do mouse. Os resultados obtidos foram satisfatórios com altas taxas de acertos, comprovando a viabilidade do modelo proposto de interface homem-computador. Palavras-Chaves: Visão Computacional, Processamento de Imagens Digitais, Interface Homem-Computador i

Sumário 1 Introdução 1 2 Estado da Arte 4 3 Fundamentação Teórica 6 3.1 Imagem Digital................................. 6 3.2 Visão Computacional.............................. 7 3.3 Busca por Objetos............................... 11 3.3.1 Imagem Integral............................ 12 3.3.2 Algoritmo AdaBoost.......................... 13 3.3.3 Árvore de Decisão............................ 15 4 Desenvolvimento 16 4.1 Abordagem Inicial............................... 16 4.2 Restrições.................................... 18 4.3 Carregar Modelos................................ 18 4.4 Obter Imagem.................................. 21 4.5 Localizar Olhos................................. 21 4.6 Pré-processamento............................... 23 4.7 Comparar Modelo de Decisão......................... 24 4.8 Mover Cursor.................................. 25 5 Análise e Resultados 26 5.1 Detalhes dos Testes............................... 26 5.2 Testes e Análises................................ 27 6 Conclusão 31 Referências 33 Apêndices 35 ii

A Código Fonte 36 A.1 Classe eyemouse................................ 36 iii

Lista de Figuras 3.1 Representação de uma Imagem digital, origem dos eixos em uma imagem e a representação de um ponto......................... 6 3.2 Relação entre as áreas de utilização de imagens................ 7 3.3 Passos de um sistema de Visão Computacional [Júnior, 2009]........ 8 3.4 Dispositivos utilizados para aquisição de imagem [Júnior, 2009]....... 9 3.5 Exemplo utilização de filtros de pré-processamento de imagem........ 9 3.6 Exemplo de extração de borda e contorno................... 10 3.7 Exemplo de segmentação de imagem [Júnior, 2009].............. 10 3.8 Exemplo de uma representação [Júnior, 2009]................. 10 3.9 Exemplo de reconhecimento das mãos para execução de uma determinada música [Júnior, 2009]............................... 11 3.10 Exemplos de cálculos com imagem integral [Viola e Jones, 2001]....... 12 3.11 Características Haar-like [Viola e Jones, 2001]................. 13 3.12 Exemplo de cálculo 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 execução do protótipo proposto................... 17 4.2 Exemplos de posições do usuário em frente a webcam............. 19 4.3 Pontos na tela onde o usuário tem que olhar, tanto para a criação dos modelos quanto para o funcionamento do protótipo.............. 19 4.4 Modelos de decisão: Imagens capturadas do usuário olhando para cada região no monitor................................ 20 4.5 Parte da codificação do arquivo classificador no formato XML........ 20 4.6 Exemplo de criação de classificador e utilização do método de busca Haar de faces em uma imagem............................ 22 4.7 Região do par de olhos encontrados delimitado pelo retângulo vermelho... 22 4.8 Histogramas referentes a quatro tipos básicos de imagens [Gonzalez e Woods, 2000]. 23 iv

4.9 Aplicação de Técnicas de processamento de Imagens, temos respectivamente a imagem colorida, a mesma em escala de cinza e após a equalização do histograma.................................. 24 4.10 Imagem sendo comparada com os modelos de decisão carregados em memória 25 5.1 Imagem obtida durante a aplicação do primeiro teste............. 27 5.2 Imagem obtida durante a aplicação do segundo teste............. 28 5.3 Imagem obtida durante a aplicação do terceiro teste............. 29 v

Lista de Tabelas 4.1 Resultado da comparação da imagem obtida na webcam com os modelos de decisão 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 LED OpenCV PDI RAM SSR SVM XML Frames Por Segundo Light-Emitting Diode Open Source Computer Vision Processamento Digital de Imagens Random Access Memory Six Segmented Rectangular Support Vector Machines extensible Markup Language vii

Capítulo 1 Introdução Atualmente o computador é a forma de comunicação mais utilizada no mundo, oferecendo ferramentas cada dia mais presente na comunicação. Sendo utilizados e-mails, fóruns de discussão, mensageiros eletrônicos e outros. A vantagem dos recursos computacionais para a comunicação é a facilidade ao acesso a informação e a integração entre pessoas do mundo inteiro, seja de forma para o convívio social ou um meio para relações comerciais [Martins, ]. Infelizmente uma parcela da população fica restringida ao acesso da tecnologia por não existir um mecanismo de interação com o mundo ao seu redor que se encaixe com sua limitação física. No Brasil existem mais de 24,5 milhões de pessoas com algum tipo de necessidade especial, incluindo física e mental. Isso representa 14,5% da população no ano 2000 [IBGE, 2000]. No mundo já existem diversas tecnologias com a finalidade de promover uma inclusão social para as pessoas com necessidades especiais, possibilitando uma maior acessibilidade a elas. Como exemplos, podem ser citadas adaptações 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, são alguns dos diversos utensílios, adaptações, dispositivos e equipamentos criados visando facilitar a realização de algumas tarefas diárias e proporcionar uma vida mais produtiva e feliz, em casa, na escola ou no trabalho [Rocha e Couto, 2008]. No uso dos computadores a história não é diferente, para casos de deficiência 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 limitações, diversos meios, sejam por softwares ou hardwares especiais foram criados e/ou adaptados para possibilitar interação destes usuários com o computador [Rocha e Couto, 2008]. O avanço das técnicas de processamento digital de imagens, estão possibilitando mais qualidade, melhoramento nas imagens, equipamentos mais avançados e viáveis, consequentemente novas soluções estão surgindo para possibilitar o acesso das pessoas de- 1

ficientes no meio computacional, onde estas soluções estão conseguindo ajudar na interação destes usuários. Um exemplo disso são as técnicas de Processamento Digital de Imagens (PDI) aplicadas nos tons das imagens, melhorando o entendimento de um usuário com dificuldades de distinguir ou perceber as diferenças entre as cores (daltonismo) [Moreira e Santos, 2009]. Com novos avanços e pesquisas na área de PDI, o termo visão computacional surge como um conjunto de técnicas possibilitando um programa extrair dados e interpretar as características relevantes em uma imagem possibilitando que um sistema ou o computador extraia as informações que foi pré-determinado. A ideia central dessa técnica é simular a visão humana no meio computacional baseando-se como o homem consegue distinguir um objeto ou uma característica importante em uma determinada imagem [Nascimento, 2009]. Com a aplicação das técnicas de PDI e Visão Computacional, espera-se neste trabalho conseguir por meio do uso de uma simples webcam do usuário, desenvolver um protótipo que identifique nas imagens obtidas em tempo real o rosto do mesmo, características e dados relevantes para obter a localização dos olhos e saber para qual a direção que o olho esta apontando na tela, com intuito de movimentar o cursor do mouse. Muitos detalhes vão ser relevantes para que este estudo obtenha um resultado satisfatório nos testes finais, onde diversas situações poderão influenciar no comportamento do protótipo, sendo alguns deles: o ambiente em que o usuário se encontra (iluminação), posicionamento do usuário em frente à câmera, se o mesmo usa óculos, computadores com poder de processamento considerados fracos, baixa qualidade da webcam, etc. Portanto, seria possível a criação do protótipo resultante deste estudo visando o controle do cursor do mouse através da mudança da posição dos olhos do usuário de forma eficaz e financeiramente acessível, sem a necessidade da criação de um hardware específico ou investimentos em uma webcam com uma resolução maior? É o que este estudo pretende responder. A presente monografia está dividida nos capítulos a seguir: Capítulo 1: Introdução Texto introdutório sobre a visão inicial do trabalho abordado, uma idéia do protótipo a ser desenvolvido, com ênfase no problema, objetivos e metas. Capítulo 2: Estado da Arte Aborda vários trabalhos semelhantes ao proposto neste trabalho, citando as principais características abordadas, as técnicas utilizadas, etc. Capítulo 3: Fundamentação Teórica 2

Ênfase na parte teórica por trás do trabalho proposto, reunindo a maioria dos conceitos científicos sobre processamento Digital de Imagens e Visão Computacional. Capítulo 4: Desenvolvimento Ênfase completa do desenvolvimento do protótipo. Descrição detalhada do algoritmo e das técnicas empregadas neste trabalho. Capítulo 5: Análise e Resultados Neste capítulo é abordada toda a análise referente à execução de testes e resultados alcançados no protótipo. Capítulo 6: Conclusão Conclusão do trabalho proposto e abordagem de trabalhos futuros. 3

Capítulo 2 Estado da Arte Nesta seção são apresentados alguns estudos semelhantes ao abordado aqui. Demonstrando ao leitor que a área citada neste trabalho trata-se de fontes de interesse de estudos científicos. Diversos trabalhos de processamento de imagens e visão computacional estão focados na extração de características faciais. No trabalho apresentado em [Carvalho et al., 2005] o objetivo é detectar as informações do olho humano por meio de suas características geométricas em uma imagem estática. Neste trabalho, técnicas de processamento foram utilizadas para possibilitar a extração de bordas revelando a circunferência que caracteriza a íris, posteriormente o centro da mesma. É 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 visão computacional importantes para chegar ao resultado esperado. A captação para a extração e interpretação 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 usuário. O desenvolvimento das técnicas de processamento das imagens é toda feita na linguagem de programação Matlab que comporta diversos recursos e técnicas para o processamento de imagens. O funcionamento geral é descrito com os seguintes passos: localização da região dos olhos através da comparação de template, neste caso o template é uma imagem de um olho que serve como modelo para a busca em imagem e posteriormente, localização da pupila comparando com um template padrão da pupila. Com a região da pupila localizada na imagem, o último passo é obter a coordenada cartesiana (x,y) referente ao centro da pupila, possibilitando associar esta posição em uma coordenada no monitor, toda mudança da posição central da pupila reflete na posição do cursor do mouse no monitor. Outro trabalho semelhante, apresentado em [Peixoto et al., 2008], demonstra a comparação de algumas técnicas existentes para localização da região dos olhos em uma 4

imagem digitalizada. A metodologia deste trabalho consiste no uso de três tipos de combinações entre redes neurais artificiais e algoritmos de aprendizado de máquinas. No treinamento da rede foram utilizadas imagens de faces possibilitando maior fidelidade do sistema de reconhecimento. Cada imagem foi devidamente normalizada e distribuída como entrada de treinamento para futuras comparações para a rede. A saída foi previamente definida com apenas quatro posições, são elas: esquerda, direita, em baixo e em cima; na qual se refere à direção que o cursor do mouse tem que se mover. A técnica de rastreamento do olhar usando redes neurais também é proposto em [Nascimento, 2009] que tem como característica principal o uso de um óculos especial para utilização do usuário, que tem acoplado uma webcam que utiliza iluminação de 6 LEDs infravermelhos cujo comprimento de onda melhora a visualização da íris. Este dispositivo foi proposto no trabalho [Vieira, 2009] e desenvolvido em 2008 [Vieira e Fontana, 2008]. O trabalho proposto em [Restom, 2006] propõe o reconhecimento das características faciais (ponta do nariz e olhos), que são detectados e monitorados em tempo real para usar suas ações como eventos de mouse. As coordenadas e movimento da ponta do nariz no vídeo são interpretados para tornar as coordenadas e movimento do ponteiro do mouse na tela do usuário. O piscar dos dois olhos são interpretados como eventos de click do botão do mouse. O único dispositivo externo que o usuário precisa é de uma webcam que alimenta o programa com as imagens de vídeo. O trabalho é desenvolvido na linguagem de programação Java que implementa o filtro SSR (Six Segmented Rectangular) e o classificador SVM (Support Vector Machines) que trabalha com aprendizado de máquina a partir de imagens de exemplo, ambas técnicas são utilizadas para encontrar a face e as características faciais. No próximo capítulo será abordada a parte teórica do trabalho proposto. 5

Capítulo 3 Fundamentação Teórica 3.1 Imagem Digital A representação de uma imagem digital se dá por meio de uma matriz cujos índices de linhas e colunas identificam um determinado ponto na imagem. Essa representação é definida por uma função bidimensional f(x,y), onde x e y são 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 é em geral composta por uma quantidade finita de pixels, sendo que cada um dos quais tem uma localização e um valor de intensidade específico. A Figura 3.1 abaixo, representa uma imagem digital, monocromática, mostrando sua origem no ponto (0,0) e o posicionamento dos eixos de coordenadas cartesianas. Figura 3.1: Representação de uma Imagem digital, origem dos eixos em uma imagem e a representação de um ponto. O termo Processamento de Imagens Digitais é o estudo computacional sobre imagens que se divide nas seguintes subáreas; de acordo com o foco realizado sobre a imagem, 6

sendo elas a computação gráfica, processamento de imagens e visão computacional, cada uma destas subáreas contém aspectos particulares que as diferenciam das demais. A computação gráfica é a subárea que procura a representação de dados e informação através de uma visualização gráfica. A área de processamento de imagem tem como característica a entrada de uma determinada imagem em seu processo, que após ser processada tem como resultado de saída uma nova imagem. A visão computacional utiliza uma imagem como ponto de partida para a identificação, medição ou quantificação de objetos na mesma. A subdivisão das áreas comentadas anteriormente é representada conforme a Figura 3.2 que também mostra a subárea de processamento de dados; a mesma tem como característica a entrada de uma massa de dados, a mesma é processada e tem como retorno informações relevantes para resolução de um determinado problema. Mesmo com esta divisão, nada impede que as subáreas se relacione entre si para alcançar o objetivo desejado [Souza, 2008]. Figura 3.2: Relação entre as áreas de utilização de imagens. 3.2 Visão Computacional Na visão computacional, os algoritmos mais sofisticados vêm sendo usados em aplicações de diversas áreas e finalidades, tais como rastreamento de objetos, detecção de movimentos, reconhecimento de gestos e faces, dentre outras. Um exemplo de aplicação seria um sistema de reconhecimento de caracteres, que poderia ser utilizado para obter a informação automaticamente da placa de um motorista multado; outro exemplo de aplicação seria um sistema de vigilância capaz de identificar o movimento de uma pessoa e movimentar a câmera para acompanhá-la de maneira automática [Leão et al., 2011]. Em geral, as aplicações de Visão Computacional são estruturadas conforme ilustrado 7

na Figura 3.3. Nesta figura, cada retângulo representa uma etapa do processo de extração e transformação de imagens em dados. Figura 3.3: Passos de um sistema de Visão Computacional [Júnior, 2009]. A primeira etapa corresponde à aquisição da imagem, isto é, captar uma imagem digital através de um dispositivo de captação, por exemplo, uma câmera, scanner, leitor biométrico, etc. Essa imagem capturada é tratada durante o pré-processamento a fim de prepará-la para a etapa seguinte, as melhorias depende do problema relacionado, as técnicas podem ser para retirar ruídos, realçar o contraste, entre outras; visando aumentar o sucesso da extração de características importantes para a solução do problema. Durante a detecção e segmentação são selecionadas as regiões das imagens que podem ter informações relevantes, um exemplo seria um sistema de reconhecimento de caracteres, onde as informações relevantes são os caracteres disponíveis na imagem. Na representação, as regiões segmentadas na etapa anterior são preparadas para o último passo, a interpretação. Nesta etapa, finalmente é retido as informações desejadas da imagem. Logo abaixo há a descrição mais detalhada dos passos citados acima. Aquisição: Como visto em [Gonzalez e Woods, 2000] e [Jähne et al., 2002], este passo permite a produção de uma imagem digital, sendo que a aquisição está ligada diretamente ao processo de captura da imagem por um ou vários dispositivos de captura. O resultado da aquisição da imagem pode variar entre uma imagem bidimensional, tridimensional ou ainda um vídeo que é uma sequência de imagens. O resultado da imagem depende diretamente do dispositivo de captura. Na Figura 3.4 mostra alguns dispositivos comuns de aquisição de imagens. Pré-processamento: De acordo com [Gonzalez e Woods, 2000], neste passo é utilizado técnicas relevantes na visão computacional que são aplicadas em imagens; visando melhorar significativamente a qualidade e/ou realçar alguma característica presente na imagem, assim deixá-la mais adequada para as próximas etapas. Tem como exemplo de aplicação de filtros em imagens: a redução de ruídos, o controle do nível de brilho ou con- 8

Figura 3.4: Dispositivos utilizados para aquisição de imagem [Júnior, 2009]. traste, entre outras aplicações. A seguir dois exemplos de aplicação 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 último na Figura 3.5(c), temos a imagem em preto e branco, também conhecida como imagem binária. Figura 3.5: Exemplo utilização de filtros de pré-processamento de imagem. Extração de características: Este passo visa transformar os dados de entrada da imagem em um conjunto de características relevantes para alcançar o objetivo esperado, como exemplos, a detecção de textura, detecção de formas geométricas, detecção de bordas, cantos, pontos ou movimento; como é mostrado na Figura 3.6(a), temos uma imagem comum e na Figura 3.6(b) temos a extração das bordas da mesma, deixando evidente a presença das formas geométricas presentes nos edifícios [Jähne e Haußecker, 2000]. Detecção e segmentação: Em [Gonzalez e Woods, 2000], o autor cita que em algum ponto do processo, uma decisão é feita sobre a importância de uma ou mais regiões da imagem. Neste passo visa dividir a imagens em partes ou objetos para facilitar sua análise, um exemplo prático seria em um sistema de reconhecimento de caracteres, onde a segmentação extrairia os caracteres presentes na imagem. A Figura 3.7 ilustra um exemplo de segmentação. 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 existência do mesmo, por último na Figura 3.7(c), temos a identificação do objeto de interesse na imagem. 9

Figura 3.6: Exemplo de extração de borda e contorno. Figura 3.7: Exemplo de segmentação de imagem [Júnior, 2009]. Representação: No passo de representação é uma parte da solução para transformar os dados da imagem em uma forma adequada de dados, agrupando-os e armazenando os diversos padrões presentes no objeto [Jähne e Haußecker, 2000]. São enfatizadas as características de interesse para o passo seguinte. No exemplo de reconhecimento de caracteres, buracos e concavidades são características importantes que ajudam na distinção de algumas letras [Gonzalez e Woods, 2000]. Outro exemplo de representação pode ser visto na Figura 3.8; na Figura 3.8(a) temos a imagem sem a presença do objeto. Na Figura 3.8(b) temos a presença do objeto na imagem; a localização através da segmentação pode ser vista na Figura 3.8(c). No último passo (Figura 3.8(d)), a imagem é transformada para preto e branco contendo apenas o contorno do objeto, neste caso o contorno poderia representar que o objeto está em movimento. Figura 3.8: Exemplo de uma representação [Júnior, 2009]. 10

Interpretação: Por fim, no passo de interpretação permite a atribuição de significado ao conjunto de objetos reconhecidos na imagem [Gonzalez e Woods, 2000]. Geralmente neste passo, a entrada é uma quantidade pequena de dados provinda dos passos anteriores, efetuando uma classificação dos objetos detectados em diferentes categorias [Jähne e Haußecker, 2000]. No exemplo de reconhecimento de caracteres, este passo seria responsável por identificar que um determinado conjunto de objetos, onde neste caso, cinco números seguidos por um hífen e outros três números representa um código de endereço postal, porém 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 mãos, resultando na execução de uma música (Figura 3.9(c)). Figura 3.9: Exemplo de reconhecimento das mãos para execução de uma determinada música [Júnior, 2009]. 3.3 Busca por Objetos No trabalho de [Fu e Mui, 1981], na visão computacional o primeiro passo em análise de imagens é a segmentação da imagem; como foi discutido anteriormente aplicação de técnicas de segmentação é importante para medição, quantificação ou identificação de objetos em uma cena. As técnicas de segmentação de imagens podem ser baseadas nas características de um determinado pixel como cor e intensidade; o mesmo é capaz de identificar pontos, linhas, bordas e combina-los. De acordo com [Carvalho et al., 2005], a detecção de faces em uma imagem, pode ser caracterizada pela utilização de técnicas de extração de contorno para localização e identificação de formas geométricas características de um rosto humano, variações de cores e detecção de determinadas características faciais, como sobrancelhas, orelhas, olho, boca, etc. Neste trabalho foi utilizo a técnica de segmentação proposta por [Viola e Jones, 2001]. Este método 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 técnica pode ser usado para detectar faces humanas ou qualquer outro objeto dependendo do treinamento inicial. Nos trabalhos apresentados em [Castrillón-Santana et al., 2008] e [Lienhart e Maydt, 2002] é deixado bem claro a eficiência na detecção de faces do método proposto acima. O algoritmo de Viola-Jones é composto de três partes distintas que o distingue de outros, elas são: (1) a criação da imagem integral, (2) a utilização do algoritmo Adaboost para classificação utilizando características Haar-like e (3) a criação de uma estrutura em árvore, chamada classificadores em cascata [Oliveira, 2008]. 3.3.1 Imagem Integral De acordo com [Santos, 2008], o método da imagem integral foi abordado para ser possível localizar de maneira eficiente a presença ou não de uma característica Haar-like em diversas localizações (sub-janelas) na imagem em que se quer localizar um objeto. Esta técnica corresponde ao somatório dos valores da intensidade de todos os pixels localizados acima e a esquerda do pixel em questão. Na Figura 3.10 temos o exemplo de quatro sub-janelas em uma imagem qualquer, onde o valor da imagem integral na posição 1 é o resultado da soma da intensidade dos pixels no retângulo A. O valor da posição 2 é igual a soma de A+B, para a posição 3 é A+C e por último a posição 4, o valor é a soma de A+B+C+D. Para obter os valores dos pixels do retângulo D o resultado é dado por 4+1-(2+3) [Santos, 2008]. Para descobrir o valor médio desta região, basta dividir o valor do somatório da intensidade dos pixels pela quantidade dos mesmos. Os processos seguintes serão realizados com base no valor da imagem integral como citado acima. Figura 3.10: Exemplos de cálculos com imagem integral [Viola e Jones, 2001]. Na Figura 3.11 mostra as características do tipo Haar-like, cada uma contém retângulos claros e escuros que representam as regiões da característica. O resultado referente à soma 12

dos valores de intensidade dos pixels entre as regiões claras são subtraídas pela soma das regiões escuras (Figura 3.12(a)); este valor encontrado representa a característica determinada para aquela região na imagem (Figura 3.12(b)). Esta técnica é eficiente para avaliar se existe ou não uma característica Haar-like em uma determinada posição na imagem [Araujo, 2010]. Figura 3.11: Características Haar-like [Viola e Jones, 2001]. Figura 3.12: Exemplo de cálculo de um elemento de característica Haar-like. 3.3.2 Algoritmo AdaBoost De acordo com [Kuncheva, 2004] o algoritmo de aprendizado AdaBoost é uma variação do Adaptive Boosting. O mesmo define quais das características Haar-like serão utilizadas e quais os valores dos limiares para cada uma das características. De acordo com [Viola e Jones, 2001] um bom classificador não necessita de uma grande quantidade de características Haar-like, o mesmo pode ser obtido pela combinação de um número pequeno das mesmas; tornando um dos principais problemas, escolher qual das características é mais indicada para alcançar o resultado desejado. 13

Nas Figuras 3.13(a) e 3.13(b) o algoritmo escolheu as duas características Haar-like para identificação da face na imagem positiva de entrada (Figura 3.13(c)). Nas Figuras 3.13(d) e 3.13(e) mostra a sobreposição das características Haar-like na mesma imagem de entrada. Na Figura 3.13(d) é possível perceber que a característica selecionada foi a de dois retângulos na altura dos olhos e do nariz, neste caso o algoritmo percebeu a diferença de luminosidade na imagem entre o nariz e a região dos olhos. Enquanto na Figura 3.13(e) a diferença de luminosidade esta entre a região dos olhos e a testa [Santos, 2008]. Figura 3.13: Características Haar-like selecionadas pelo AdaBoost [Santos, 2008]. Para que a identificação seja executada rapidamente, é necessário ter uma sequencia de classificadores em ordem crescente, onde os primeiros classificadores contém uma quantidade de característica muito menor que os últimos, ou seja, o primeiro classificador já descarta a maioria das sub-janelas que não contém o objeto com muito pouco processamento, pois realiza o cálculo para apenas duas características Haar-Like; segundo [Viola e Jones, 2001] esta operação executa apenas 60 instruções de um microprocessador. Os próximos classificadores executam o mesmo procedimento citados acima, porém utilizando uma quantidade maior de características Haar-like. À medida que a sub-janela vai avançando, outros classificadores mais complexos são aplicados, consequentemente mais processamento é necessário, esta estrutura de formação hierárquica dos classificadores é conhecida como árvore de decisão em cascata, se a subjanela passa por todos os classificadores da árvore, a mesma é reconhecida como face [Santos, 2008]. 14

3.3.3 Árvore de Decisão Na etapa de aprendizado do AdaBoost, o algoritmo é responsável por escolher as características Haar-like para cada classificador e treina-lo da melhor maneira possível. O resultado do processo de aprendizagem são os classificadores fracos, cada um contendo um limiar e características Haar-like; todos são combinados, resultando em um classificador forte visando minimizar a ocorrência de falsos positivos durante a busca [Araujo, 2010]. A Figura 3.14 mostra os passos através 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 aplicação do treinamento baseado em meta heurística AdaBoost, os últimos classificadores são treinados com as amostras que os primeiros não conseguiram identificar de maneira correta, ou seja, os falsos positivos que passaram pelos classificadores iniciais não irão passar pelos próximos classificadores [Santos, 2008]. Esta abordagem demonstra a eficiência na localização de um objeto em uma imagem. No próximo capítulo aborda a descrição detalhada do protótipo deste trabalho. Figura 3.14: Exemplo do classificador em cascata [Ma, 2007]. 15

Capítulo 4 Desenvolvimento 4.1 Abordagem Inicial Neste capítulo serão abordados todos os passos realizados para se chegar ao resultado esperado deste trabalho. Para o desenvolvimento foi utilizado a linguagem de programação 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 operacionais Unix e Windows. A biblioteca contém interface de desenvolvimento para as linguagens de programação C, C++ e Python; a mesma contém mais de 2000 técnicas robustas e eficientes voltadas para computação aplicado nas áreas de processamento de imagens, visão computacional e com um forte foco em aplicações com imagens em tempo real [Bradski e Kaehler, 2008]. O hardware envolvido no desenvolvimento e testes do protótipo foi um notebook, com tela de 15,4 polegadas, processador Intel Core i3 2,26GHz com 3GB de memória RAM, o sistema operacional é o Windows 7 Ultimate 64 Bits. Para a programação foi utilizada a plataforma de desenvolvimento Microsoft Visual Studio C++ 2010 Express Edition que é disponibilizada gratuitamente no site do software e é de simples configuração a integração da biblioteca OpenCV. Para atender a proposta deste trabalho, a webcam utilizada é que vem integrada no notebook, uma webcam com resolução baixa de 640 X 480 pixels. Esta decisão visa o funcionamento do protótipo sem a necessidade de criação ou compra de um hardware especial como acontece em [Nascimento, 2009] que utiliza uma webcam com iluminação especial acoplado em um óculos para identificação da íris. Com esta escolha, a mesma influenciou na precisão final do protótipo, pois a ideia inicial era o desenvolvimento de um protótipo que rastreasse as coordenadas do centro da pupila do olho do usuário, fazendo uma referência desta coordenada com uma coordenada qualquer no monitor, com isso para qualquer região que o usuário olhasse na tela o mouse 16

iria se mover para a mesma. A aplicação da ideia inicial não foi possível pelo fato da webcam não ter resolução e qualidade suficiente para extração das borda do olho e o círculo da íris para a localização do centro da pupila. A abordagem deste trabalho foca com a comparação de imagens da região dos olhos do usuário, descrita com mais detalhes neste capítulo. A mesma não é tão precisa quanto à primeira, mas bons resultados com os recursos de hardware presentes foram alcançados. Os passos de execução do protótipo podem ser observados na Figura 4.1, onde cada retângulo representa um passo importante para obter o resultado esperado, sendo eles Carregar Modelos, Obter Imagem, Localizar Olhos, Pré-processamento, Comparar Modelo de Decisão e por último Mover Cursor. Figura 4.1: Passos de execução do protótipo proposto. Carregar Modelos: Neste passo é carregado em memória o classificador XML (Extensible Markup Language) para localização da região dos olhos e as imagens para comparação em tempo de execução, estas imagens são chamadas de Modelos de Decisão. Obter Imagem: Neste passo é responsável por obter o fluxo de imagens do usuário captadas pela webcam. Localizar Olhos: Em cada imagem captada pela webcam no passo anterior é feita a busca para identificação da região dos olhos do usuário. Pré-processamento: Neste passo é efetuado o tratamento na imagem da região dos olhos obtida do passo anterior, este tratamento tem como objetivo realçar as carac- 17

terísticas presente na imagem deixando-a mais adequada para o próximo passo. Comparar Modelo de Decisão: Com a imagem pré-processada o próximo passo é compara-la com todas as imagens em memória (Modelos de Decisão) visando descobrir em qual direção o usuário esta focando o olhar. Esta comparação leva em conta com qual dos modelos a imagem mais se parece. Mover Cursor: No último passo é movimentado o cursor do mouse para a direção da região resultante do passo anterior. Após a movimentação do cursor do mouse, o protótipo pode ter dois possíveis estados, onde o protótipo teria sua execução finalizada ou voltar para o passo Obter Imagem. Caso o protótipo não seja finalizado será obtida a próxima imagem do fluxo da webcam sendo aplicado todos os passos até a nova movimentação do mouse. Todos os passos acima serão detalhados mais adiante neste capítulo. 4.2 Restrições Antes de descrever todos os passos do protótipo é necessário que algumas restrições sejam obedecidas, tais como manter a cabeça na posição reta, com toda a face do usuário de frente, centralizada e visível para captura da webcam, visando o processamento correto da região dos olhos. A Figura 4.2 mostra alguns exemplos de posições do usuário em frente a webcam, note que o único posicionamento correto é da Figura 4.2(a); enquanto na Figura 4.2(b) mostra a posição do usuário mais a esquerda na imagem, nesta posição o olhar do usuário não tem deslocamento da íris para a esquerda quando o mesmo olhando nesta região do monitor, já nos demais exemplos se torna impossível da localização da região dos olhos necessária para o funcionamento correto do protótipo. 4.3 Carregar Modelos No início da execução do protótipo ocorre com o carregamento em memória das imagens dos modelos de decisão e do classificador XML que serão abordados com mais detalhes mais adiante neste capítulo. Os modelos de decisão são imagens da região dos olhos já processadas e criadas pelo protótipo a partir de imagens do usuário. As mesmas servirão de modelos para comparação com a imagem da região dos olhos do usuário capturadas em tempo real pela webcam. 18

Figura 4.2: Exemplos de posições do usuário em frente a webcam. Para a criação dos modelos de decisão, o usuário deverá olhar em alguns pontos da tela do computador. As imagens modelos da região dos olhos do usuário são processadas, salvas em um diretório do protótipo e são carregadas em memória uma única vez no início a cada execução do mesmo. Os modelos de decisão são divididos em cinco classificações das regiões no monitor, com elas o protótipo poderá identificar para qual das cinco regiões o usuário 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 região o usuário esta olhando no monitor. Para cada região é captura uma imagem da região dos olhos do usuário, a mesma é pré-processada e salva pelo protótipo. Figura 4.3: Pontos na tela onde o usuário tem que olhar, tanto para a criação dos modelos quanto para o funcionamento do protótipo. 19

Figura 4.4: Modelos de decisão: Imagens capturadas do usuário olhando para cada região no monitor. Também é neste passo que é efetuado carregamento do arquivo classificador no formato XML, o mesmo contém os modelos de classificação de reconhecimento da região dos olhos baseado na técnica de segmentação para busca em tempo real proposta em [Viola e Jones, 2001], na Figura 4.5 representa uma pequena parte da codificação deste classificador mostrando descrição dos retângulos presentes na característica e dos valores obtidos após o treinamento em uma imagem positiva. Uma vantagem desta técnica de busca é para alterar o objeto a ser localizado basta carregar o classificador referente ao mesmo. A OpenCV contém diversos classificadores prontos para serem utilizados em aplicações, 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 localização da região na imagem que contenha o par de olhos, este classificador contém 15000 amostras negativas e 7000 amostras positivas de pares de olhos detectados, de tamanho 45x11 pixels cada [Castrillón Santana et al., 2007]. Com essa classificador é possível a localização do par de olhos disponível em qualquer face em uma imagem estática ou em tempo real [Bradski e Kaehler, 2008]. Figura 4.5: Parte da codificação do arquivo classificador no formato XML. 20

4.4 Obter Imagem Com os modelos carregados em memória no passo anterior, agora é obter o fluxo de vídeo da webcam. Este passo é responsável pela entrada da imagem do usuário para alcançar o resultado proposto. O fluxo de vídeo da webcam processado pelo protótipo é cerca de 30 FPS (Frames Por Segundo) ou seja 30 imagens capturadas do usuário, onde cada uma vai passar pelos demais passos para a movimentação do cursor do mouse. No trabalho proposto em [Jackson, 1995], este valor obtido (30 FPS), para a indústria, é o mínimo para poder determinar sendo um fluxo de vídeo com qualidade. Esta informação é de suma importância para a resposta do movimento do cursor do mouse, não sendo perceptível qualquer atraso em todos os passos do processamento da informação, desde a captura da image até a movimentação do cursor. 4.5 Localizar Olhos Para o processo de reconhecimento da região dos olhos em imagens utilizada neste trabalho, é uma técnica de aprendizado de máquina baseada nas características Haar-like vista na seção 3.3. Esta foi proposta por [Viola e Jones, 2001] e em [Viola et al., 2005] sendo aperfeiçoada por Rainer Lienhart e faz parte das técnicas de busca disponíveis na biblioteca OpenCV. A mesma é capaz de processar imagens em alta velocidade com altas taxas de acertos; para sua utilização é necessário o classificador citado anteriormente com as características do objeto para busca do mesmo. A abordagem de busca de [Viola e Jones, 2001] através das características Haar-like é muito interessante, esta abordagem codifica a existência dos contrastes entre regiões da imagem. O conjunto destas informações podem ser usadas codificando regiões de contraste localizadas, por exemplo, em uma face humana. Este método de busca através das características comuns presentes no objeto visa tornar a detecção em um processo mais eficiente. Para a utilização do método de detecção é necessário a utilização do classificador citado anteriormente. O classificador é obtido após 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 classificação de Imagens Positivas. São utilizadas outras imagens durante o treinamento, sendo imagens aleatórias que não contenha o objeto em questão, estas são 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 representação das Imagens Positivas e Imagens Negativas, aplicando-as no método de treinamento disponível na biblioteca OpenCV obteremos o classificador XML conforme a Figura 4.6(b). Aplicando 21

o método de busca em uma imagem qualquer utilizando este classificador (Figura 4.6(b)), obteremos a localização de todas as faces na foto (Figura 4.6(c)). Figura 4.6: Exemplo de criação de classificador e utilização do método de busca Haar de faces em uma imagem. Como pode ser visto em [Castrillón-Santana et al., 2008] e [Júnior, 2009] a aplicação desta técnica acima é bastante eficiente. Na Figura 4.7 mostra a região dos olhos encontrado pelo método de classificação Haar delimitada pelo retângulo vermelho. A aplicação no fluxo de vídeo da webcam, retorna apenas a região dos olhos do usuário necessária para atingir o objetivo proposto, sendo o restante da imagem eliminado para evitar processamento desnecessário que pode prejudicar o desempenho final. Figura 4.7: Região do par de olhos encontrados delimitado pelo retângulo vermelho. 22

4.6 Pré-processamento O próximo passo é de pré-processamento da imagem na região dos olhos retornado do passo anterior. Esta etapa é de suma importância nesta parte do protótipo, a imagem captada é convertida de imagem colorida para imagem em escala de cinza, este processamento é necessário para a aplicação do próximo método de processamento visando a melhora do contraste da imagem. No trabalho de [Gonzalez e Woods, 2000] a representação do contraste é uma medida qualitativa e que está relacionada com a distribuição dos tons de cinza em uma imagem. O histograma é a representação gráfica desta distribuição dos níveis de cinza de uma imagem. A técnica equalização de histograma tem como objetivo melhorar a qualidade da imagem obtendo o melhor contraste da imagem capturada. Na Figura 4.8 tem a representação dos histogramas de quatro imagens básicas, 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 última, uma imagem de alto contraste (Figura 4.8(d)). Figura 4.8: Histogramas referentes a quatro tipos básicos de imagens [Gonzalez e Woods, 2000]. Esta técnica melhora o contraste da imagem, resolvendo parcialmente a questão do problema de variação de luminosidade no ambiente, pois mesmo com uma mudança significativa na claridade, mais escuro ou mais claro, o resultado da equalização preserva as características importantes para o passo seguinte na execução do protótipo. A Figura 4.9 mostra a melhora na imagem após aplicação das técnicas de processamento de imagens, onde temos a imagem colorida a esquerda, ao centro a imagem em 23

escala de cinza e a direita a imagem após a equalização de seu histograma. Figura 4.9: Aplicação de Técnicas de processamento de Imagens, temos respectivamente a imagem colorida, a mesma em escala de cinza e após a equalização do histograma 4.7 Comparar Modelo de Decisão Com a imagem processada, o próximo passo é a comparação desta com os modelos de decisão. Como visto na seção 4.3, os modelos de decisão são imagens processadas do usuário focando o olhar nos pontos determinados na região do monitor carregada em memória no início da execução do protótipo. A região dos olhos encontrada em cada frame da webcam, é comparada após o pré-processamento com todos os modelos de decisão. No trabalho apresentado em [Bradski e Kaehler, 2008] descreve claramente a eficiência do método proposto para comparação de duas imagens disponível na OpenCV; este processo é feito pixel-a-pixel levando em conta a posição do mesmo na imagem. Para cada comparação com o modelo, é retornado um valor referente a igualdade das duas imagens, onde se o retorno for zero significa que as duas imagens são idênticas, caso for diferente de zero, significa que as imagens não são iguais, quanto maior este valor maior a diferença entre mesmas. Durante a execução do protótipo a imagem pré-processada originada do passo anterior é comparada com as imagens dos modelos de decisão. Este passo de comparação visa identificar com qual dos modelos em memória a imagem obtida em tempo real mais se parece. Esta identificação é importante para determinar para qual sentido o cursor do mouse tem que se mover. Na Figura 4.10 representa o método de comparação citado anteriormente, onde cada imagem do modelo de decisão que representa uma região do monitor é comparada com a imagem da obtida pela webcam em tempo real. O resultado deste processo comparativo entre as imagens dos modelos de decisão e a imagem pré-processada da região dos olhos do usuário, obtida pela webcam, pode ser visto na tabela 4.1. Com a identificação do menor valor de comparação na tabela, podemos associar que o usuário esteja olhando para aquela determinada região no monitor, com isso definimos para qual direção o cursor do mouse deverá se mover. 24

Figura 4.10: Imagem sendo comparada com os modelos de decisão carregados em memória Tabela 4.1: Resultado da comparação da imagem obtida na webcam com os modelos de decisão conforme a Figura 4.10 Resultado da Comparação 4.8 Mover Cursor Modelo Resultado Imagem 1 6345 Imagem 2 4789 Imagem 3 5234 Imagem 4 7123 Imagem 5 2145 Com o resultado da comparação com os modelos de decisão, agora é possível movimentar o cursor do mouse para o lado que o usuário esta olhando, para cada região dos olhos encontrada no frame, o protótipo pega no momento localização (x,y) do mouse no monitor e altera os valores da posição cartesiana; como exemplo, se for constatado que o usuário estiver olhando para a região em cima o valor de posição Y terá seu valor decrementado, por outro lado, se o usuário estiver olhando na região em baixo do monitor, o valor de posição Y terá seu valor incrementado. O mesmo vale para quando o usuário estiver olhando para a região esquerda e para a região direita do monitor; sendo para esquerda o valor de posição X será decrementado e para a direita o valor de posição X será incrementado. Ao contrário desses quatro pontos, o central não modifica a posição do cursor, o mesmo serve apenas como referência para os demais modelos de decisão. No próximo capítulo será abordada a parte referente aos testes no protótipo e análises dos resultados dos mesmos. 25

Capítulo 5 Análise e Resultados 5.1 Detalhes dos Testes Neste capítulo serão abordados os testes no protótipo e a análise dos resultados. Para execução dos testes, foram levadas em consideração algumas possíveis posições do usuário durante o uso do mesmo, sendo que ao utilizar um computador as pessoas fazem diversos movimentos com o tronco e com a cabeça, estes movimentos, mesmo que involuntários podem afetar diretamente o funcionamento do protótipo. Este posicionamento do usuário em frente ao computador pode variar dependendo do comportamento, postura, etc. Porém os testes foram aplicados nas possíveis posições permitidas para o uso do protótipo respeitando as restrições vistas na Seção 4.2. As situações de postura em frente a webcam para os testes foram: Posicionamento Ideal. Neste caso o usuário se mantém em frente ao computador na mesma posição e distância de quando foram gerados os modelos de decisão. Movimento da Face. Neste posicionamento, o usuário move a face para qualquer lado, mas sempre permitindo a captação da região dos olhos. Usuário Distante. No último caso, o usuário se encontra mais afastado do computador. Os testes foram executados visando reconhecer os limites e o desempenho final do protótipo. Para cada teste foi verificado a capacidade de reconhecimento do usuário olhando nos pontos definidos para funcionamento do protótipo. Para cada um dos cinco pontos foi executado 500 comparações com imagens em tempo real do usuário, totalizando 2500 comparações para da cada posicionamento. Os resultados dos testes estão divididos em dois grupos distintos, um grupo referente aos Acertos e outro de Erros. No grupo de acertos foram computadas as comparações 26

corretas, onde o usuário olhava para uma determinada região e o protótipo movimentou o cursor do mouse para o sentido correto. No grupo de erros foi contabilizada a quantidade de interpretações erradas do protótipo, onde o usuário olhava para uma determinada região no monitor e o mesmo interpretava outra. 5.2 Testes e Análises Como citado anteriormente, os testes levaram em consideração três possíveis posicionamento do usuário em frente ao computador. No primeiro teste é aplicado na posição ideal, onde o usuário mantém a face estática e com uma distância próxima ao monitor, por volta de 30 a 40 centímetros; de preferência similar quando foi calibrado no protótipo na geração dos modelos de decisão. No segundo teste refere-se ao usuário movimentando a face para algum dos lados, mas sendo possível a captação da região dos olhos. No último teste representa o usuário mais afastado da tela, ou seja, com uma distância maior da posição da geração dos modelos que ocorre durante a calibração. O primeiro teste foi com a cabeça na mesma distância e posição de criação dos modelos de decisão, como citado anteriormente, esta posição é a ideal para a utilização do protótipo, pois as imagens captadas tiveram um índice de igualdade excelente. Para este caso o resultado alcançado 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 direções consideradas. Figura 5.1: Imagem obtida durante a aplicação 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 cabeça na mesma distância de criação dos modelos de decisão, porém com variações da face do usuário, 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 usuário olhando para a região central com a face voltada para a região a direita do monitor, este movimento com a face pode influenciar na decisão para qual sentido o mouse deverá se mover. Com a execução dos cálculos de comparação com os modelos de decisão, a região dos olhos desta imagem poderia se parecer com a outra, neste caso a região esquerda, logo o protótipo 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 aplicação do segundo teste. O terceiro e último teste foi com a mesma posição de criação dos modelos de decisão e com variação na distância, onde neste caso o usuário 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 distância maior do monitor o olhar do usuário permanece voltado para a mesma região, porém com um deslocamento da íris menor, esta diferença influencia principalmente para identificar o olhar nas regiões Em Cima, Centro e Em Baixo, pois o deslocamento da íris é menor, resultante ao formato Widescreen do monitor. Outro ponto interessante destes testes é que em hipótese temos que, com um monitor com um tamanho maior possivelmente os resultados seriam melhores, para este caso da distância, um monitor maior poderia garantir um resultado mais preciso diante do método de comparação com os modelos de decisão. Na tabela 5.3 consta os resultados deste teste. Figura 5.3: Imagem obtida durante a aplicação do terceiro teste. Ao concluir os testes é possível ver claramente a eficiência do protótipo quando o usuário está na posição de criação dos modelos de decisão. Uma vantagem da abordagem comparativa de imagens é que o protótipo 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 óculos, claro que para isso dependeria de condições de luminosidade no ambiente; e também para pessoas que sofrem de estrabismo, que é a perda de paralelismo dos olhos. O protótipo 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 segundo, isso ocorreu devido à busca da região dos olhos através do template, tendo em vista que o posicionamento da face do usuário está ao centro da imagem, sendo assim, comparações desnecessárias são feitas nas extremidades da imagem. Este trabalho, baseado na técnica de busca de [Viola e Jones, 2001] e com comparação com imagens em memória, o resultado chegou a 30 frames por segundo, dando resposta imediata ao movimento do olho do usuário, desde a captação até o deslocamento do cursor do mouse. No modelo semelhante ao proposto neste trabalho, apresentado em [Peixoto et al., 2008], é utilizado técnicas de comparação de imagens utilizando três métodos de redes neurais. O resultado alcançado obtido pelo protótipo apresentado aqui é superior quando comparado com o melhor resultado destas três técnicas para identificar a região que o usuário está olhando. Uma característica importante é a utilização de uma simples webcam que está agregada ao notebook, sendo assim, não há a necessidade de um equipamento específico para localização dos olhos, não precisando comprar ou criar nenhum hardware para a execução de rastreamento como acontece em [Nascimento, 2009]. No próximo capítulo aborda as considerações finais deste trabalho. 30

Capítulo 6 Conclusão A execução deste trabalho a respeito da utilização de técnicas de Processamento de Imagens Digitais e Visão Computacional para o desenvolvimento de uma interface homemcomputador propiciou um entendimento satisfatório sobre o assunto. Como conclusão deste trabalho obtém a resposta para a questão levantada no Capítulo 1, mostrando que se respeitado algumas restrições de posicionamento é possível a criação de um protótipo para interpretação do olhar do usuário para a movimentação do cursor do mouse O modelo resultante é baseado em técnicas de processamento digital de imagens e visão computacional, que estão entre as áreas que mais crescem na área da computação devido a sua capacidade de abranger diversos segmentos de aplicações. Outra característica importante foi a utilização da biblioteca OpenCV, a mesma demonstrou ser muito eficiente e de simples utilização refletindo no bom resultado final. Dentre as características deste protótipo a que mais se destaca é a não necessidade de um hardware específico para seu funcionamento. Uma característica que deixou a desejar é a não existência de um gerenciamento dos usuários, necessitando a calibração do protótipo toda vez que trocar de usuário. Os resultados dos testes mostram um grande potencial do protótipo, mostrando que o modelo proposto pode ser empregado para o auxílio de pessoas portadoras de deficiência física, proporcionando maior acesso à informação, conhecimento, independência e interação social. Como possíveis trabalhos futuros, pode-se apontar: Melhoria da imagem, aplicando filtros mais eficientes de processamento em para solução de ambientes com pouca luminosidade. Criar ambiente gráfico para criação dos modelos de decisão e execução do protótipo, possibilitando o mesmo ficar mais simples e intuitivo em seu uso. Agregar eventos de click do mouse associando os botões aos olhos, sendo que, quando o usuário piscar um determinado olho este representaria um dos botões do mouse. 31

Agregar cálculo do ângulo tridimensional da cabeça para melhorar a precisão quando o usuário movimenta a face para algum sentido. Agregar cálculo de deslocamento da região do usuário perante a webcam, para não necessitar do usuário permanecer no centro da imagem captada, proporcionando mais liberdade para o mesmo. Agregar funcionalidade para o protótipo não só movimentar o cursor do mouse, mas também identificar o usuário que esta utilizando o mesmo. Utilização do protótipo para interação em jogos eletrônicos com interação do meio através do olhar. 32

Referências Araujo, G. C. (2010). Algoritmo para reconhecimento de características faciais baseado em filtros de correlação. 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). Detecção e extracção de características do olho humano a partir de um modelo protótipo deformável. ENVC2005-Encontro Nacional de Visualizaçãoo Cientifica. Castrillón-Santana, M., O. Déniz-Suárez, 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. Castrillón-Santana, M., Déniz-Suárez, O., Antón-Canalís, L., e Lorenzo-Navarro, J. (2008). Face and facial feature detection evaluation. In International Conference on Computer Vision Theory and Applications. Castrillón Santana, M., Déniz Suárez, O., Hernández 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 deficiência. Disponível em: http://www.ibge.gov.br/home/presidencia/noticias/noticia visualiza.php id noticia=438&id pagina=1. Acessado em: Março de 2011. Jackson, M. (1995). Software requirements & specifications. 8. Jähne, B. e Haußecker, H. (2000). Computer vision and applications: a guide for students and practitioners. Academic Pr. Jähne, B., Haußecker, H., e Ray, L. (2002). Computer vision and applications: A guide for students and practitioners. Journal of Electronic Imaging, 11:115. Júnior, J. B. (2009). Novo aeon: Um ambiente de programação para visão computacional. Monografia, Departamento de Ciência da Computação, Universidade Federal da Bahia. 33

Kuncheva, L. (2004). Combining pattern classifiers: methods and algorithms. Wiley- Interscience. Leão, L. P. S. P., Marques, T. P., e Matos, L. N. (2011). Sistema atencional para detecção 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). Avaliação de características haar em um modelo de detecção 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). Técnicas de processamento digital de imagens para captação e interpretação do movimento ocular. Monografia, Universidade Federal de Goiás. Nascimento, L. A. (2009). Uma interface humano inteligente baseada inteligente baseada no rastreamento ocular para comunicação escrita de pacientes com síndrome locked-in. Monografia, Universidade Federal de Pernambuco. Oliveira, E. (2008). Captura de expressões faciais para identificação de emoções básicas em humanos. Monografia, Universidade do Vale do Rio dos Sinos. Peixoto, H., de Farias Gomes, S., et al. (2008). Classificação da direção 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 Computação. 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). Inclusão sociodigital de portadores de necessidades especiais. page 9. Santos, K. E. A. (2008). Uma implementação do algoritmo haar-cascade para localização facial. Monografia, Universidade do Vale do Rio dos Sinos. Souza, L. (2008). Dendrocronologia digital. Monografia, Departamento de Ciência da Computação, Universidade Federal de Goiás. 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 iluminação com led infravermelho. XXI Congresso Brasileiro de Engenharia Biomédica, 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

Apêndice A Código Fonte A.1 Classe eyemouse 1 // eyemouse2. cpp : D e f i n e s the entry point f o r the c o n s o l e a p p l i c a t i o n. 2 // 3 4 #i n c l u d e s t d a f x. h 5 #i n c l u d e <s t d i o. h> 6 #i n c l u d e <highgui. h> 7 #i n c l u d e cv. h 8 9 CvHaarClassifierCascade cascade, c a s c a d e e ; 10 CvMemStorage s t o r a g e ; 11 IplImage imgcentro [ 5 ], imgcima [ 5 ], imgbaixo [ 5 ], imgesquerda [ 5 ], imgdireita [ 5 ] ; 12 13 i n t img no ; 14 i n t tipopr ; 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 e y e c a s c a d e = xml/ h a a r c a s c a d e m c s e y e p a 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 execução do programa 27 // 1 Gerar Modelos 36

28 // 2 Mostrar J a n e l a s 29 // 3 Funcionamento Normal 30 tipopr = 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 l h o s 37 s t o r a g e = cvcreatememstorage ( 0 ) ; 38 cascade = ( CvHaarClassifierCascade ) cvload ( f a c e c a s c a d e, 0, 0, 0 ) ; 39 c a s c a d e e = ( CvHaarClassifierCascade ) 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 c a s c a d e e ) ) { 43 f p r i n t f ( s t d e r r, ERRO: Não f o i p o s s i v e l c a r r e g a r os c l a s s i f i c a d o r e s cascade \n ) ; 44 return 1; 45 } 46 // 47 48 49 // 50 // Carregar modelos em memoria 51 i f ( tipopr == 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 t d e r r, Não 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 return 1 ; 65 } 66 // 67 68 // Cria uma j a n e l a para e x i b i ç ã 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 ( tipopr == 2) { 73 cvnamedwindow( o l hos1, CV WINDOW AUTOSIZE ) ; 74 cvnamedwindow( o l hos2, CV WINDOW AUTOSIZE ) ; 75 cvnamedwindow( o l hos3, CV WINDOW AUTOSIZE ) ; 76 } 77 78 while ( key!= q ) { 79 // Pega o frame 80 frame = cvqueryframe ( capture ) ; 81 82 // checa o frame 83 i f (! frame ) break ; 84 85 // c a r r e g a o frame na j a n e l a 86 d e t e c t F a c i a l F e a t u r e s ( frame ) ; 87 88 cvshowimage ( r e s u l t, frame ) ; 89 90 // s a i r quando a p e r t a 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 ( tipopr == 2) { 99 cvdestroywindow ( olhos1 ) ; 100 cvdestroywindow ( olhos2 ) ; 101 cvdestroywindow ( olhos3 ) ; 102 } 103 cvreleasecapture ( &capture ) ; 104 return 0 ; 105 } 106 107 108 109 i n t d e t e c t F a c i a l F e a t u r e s ( IplImage img ) 110 { 111 IplImage eyefind, eyefindgray ; 112 i n t w = ( img ) >width ; 113 i n t h = ( img ) >h e i g h t ; 38

114 i n t i ; 115 i n t acao = 0 ; 116 CvSeq f a c e s, o l h o s ; 117 CvRect r ; 118 CvMemStorage s t o r a g e=cvcreatememstorage ( 0 ) ; 119 cvclearmemstorage ( s t o r a g e ) ; 120 121 // V e r i f i c a se o modelo de busca dos o l h o s e s t a OK 122 i f ( c a s c a d e e ) 123 o l h o s = cvhaardetectobjects ( img, cascade e, storage, 1. 1 5, 3, 0, c v S 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 l h o s não carregado ) ; 126 127 // Para cada img dos o l h o s encontrada 128 f o r ( i = 0 ; i < ( o l h o s? 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 ã o 134 cvrectangle ( img, cvpoint ( r >x, r >y ), cvpoint ( r >x + r > width, r >y + r >height ), 135 CV RGB( 255, 0, 0 ), 1, 8, 0 ) ; 136 137 // Imprimir dados da coordenada no c o n s o 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 >h e i g h t ) ; 139 140 // Definindo r e g i ã o de i n t e r e s s e onde encontrou os o l h o s 141 cvsetimageroi ( img, cvrect ( r >x, r >y, r >width, r >height ) ) ; 142 143 // Criar imagem da r e g i ã o encontrada 144 eyefind = cvcreateimage ( c v S i z e ( r >width, r >height ), img > depth, img >nchannels ) ; 145 eyefindgray = cvcreateimage ( c v S i z e ( r >width, r >height ), IPL DEPTH 8U, 1 ) ; 146 147 // Copiando a r e g i ã 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 ( tipopr == 2) { 152 // Mostrar r e g i ã o olho encontrado 153 cvshowimage ( o l hos1, eyefind ) ; 39

154 } 155 // 156 157 158 //Mudando cor da imagen de c o l o r i d a para c i n z a 159 cvcvtcolor ( img, eyefindgray, CV RGB2GRAY ) ; 160 161 // 162 i f ( tipopr == 2) { 163 // Mostrar r e g i ã o olho c i n z a encontrado 164 cvshowimage ( o l hos2, eyefindgray ) ; 165 166 } 167 // 168 169 // Equalizando o histograma da imagem em e s c a l a de c i n z a 170 c v E q u a l i z e H i s t ( eyefindgray, eyefindgray ) ; 171 172 // 173 i f ( tipopr == 2) { 174 // Mostrar r e g i ã o olho c i n z a equalizadoencontrado 175 cvshowimage ( o l hos3, eyefindgray ) ; 176 } 177 // 178 179 // 180 i f ( tipopr == 1) { 181 img no = 0 ; 182 criamodelos ( eyefindgray ) ; 183 } 184 // 185 186 187 // 188 //PROCESSAMENTO PRINCIPAL 189 i f ( tipopr == 3) { 190 acao = comparaimagem ( eyefindgray ) ; 191 executaacao ( acao ) ; 192 } 193 194 // detecteyes ( img, r ) ; 195 // r e s e t r e g i o n o f i n t e r e s t 196 cvresetimageroi ( img ) ; 197 } 198 // r e s e t r e g i o n o f i n t e r e s t 40

199 cvresetimageroi ( img ) ; 200 return 0 ; 201 } 202 203 / 204 comparaimagem ( ) Metodo para comparação com o s modelos na memoria 205 206 @param img imagem que s e r a comparada com os modelos ca rregados em memoria 207 @return i n t i n t e i r o que corresponde qual é o lado para que o mouse deve s e 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 não perder qualidade ) 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 ( c v S i z e ( imgcentro [ i ] >width, imgcentro [ i ] >height ), img >depth, img >nchannels ) ; 225 // redimensionar img para o mesmo tamanho de imgcentro [ i ] 226 cvresize ( 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 // n e s t e caso imgcentro [ i ] é maior que img logo pegamos o tamanho de img para o tamanho da imgaux 234 imgaux = cvcreateimage ( c v S i z e ( img >width, img >height ), imgcentro [ i ] >depth, imgcentro [ i ] >nchannels ) ; 235 // agora redimensionamos imgcentro [ i ] 236 cvresize ( 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 não perder qualidade ) 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 ( c v S i z e ( imgcima [ i ] >width, imgcima [ i ] > h e i g h t ), imgcima [ i ] >depth, imgcima [ i ] >nchannels ) ; 260 // redimensionar img para o mesmo tamanho de imgcima [ i ] 261 cvresize ( 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 // n e s t e caso imgcentro [ i ] é maior que img logo pegamos o tamanho de img para o tamanho da imgaux 269 imgaux = cvcreateimage ( c v S i z e ( img >width, img >height ), img > depth, img >nchannels ) ; 270 // agora redimensionamos imgcentro [ i ] 271 cvresize ( 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 não perder qualidade ) 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 ( c v S i z e ( imgbaixo [ i ] >width, imgbaixo [ i ] >height ), imgbaixo [ i ] >depth, imgbaixo [ i ] >nchannels ) ; 295 // redimensionar img para o mesmo tamanho de imgbaixo [ i ] 296 cvresize ( 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 // n e s t e caso imgbaixo [ i ] é maior que img logo pegamos o tamanho de img para o tamanho da imgaux 304 imgaux = cvcreateimage ( c v S i z e ( img >width, img >height ), img > depth, img >nchannels ) ; 305 // agora redimensionamos imgbaixo [ i ] 306 cvresize ( 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 não perder qualidade ) 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 ( c v S i z e ( imgesquerda [ i ] >width, imgesquerda [ i ] >height ), imgesquerda [ i ] >depth, imgesquerda [ i ] >nchannels ) ; 330 // redimensionar img para o mesmo tamanho de imgesquerda [ i ] 331 cvresize ( 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 // n e s t e caso imgesquerda [ i ] é maior que img logo pegamos o tamanho de img para o tamanho da imgaux 339 imgaux = cvcreateimage ( c v S i z e ( img >width, img >height ), img > depth, img >nchannels ) ; 340 // agora redimensionamos imgesquerda [ i ] 341 cvresize ( 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 não perder qualidade ) 361 i f ( img >width >= imgdireita [ i ] >width ) { 362 // img maior temos que pegar o tamanho de imgdireita [ i ] para o tamanho da imgaux 363 imgaux = cvcreateimage ( c v S i z e ( imgdireita [ i ] >width, imgdireita [ i ] >height ), imgdireita [ i ] >depth, imgdireita [ i ] >nchannels ) ; 364 // redimensionar img para o mesmo tamanho de imgdireita [ i ] 365 cvresize ( 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, imgdireita [ i ], 4, 0 ) ; 371 } e l s e { 372 // n e s t e caso imgdireita [ i ] é maior que img logo pegamos o tamanho de img para o tamanho da imgaux 373 imgaux = cvcreateimage ( c v S i z e ( img >width, img >height ), img > depth, img >nchannels ) ; 374 // agora redimensionamos imgesquerda [ i ] 375 cvresize ( imgdireita [ 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 // limpar endereço 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 vai 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 = 1 0 ; 420 } 421 // Baixo 422 i f ( acao == 2) { 423 y += 1 0 ; 424 } 425 // Esquerda 426 i f ( acao == 3) { 427 x = 1 0 ; 428 } 429 // D i r e i t a 430 i f ( acao == 4) { 431 x += 1 0 ; 432 } 433 SetCursorPos ( x, y ) ; 434 } 435 436 / 437 carregamodelos ( ) Metodo para c a r r e g a r na memoria os modelos para comparação 438 / 439 i n t carregaimgsmodelo ( ) { 440 i n t i ; 46

441 char image [ 1 0 0 ] ; 442 IplImage aux ; 443 444 // c a r r e g a 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 // c a r r e g a 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 // c a r r e g a 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 // c a r r e g a 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 // c a r r e g a 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 imgdireita [ 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 comparação 478 479 @param img imagem s e r a s a l v a como modelo 480 / 481 i n t criamodelos ( IplImage img ) { 482 char image [ 1 0 0 ] ; 483 s p r i n t f ( image, criamodelos/%d. jpg, img no ) ; 484 cvsaveimage ( image, img, 0) ; 485 img no++; 47

486 return 0 ; 487 } 48