Uso de Vis~ao Computacional para Interface Homem-Computador · Catal~ao - 2011. Lucas Faria Porto...

Click here to load reader

  • date post

    31-Jul-2020
  • Category

    Documents

  • view

    1
  • download

    0

Embed Size (px)

Transcript of Uso de Vis~ao Computacional para Interface Homem-Computador · Catal~ao - 2011. Lucas Faria Porto...

  • 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 InterfaceHomem-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 de

    Pela Banca Examinadora constitúıda pelos professores.

    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 de-

    safios 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 esta-

    rem 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 constrúı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 inex-

    plicável marcou minha vida: Adam Moreira, Ana Paula Suzuki, Bleno Sampaio, Fábio

    Amorim, Faimison Porto, Fernando Antônio, Hugo Sica, Igor André, Janáı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, Vińıcius Gustavo, Wilkly-

    ney 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 cĺı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 dis-

    pońı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 posśı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, Inter-

    face 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 Caracteŕısticas Haar-like [Viola e Jones, 2001]. . . . . . . . . . . . . . . . . 13

    3.12 Exemplo de cálculo de um elemento de caracteŕıstica Haar-like. . . . . . . 13

    3.13 Caracteŕı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 respectiva-

    mente 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 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

  • Caṕıtulo 1

    Introdução

    Atualmente o computador é a forma de comunicação mais utilizada no mundo, ofe-

    recendo 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 compu-

    tacionais 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, véıculos adaptados, etc. Ambos os exemplos citados,

    são alguns dos diversos utenśı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, conse-

    quentemente 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 in-

    teraçã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 (dalto-

    nismo) [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 caracteŕısticas relevantes em uma imagem possibilitando que um sistema ou o com-

    putador 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 conse-

    gue distinguir um objeto ou uma caracteŕı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, caracteŕı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 satis-

    fató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 posśıvel a criação do protótipo resultante deste estudo visando o con-

    trole do cursor do mouse através da mudança da posição dos olhos do usuário de forma

    eficaz e financeiramente acesśıvel, sem a necessidade da criação de um hardware espećıfico

    ou investimentos em uma webcam com uma resolução maior? É o que este estudo pretende

    responder.

    A presente monografia está dividida nos caṕıtulos a seguir:

    Caṕı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.

    Caṕıtulo 2: Estado da Arte

    Aborda vários trabalhos semelhantes ao proposto neste trabalho, citando as principais

    caracteŕısticas abordadas, as técnicas utilizadas, etc.

    Caṕıtulo 3: Fundamentação Teórica

    2

  • Ênfase na parte teórica por trás do trabalho proposto, reunindo a maioria dos concei-

    tos cient́ıficos sobre processamento Digital de Imagens e Visão Computacional.

    Caṕıtulo 4: Desenvolvimento

    Ênfase completa do desenvolvimento do protótipo. Descrição detalhada do algoritmo

    e das técnicas empregadas neste trabalho.

    Caṕıtulo 5: Análise e Resultados

    Neste caṕıtulo é abordada toda a análise referente à execução de testes e resultados

    alcançados no protótipo.

    Caṕıtulo 6: Conclusão

    Conclusão do trabalho proposto e abordagem de trabalhos futuros.

    3

  • Caṕıtulo 2

    Estado da Arte

    Nesta seção são apresentados alguns estudos semelhantes ao abordado aqui. Demons-

    trando 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 caracteŕısticas faciais. No trabalho apresentado em [Carvalho et al., 2005]

    o objetivo é detectar as informações do olho humano por meio de suas caracteŕı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 com-

    paraçã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 com-

    binações entre redes neurais artificiais e algoritmos de aprendizado de máquinas.

    No treinamento da rede foram utilizadas imagens de faces possibilitando maior fi-

    delidade do sistema de reconhecimento. Cada imagem foi devidamente normalizada e

    distribúıda como entrada de treinamento para futuras comparações para a rede. A sáı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 caracteŕı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 caracteŕı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 caracteŕısticas faciais.

    No próximo caṕıtulo será abordada a parte teórica do trabalho proposto.

    5

  • Caṕı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 ńı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 espećı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 carac-

    teŕıstica a entrada de uma determinada imagem em seu processo, que após ser processada

    tem como resultado de sáı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 caracteŕı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 movimen-

    tos, 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, lei-

    tor 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 rúıdos, realçar o contraste, entre outras; visando au-

    mentar o sucesso da extração de caracteŕı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 caracte-

    res, onde as informações relevantes são os caracteres dispońıveis na imagem. Na repre-

    sentaçã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 dire-

    tamente 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 é utili-

    zado técnicas relevantes na visão computacional que são aplicadas em imagens; visando

    melhorar significativamente a qualidade e/ou realçar alguma caracteŕı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 rúıdos, o controle do ńı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 caracteŕısticas: Este passo visa transformar os dados de entrada da

    imagem em um conjunto de caracteŕısticas relevantes para alcançar o objetivo esperado,

    como exemplos, a detecção de textura, detecção de formas geométricas, detecção de bor-

    das, 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

    caracteŕısticas de interesse para o passo seguinte. No exemplo de reconhecimento de ca-

    racteres, buracos e concavidades são caracteŕı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 signifi-

    cado ao conjunto de objetos reconhecidos na imagem [Gonzalez e Woods, 2000]. Geral-

    mente 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 en-

    dereç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

    caracteŕı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 caracteŕısticas de um rosto humano, variações de

    cores e detecção de determinadas caracteŕı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 caracteŕı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

    posśıvel localizar de maneira eficiente a presença ou não de uma caracteŕı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 caracteŕısticas do tipo Haar-like, cada uma contém retângulos

    claros e escuros que representam as regiões da caracteŕıstica. O resultado referente à soma

    12

  • dos valores de intensidade dos pixels entre as regiões claras são subtráıdas pela soma das

    regiões escuras (Figura 3.12(a)); este valor encontrado representa a caracteŕıstica deter-

    minada para aquela região na imagem (Figura 3.12(b)). Esta técnica é eficiente para

    avaliar se existe ou não uma caracteŕıstica Haar-like em uma determinada posição na

    imagem [Araujo, 2010].

    Figura 3.11: Caracteŕısticas Haar-like [Viola e Jones, 2001].

    Figura 3.12: Exemplo de cálculo de um elemento de caracteŕı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 caracteŕısticas Haar-like serão utilizadas

    e quais os valores dos limiares para cada uma das caracteŕısticas.

    De acordo com [Viola e Jones, 2001] um bom classificador não necessita de uma grande

    quantidade de caracteŕı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

    caracteŕısticas é mais indicada para alcançar o resultado desejado.

    13

  • Nas Figuras 3.13(a) e 3.13(b) o algoritmo escolheu as duas caracteŕı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 caracteŕısticas Haar-like na mesma imagem

    de entrada.

    Na Figura 3.13(d) é posśıvel perceber que a caracteŕı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: Caracteŕısticas Haar-like selecionadas pelo AdaBoost [Santos, 2008].

    Para que a identificação seja executada rapidamente, é necessário ter uma sequen-

    cia de classificadores em ordem crescente, onde os primeiros classificadores contém uma

    quantidade de caracteŕı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 pro-

    cessamento, pois realiza o cálculo para apenas duas caracteŕısticas Haar-Like; segundo

    [Viola e Jones, 2001] esta operação executa apenas 60 instruções de um microprocessa-

    dor. Os próximos classificadores executam o mesmo procedimento citados acima, porém

    utilizando uma quantidade maior de caracteŕı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 sub-

    janela 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

    caracteŕısticas Haar-like para cada classificador e treina-lo da melhor maneira posśıvel. O

    resultado do processo de aprendizagem são os classificadores fracos, cada um contendo um

    limiar e caracteŕı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 heuŕıstica AdaBoost, os últimos classi-

    ficadores 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 caṕıtulo aborda a descrição detalhada do protótipo deste trabalho.

    Figura 3.14: Exemplo do classificador em cascata [Ma, 2007].

    15

  • Caṕıtulo 4

    Desenvolvimento

    4.1 Abordagem Inicial

    Neste caṕı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 ope-

    racionais 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 posśıvel pelo fato da webcam não ter resolução e

    qualidade suficiente para extração das borda do olho e o ćı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 caṕı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”, ”Com-

    parar 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 (Ex-

    tensible Markup Language) para localização da região dos olhos e as imagens para com-

    paraçã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

  • teŕı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 posśı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 caṕı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 viśı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 imposśıvel da localização da região dos olhos necessária

    para o funcionamento correto do protótipo.

    4.3 Carregar Modelos

    No ińıcio da execução do protótipo ocorre com o carregamento em memória das ima-

    gens dos modelos de decisão e do classificador XML que serão abordados com mais detalhes

    mais adiante neste caṕı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 ińı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 for-

    mato 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 caracteŕı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 caracteŕı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

    é posśıvel a localização do par de olhos dispońı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 pe-

    los 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 de-

    terminar 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 caracteŕı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 dispońı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 caracteŕısticas do objeto para busca do mesmo.

    A abordagem de busca de [Viola e Jones, 2001] através das caracteŕı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 caracteŕı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 dispońı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 encon-

    trado 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 processa-

    mento 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 proces-

    samento é 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 ńı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 sig-

    nificativa na claridade, mais escuro ou mais claro, o resultado da equalização preserva as

    caracteŕı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 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 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 ińı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 dispońı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

    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 comparação com os modelos de decisão, agora é posśıvel movi-

    mentar 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 decre-

    mentado, 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 caṕıtulo será abordada a parte referente aos testes no protótipo e análises dos

    resultados dos mesmos.

    25

  • Caṕıtulo 5

    Análise e Resultados

    5.1 Detalhes dos Testes

    Neste caṕı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 posśı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 posśı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 computadorna 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 qualquerlado, 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 com-putador.

    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 posśıveis posicio-

    namento 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 posśı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 mo-delos 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 dedecisã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ãoe 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 é posśı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 caracteŕı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 à 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, com-

    paraçõ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 compa-

    rado com o melhor resultado destas três técnicas para identificar a região que o usuário

    está olhando.

    Uma caracteŕıstica importante é a utilização de uma simples webcam que está agre-

    gada ao notebook, sendo assim, não há a necessidade de um equipamento espećı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 caṕıtulo aborda as

    considerações finais deste trabalho.

    30

  • Caṕı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 homem-

    computador propiciou um entendimento satisfatório sobre o assunto. Como conclusão

    deste trabalho obtém a resposta para a questão levantada no Caṕıtulo 1, mostrando que

    se respeitado algumas restrições de posicionamento é posśı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 caracteŕı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 caracteŕısticas deste protótipo a que mais se destaca é a não necessidade

    de um hardware espećıfico para seu funcionamento. Uma caracteŕı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 de-

    ficiência f́ısica, proporcionando maior acesso à informação, conhecimento, independência

    e interação social.

    Como posśıveis trabalhos futuros, pode-se apontar:

    • Melhoria da imagem, aplicando filtros mais eficientes de processamento em parasoluçã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, quandoo 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 quandoo usuário movimenta a face para algum sentido.

    • Agregar cálculo de deslocamento da região do usuário perante a webcam, para nãonecessitar 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, mastambé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 meioatravés do olhar.

    32

  • Referências

    Araujo, G. C. (2010). Algoritmo para reconhecimento de caracteŕı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 caracteŕı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-Canaĺı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. Dis-

    pońı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 caracteŕısticas haar em um modelo de detecção de face.

    Monografia, Universidade de Braśı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 śı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 necessi-

    dades 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 : 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

    6 #inc lude

    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 execuç ão do programa

    27 // 1 − Gerar Modelos

    36

  • 28 // 2 − Mostrar Jane la s29 // 3 − Funcionamento Normal30 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: Não 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 , ”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 re turn 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 ( 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 não 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 ã 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 ã 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 ã 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 ã 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 ã 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 ã 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 ã 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 comparação com os modelos na memoria205 ∗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 é o lado para que omouse 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 não 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 ] ’ é 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 não 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 ] ’ é maior qu