VISÃO COMPUTACIONAL PARA RECONHECIMENTO DE FACES APLICADO NA IDENTIFICAÇÃO E AUTENTICAÇÃO DE USUÁRIOS NA WEB

Tamanho: px
Começar a partir da página:

Download "VISÃO COMPUTACIONAL PARA RECONHECIMENTO DE FACES APLICADO NA IDENTIFICAÇÃO E AUTENTICAÇÃO DE USUÁRIOS NA WEB"

Transcrição

1 UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIA DA COMPUTAÇÃO BACHARELADO VISÃO COMPUTACIONAL PARA RECONHECIMENTO DE FACES APLICADO NA IDENTIFICAÇÃO E AUTENTICAÇÃO DE USUÁRIOS NA WEB MÁRCIO KOCH BLUMENAU /1-21

2 MÁRCIO KOCH VISÃO COMPUTACIONAL PARA RECONHECIMENTO DE FACES APLICADO NA IDENTIFICAÇÃO E AUTENTICAÇÃO DE USUÁRIOS NA WEB Trabalho de Conclusão de Curso submetido à Universidade Regional de Blumenau para a obtenção dos créditos na disciplina Trabalho de Conclusão de Curso II do curso de Ciência da Computação Bacharelado. Prof. Jacques Robert Heckmann, Mestre - Orientador BLUMENAU /1-21

3 VISÃO COMPUTACIONAL PARA RECONHECIMENTO DE FACES APLICADO NA IDENTIFICAÇÃO E AUTENTICAÇÃO DE USUÁRIOS NA WEB Por MÁRCIO KOCH Trabalho aprovado para obtenção dos créditos na disciplina de Trabalho de Conclusão de Curso II, pela banca examinadora formada por: Presidente: Membro: Membro: Prof. Jacques Robert Heckmann, Mestre Orientador, FURB Prof. Dalton Solano dos Reis, Mestre FURB Prof. Cláudio Loesch, Doutor FURB Blumenau, 11 de julho de 2012

4 Dedico este trabalho a minha família, principalmente ao meu Filho Mateus e a minha esposa Ana Cristina pela paciência e compreensão em todas as horas que passei na frente do computador e em sala de aula para concluir esse trabalho e a faculdade. Aos amigos, especialmente aqueles que me ajudaram diretamente na realização deste.

5 AGRADECIMENTOS A Deus, pelo seu imenso amor e graça. À minha família, que mesmo longe, sempre esteve presente. Aos meus amigos, pelos empurrões, cobranças e fotos de suas faces para utilizar neste trabalho. Ao meu orientador, Jacques Robert Heckmann, pelo apoio e por ter acreditado na conclusão deste trabalho. Ao professor Cláudio Loesch, pelas inúmeras explicações relacionadas aos métodos estatísticos multivariados.

6 Eu testemunhei a capacidade e a coragem deles e embora sejamos de mundos distintos, como nós, eles são mais, do que os olhos podem ver. Optimus Prime (Transformers)

7 RESUMO Este trabalho apresenta a especificação e a implementação de como efetuar a identificação e a autenticação de usuários através do reconhecimento facial em aplicativos, especificamente os via web. A face do usuário é detectada e capturada a partir de um applet Java carregado no navegador de internet. As imagens das faces são processadas e transferidas via socket para um servidor onde são extraídas suas informações. Em um novo cadastro as informações são armazenados em uma base de dados Oracle. No caso de uma identificação, são comparados os dados da face apresentada com os dados das faces conhecidas já armazenadas no banco de dados, sendo o usuário reconhecido, os seus dados são retornados para o applet que redireciona para uma página de boas vindas. Praticamente todo o processamento, detecção e identificação das imagens das faces foi efetuado utilizando a API JavaCV que é uma extensão em Java para a API OpenCV. A técnica aplicada para a extração das características e reconhecimento das faces foi a PCA. Palavras-chave: Reconhecimento facial. Visão computacional. Processamento de imagens. Autenticação na web. PCA. Análise de componentes principais.

8 ABSTRACT This paper presents the specification and implementation of how to perform identification and authentication of users through facial recognition applications, specifically web. The user faces are detected and captured from a Java applet loaded in the browser. Images of faces are processed and transferred via socket to a server where your information is extracted. In a new account information is stored in an Oracle database. In the case of identification, are compared against the data presented with data of known faces already stored in the database, the user is recognized, your data is returned to the applet that redirects to a welcome page. Virtually all processing, detection and identification of images of faces was performed using the API JavaCV which is an extension to the Java API OpenCV. The technique used for feature extraction and recognition of faces was the PCA. Keywords: Face recognition. Computer vision. Image processing. Authentication on the web. PCA. Principal component analysis.

9 LISTA DE ILUSTRAÇÕES Figura 1 Exemplo de: (a) íris, (b) geometria da mão, (c) impressão digital, (d) reconhecimento da face, (e) voz e (f) retina Figura 2 - Webcam Minoru possui duas câmeras lado a lado Figura 3 - Câmera digital detecta a face e sorriso para captura da foto Figura 4 - A câmera detecta, notifica e não bate foto no momento que a pessoa pisca Figura 5 - O estabilizador digital de imagem reduz o embaçamento causado por trepidação na câmera Figura 6 - Representação de imagem digital: (a) imagem normal e (b) área da imagem aumentada Quadro 1- Coordenadas da vizinhança-de-4 de p Quadro 2 - Coordenadas da vizinhança-de-8 de p Figura 7 - Redimensionamento de uma imagem através do algoritmo de intercalação Figura 8 - Imagem colorida (a) e a mesma imagem em tons de cinza (b) Quadro 3 - Equação para calcular um elemento do histograma Figura 9 - Exemplo de um histograma com oito níveis de cinza para a imagem Figura 10 - Uma função de transformação de níveis de cinza Quadro 4 - Equação discreta da distribuição de probabilidade CDF Quadro 5 - Cálculo do primeiro valor da Tabela Quadro 6 - Cálculo do segundo valor da Tabela Quadro 7 - Cálculo dos demais valores da Tabela Figura 11 - Função de transformação utilizada para a equalização Quadro 8 - Cálculo dos demais valores da Tabela Figura 12- Histograma equalizado Figura 13 - Equalização de histograma em uma imagem de baixo contraste Quadro 9 - Estrutura de um reconhecedor de padrões Quadro 10 - Representação de um vetor de padrões Figura 14 Exemplo de separação de padrões com duas medidas realizadas em três faces Quadro 11 - Equação da distância euclidiana entre dois vetores Quadro 12 - Equação da distância de mahalanobis Figura 15 - Problema da dimensionalidade Figura 16 (a) Imagem original e (b) imagem com a interpretação física original alterada... 41

10 Quadro 13 - Equação para criar um vetor coluna a partir de uma matriz A Figura 17 - Padrão criado a partir de uma imagem Quadro 14 - Matriz X de padrões de treinamento Quadro 15 Criação da matriz de covariância a partir da matriz de padrões de treinamento X Quadro 16 Equação para calcular os valores da matriz de covariância Quadro 17 Matriz H para mudança de base da matriz de covariância Quadro 18 Obtenção do auto-vetor e auto-valor a partir da matriz de covariância 44 Quadro 19 Operação para a mudança de base da matriz de covariância Figura 18 - Processo para assinatura de um arquivo JAR Figura 19 Passos para a assinatura de um applet Quadro 20 - Comando para criar um arquivo JAR Quadro 21 - Opções do comando keytool Quadro 22 Opções do comando jarsigner Quadro 23 Opções do comando keytool para exportar o certificado com a chave pública Figura 20 - Passos que deverão ser efetuados pelo usuário do applet Quadro 24 Tag para adicionar um applet em uma página HTML Quadro 25 Opções do comando para importar um certificado Figura 21 - Arquivos.policy e.keystore no diretório home do usuário Quadro 26 - Exemplo dos dados contidos em um arquivo.policy Figura 22 - (a) Tela cadastrar usuário, (b) tela selecionar foto e (c) foto selecionada Figura 23 - Resultados da segmentação baseada em bordas em três níveis: (a) ruim, (b) regular e (c) bom Figura 24 - Resultados da segmentação em cor da pele em três níveis: (a) ruim, (b) regular e (c) bom Figura 25 Processo distribuído pelo ambiente para autenticação através de reconhecimento facial Figura 26 Diagrama de casos de uso da ferramenta Figura 27 - Diagrama de atividades do acesso à tela de login Figura 28 - Diagrama de atividades para cadastrar usuário Figura 29 - Diagrama de atividades para autenticação através da face Figura 30 - Diagrama de sequência do reconhecimento de usuário através da face... 66

11 Figura 31 - Diagrama de classes do applet Figura 32 - Diagrama de classes dos componentes das abas novo usuário e login do applet.. 69 Figura 33 - Diagrama de classes da classe FaceProcessor - principal classe de processamento de imagem Figura 34 - Diagrama da classe de usuário e seus relacionamentos Figura 35 - Diagrama das classes para processamento PCA Figura 36 - Diagrama das classes de socket no aplicativo servidor Quadro 27 Classe WebcamApplet que especializa a classe JApplet Figura 37 - Exportar pacotes para um arquivo JAR utilizando o Eclipse Figura 38 - Aviso de segurança exibido pelo Java através do navegador Google Chrome Figura 39 - Erro exibido pelo Java através do navegador Google Chrome Figura 40 - Detalhes da exceção gerada pelo Java Quadro 28 - Código fonte do método init() do applet Quadro 29 - Arquivos que serão compactados e baixados para a máquina do usuário automaticamente pelo applet Quadro 30 - Código fonte do método loadwebcam() Quadro 31 - Código fonte do método start() da webcam Quadro 32 - Código fonte do método grabandpaint() Quadro 33 - Código fonte do método para atribuição e sua pintura da imagem no painel do applet Figura 41 - Exemplo de detecção de faces, a maior face é pintada em verde Quadro 34 Método detectfaces() para detectar as faces em uma imagem Quadro 35 - Código fonte do método getimagewithdetectedface() Quadro 36 - Código fonte do método getbigfacerect() Figura 42- Processo executado pelo algoritmo de detecção facial: (a) imagem original, (b) imagem em tons de cinza, (c) imagem com resolução reduzida em 50%, (d) imagem com histograma equalizado e (e) imagem com a face detectada Quadro 37 - Método getbigface() retorna a imagem da maior face detectada Figura 43 - Resultado do método getbigface(): (a) imagem original, (b) imagem rotacionada, (c) imagem redimensionada e (d) imagem com histograma equalizado Figura 44 - Imagem de face com inclinação baseada na linha horizontal entre o centro dos olhos... 89

12 Quadro 38 - Código fonte do método rotatefacebyeyes() Quadro 39 - Código fonte do método detecteyes() Quadro 40 - Código fonte do método geteyesslicefromimage Quadro 41 - Método rotateimage() rotaciona a face baseado no ângulo passado Quadro 42 Equação para cálculo dos pixels da imagem de destino Figura 45 Exemplo de uma imagem da face rotacionada, (a) imagem original, (b) olhos não alinhados horizontalmente, (c) face rotacionada em um editor de imagens, (d) face rotacionada pelo método rotateimage()e (e) olhos alinhados horizontalmente Quadro 43 - Código fonte do método processuser() Quadro 44 - Código fonte do método autorecognizeduser() Quadro 45 - Código fonte do construtor da classe FaceClientSocket que abre uma conexão com o aplicativo servidor Quadro 46 - Código fonte do método send() Quadro 47 - Código fonte do método senduserdata() Quadro 48 - Código fonte do método sendfaces() Quadro 49 - Código fonte do método sendface() Quadro 50 - Código fonte do método processuseronserver() Quadro 51 - Código fonte da classe ServerSystemManager Quadro 52 - Código fonte da classe FaceServerSocket Quadro 53 - Código fonte do método run() da classe FaceServerClientSocket Quadro 54 - Código fonte do método readpacked() Quadro 55 - Código fonte do método executecommand() Quadro 56 - Código fonte do método processuser() da classe FaceServerClientSocket Quadro 57 - Código fonte do método processnewuser() Figura 46 - (a) imagem média, (b) 59 eigenfaces (auto-vetores) calculados de forma ordenada da esquerda para a direita e de cima para baixo Quadro 58 - Código fonte do método transformpca() Quadro 59 - Código fonte do método recognizeface() Quadro 60 - Código fonte do método findnearestneighbor() Figura 47 - Tela de entrada da ferramenta

13 Figura 48 - Tela principal da ferramenta Figura 49 - Tela para cadastro de um novo usuário Figura 50 - Tela de cadastro após submissão ao aplicativo servidor Figura 51 - Autenticação do usuário através da face com usuário reconhecido Figura 52 - Usuário autenticado e redirecionado para a página principal Figura 53 - Opção Reconhecer automaticamente a face do usuário marcada Figura 54 - Autenticação convencional através de um usuário e uma senha Figura 55 - Amostra de imagens coletadas a campo para constituir a população da base de dados Figura 56 - A detecção facial atingiu 100% de sucesso nas faces apresentadas em pose frontal e sem oclusões significativas Figura 57 - Problemas na detecção dos olhos, (a) confusão dos olhos com as sombrancelhas e (b) confusão dos olhos com as narinas Figura 58 - Amostras de faces normalizadas Figura 59 - Resultados obtidos pela ferramenta com três imagens por pessoa, comparado com os resultados de Campos (2001, p. 93) Figura 60 - Visualização do problema da dimensionalidade obtido pela ferramenta Quadro 61 - Descrição do ator Usuário Quadro 62 - Descrição do UC01 - Cadastrar usuário Quadro 63 - Descrição do UC02 - Autenticar usuário através da face Quadro 64 - Descrição do UC03 - Reconhecer usuário automaticamente Quadro 65 - Descrição do UC04 - Autenticar usuário através de usuário e senha

14 LISTA DE TABELAS Tabela 1 - Exemplo de histograma Tabela 2 - Histograma equalizado Tabela 3 - Classes de resultados para as três abordagens empregadas Tabela 4 - Desempenho do classificador para reconhecimento de olhos e de faces quando treinado com três imagens por pessoa Tabela 5 - Desempenho do classificador para reconhecimento de olhos e de faces quando treinado com cinco imagens por pessoa Tabela 6 - Resultados obtidos pela ferramenta com três imagens por pessoa, comparado com Campos (2001, p. 93) Tabela 7 - Resultados obtidos com cinco imagens por pessoa, comparado com Campos (2001, p. 93) Tabela 8 - Resultados obtidos pela ferramenta com cinco imagens por pessoa usadas para treinamento, variando a quantidade de auto-vetores (eigenfaces)

15 LISTA DE SIGLAS API - Application Programming Interface DLL - Dynamic Link Library HTML - Hyper Text Markup Language JAR - Java ARchive Java EE - Java Enterprise Edition JDK - Java Development Kit JRE - Java Runtime Environment JVM - Java Virtual Machine OpenCV- Open source Computer Vision library PCA - Principal Component Analysis ROI - Region Of Interest UML - Unified Modeling Language XML - extensible Markup Language

16 SUMÁRIO 1 INTRODUÇÃO OBJETIVOS DO TRABALHO FUNDAMENTAÇÃO TEÓRICA IDENTIFICAÇÃO BIOMÉTRICA AQUISIÇÃO DE IMAGENS PROCESSAMENTO DE IMAGENS Representação de imagens digitais Relacionamento básico entre pixels Vizinhos de um pixel Conectividade entre pixels Rotulação de componentes conexos Redimensionamento Imagens em tons de cinza Histograma Equalização de histograma RECONHECIMENTO DE PADRÕES MÉTODO DOS K-VIZINHOS MAIS PRÓXIMOS GENERALIZAÇÃO PROBLEMA DA DIMENSIONALIDADE REDUÇÃO DA DIMENSIONALIDADE ANÁLISE DE COMPONENTES PRINCIPAIS OPENCV JAVACV APPLET JAVA Assinatura de applet Java TRABALHOS CORRELATOS Reconhecimento facial 2D para sistemas de autenticação em dispositivos móveis Reconhecimento de Faces em Imagens: Projeto Beholder Técnicas de seleção de características com aplicação em reconhecimento de faces58 3 DESENVOLVIMENTO DO PROTÓTIPO REQUISITOS PRINCIPAIS DO PROBLEMA A SER TRABALHADO... 59

17 3.2 ESPECIFICAÇÃO Processo geral do funcionamento da ferramenta Diagrama de casos de uso Diagramas de atividades Diagramas de sequência Diagramas de classes IMPLEMENTAÇÃO Técnicas e ferramentas utilizadas Applet no lado do usuário Detecção facial Captura da face Envio das informações para o aplicativo servidor Recebimento das informações pelo aplicativo servidor Processando um novo usuário Reconhecimento através da face Reconhecimento através de um usuário e uma senha Operacionalidade da implementação Acesso à ferramenta Cadastrar um novo usuário Autenticar usuário através da face Reconhecer usuário através da face automaticamente Autenticar usuário através de um usuário e uma senha RESULTADOS E DISCUSSÃO Base de dados Detecção da face Normalização da face Reconhecimento da face CONCLUSÕES EXTENSÕES REFERÊNCIAS BIBLIOGRÁFICAS APÊNDICE A Detalhamento do ator e casos de uso especificados

18 17 1 INTRODUÇÃO Do ponto de vista humano a forma mais comum para identificar uma pessoa é através de sua face. Simplesmente olha-se para o rosto de uma pessoa, seja pessoalmente ou através de uma foto, e a identifica-se como conhecida ou não (PAMPLONA SOBRINHO, 2010, p. 13). A identificação de pessoas é um assunto muito explorado pela computação nos dias atuais, nas mais diversas áreas, tais como criminalística, jogos e segurança. Visão computacional, área da computação cujo propósito é possibilitar um computador a entender um ambiente através das informações visuais disponíveis (SHIRAI, 1987, p. 1), é aplicada em diversas atividades, destacando-se a robótica e reconhecimento de criminosos e a identificação de usuários para acesso as empresas. Segundo Afonso (2009, p. 1), o banco Bradesco utiliza autenticação de usuários para efetuar transações em caixas eletrônicos através da leitura das veias da palma da mão. Atualmente há uma deficiência do uso deste tipo de recurso para identificação de pessoas na web, na qual a forma mais comum para identificar e autenticar pessoas ainda é através de um nome de usuário e uma senha. Devido ao esquecimento, à perda ou à confusão por possuir usuários e senhas diferentes para cada site, uma série de transtornos e falhas de segurança são provocados para estas pessoas. Diante do exposto, a proposta deste trabalho é o emprego da visão computacional para o reconhecimento de pessoas através de sua face e a aplicação desta técnica na identificação e autenticação destas pessoas em um protótipo de sistema web. Com esta forma de identificação e autenticação pretende-se facilitar o acesso aos sistemas web e proporcionar uma possível solução para os transtornos descritos anteriormente. 1.1 OBJETIVOS DO TRABALHO O objetivo deste trabalho é desenvolver um protótipo capaz de efetuar o reconhecimento de faces para a identificação e autenticação de usuários em aplicativos, especificamente os via web, utilizando técnicas de processamento de imagens digitais, visão computacional, applet Java para interface com o usuário dentro do navegador de internet,

19 18 socket para transmissão dos dados e banco de dados para armazenar as informações das faces. Os objetivos específicos do trabalho são: a) utilizar técnicas de processamento de imagens para ajustar a qualidade das imagens obtidas (i.e. converter em tons de cinza e equalização do histograma); b) detectar as faces nas imagens obtidas; c) normalizar a pose das faces encontradas (i.e. padronizar as dimensões e a inclinação das faces); d) extrair as características das faces utilizando a Análise de Componentes Principais; e) utilizar métricas de comparação de distância para comparar as faces de entrada com as faces conhecidas; f) efetuar o reconhecimento mínimo de 96% das faces submetidas à identificação e autenticação, em uma base de dados de mais de 200 indivíduos; g) disponibilizar um protótipo de aplicativo web que possibilite o cadastramento dos usuários, a aquisição de suas imagens e que possibilite a identificação e autenticação dos usuários cadastrados; h) utilizar applet para a interface entre o usuário e o navegador de internet; i) efetuar a transmissão das imagens das faces e dados do usuário a partir do applet para o servidor via socket; j) armazenamento e recuperação das imagens das faces, seus dados e dados do usuário em banco de dados Oracle.

20 19 2 FUNDAMENTAÇÃO TEÓRICA A seguir, na seção 2.1, são apresentados alguns conceitos sobre identificação biométrica. A seção 2.2 comenta sobre a aquisição de imagens e suas características atuais. A seção 2.3 detalha as principais técnicas de processamento de imagens, como relacionamento, vizinhos, conectividade e rotulação de componentes conexos dos pixels, bem como explica sobre imagens em tons de cinza, histograma e equalização de histograma. Na seção 2.4 explicam-se conceitos básicos de reconhecimento de padrões. A seção 2.5 aborda o método dos k-vizinhos mais próximos. A seção 2.5 explica sobre a importância na capacidade de generalização de um classificador de padrões. Na seção 2.7 é dada uma visão de como é importante encontrar a dimensionalidade ideal para resolver um problema de reconhecimento de padrões. A seção 2.8 aborda os conceitos para controlar a dimensionalidade do espaço de características. Na seção 2.9 é explicada e aprofundada a transformada da análise de componentes principais, que permite extrair as características principais dos padrões reduzindo a dimensionalidade das características. Na seção 2.10 é explicado sobre a API OpenCV, que é uma poderosa API, própria para visão computacional e seu wrapper para Java, a API da Google, JavaCV. Explica também de forma sucinta as funções e classes usadas mais importantes no desenvolvimento deste trabalho. Na seção 2.11 são explicadas de forma básica as principais vantagens e desvantagens do uso de applet. É descrito também com mais detalhes como efetuar a assinatura digital de arquivos JAR para que um applet possa sair da sandbox e acessar dispositivos na máquina do usuário, como por exemplo, a webcam. Por fim na seção 2.12 são apresentados três trabalhos correlatos sobre reconhecimento de faces. 2.1 IDENTIFICAÇÃO BIOMÉTRICA A palavra biometria é proveniente do grego bios (vida) metron (medida). Ela estuda através da estatística as qualidades comportamentais e físicas do ser humano. Atualmente a biometria é amplamente empregada como um instrumento de controle de segurança, onde o termo refere-se ao uso do corpo humano em mecanismos de identificação. De acordo com Pamplona Sobrinho (2010, p. 15), seres humanos utilizam esta forma de reconhecimento, mesmo que inconscientemente, através de características como a voz, a face e a forma de

21 20 andar para distinguir seus semelhantes fisicamente. No caso da identificação biométrica, delega-se a função de diferenciar as pessoas a uma máquina. Os aparelhos de identificação biométricos capturam amostras do ser humano, como a íris, retina, dedo, rosto, veias da mão, voz e até odores do corpo. As amostras são transformadas em um padrão e podem ser utilizadas para futuras identificações (MUNIZ, 2007). Entre os propósitos mais comuns deste tipo de identificação, pode-se enumerar: controle de ponto, identificação criminal e regulamentação de acesso. Porém, algumas abordagens possuem o inconveniente por serem um tanto invasivas exigindo certas condições ao usuário. No caso dos sistemas de reconhecimento pela íris, o usuário deve permanecer parado em uma posição definida, com os olhos abertos enquanto uma fonte de luz ilumina os olhos e um scanner ou uma câmera efetua a captura da imagem. O caráter invasivo acentua-se em sistemas que empregam o uso de imagens do fundo da retina, sendo preciso à utilização de colírio para dilatação da pupila do usuário antes da aquisição da imagem. Já um sistema de reconhecimento baseado em imagens da face apresenta um nível invasivo menos acentuado (CAMPOS, 2001, p. 1). Na Figura 1 é possível visualizar alguns exemplos de identificação por biometria. Fonte: SmartSec (2012). Figura 1 Exemplo de: (a) íris, (b) geometria da mão, (c) impressão digital, (d) reconhecimento da face, (e) voz e (f) retina

22 AQUISIÇÃO DE IMAGENS Os principais dispositivos para aquisição de imagens para computador são as câmeras digitais, de vídeo, webcam e scanners. Estes dispositivos estão em constante aperfeiçoamento. Por exemplo, é o caso da webcam Minoru que filma e transmite vídeos em 3D. Esta webcam usa técnicas de estereoscopia 1 e anáglifo 2 para gerar o efeito 3D. Ela pode ser empregada na robótica como uma nova opção de sensor 3D. Pesquisadores do Nagoya Institute of Technology realizaram alguns trabalhos no campo da visão computacional utilizando a Minoru juntamente com a Application Programming Interfaces (API) Open source Computer Vision library (OpenCV 3 ) (MINORU, 2008). Fonte: Amazon.com (2011). Figura 2 - Webcam Minoru possui duas câmeras lado a lado As câmeras digitais também estão cada vez mais modernas e utilizam técnicas de visão computacional para detecção da face para posicionar o foco da câmera, bater a foto apenas se a pessoa sorrir (Figura 3), detectar olhos fechados, se a pessoa piscou (Figura 4) e redução de embaçamento causado por trepidação na câmera permitindo capturar imagens claras e nítidas de objetos em movimento (Figura 5). 1 Estereoscopia é uma técnica fotográfica pela qual se obtém uma sensação de relevo dada pela fusão numa única imagem de duas fotografias do mesmo objeto tiradas de pontos diferentes (ESTEREOSCOPIA, 2011). 2 Anáglifo é uma imagem impressa com cores complementares, que, vistas através de óculos coloridos, dão a sensação de relevo (3D) (ANÁGLIFO, 2011). 3 OpenCV é uma biblioteca multiplataforma, totalmente livre ao uso acadêmico e comercial, para o desenvolvimento de aplicativos na área de visão computacional (OPENCV, 2011).

23 22 Fonte: Fujifilm (2012). Figura 3 - Câmera digital detecta a face e sorriso para captura da foto Fonte: Fujifilm (2012). Figura 4 - A câmera detecta, notifica e não bate foto no momento que a pessoa pisca Fonte: Fujifilm (2012). Figura 5 - O estabilizador digital de imagem reduz o embaçamento causado por trepidação na câmera Outra forma para obtenção de imagens e vídeo será através dos navegadores web que suportarem o HTML5, que proverá acesso aos dispositivos de multimídia locais (câmeras de vídeo, webcams, microfones) do usuário (WHATWG, 2011). A especificação do HTML5 ainda está em desenvolvimento, mas os principais navegadores do mercado como o Internet

24 23 Explorer, Chrome, FireFox e Safari já suportam a maioria das especificações do HTML5 já concluídas. 2.3 PROCESSAMENTO DE IMAGENS O processamento de imagens é uma etapa fundamental para aplicar técnicas de visão computacional. Processar uma imagem muito grande, com muitos detalhes de cores pode ser muito caro computacionalmente. Cada problema que se queira resolver pode exigir técnicas de processamento de imagens diferentes, como trabalhar apenas da área de interesse de uma imagem, convertê-la para tons de cinza, reduzir seu tamanho entre outras. A seguir serão abordados estes temas com maiores detalhes Representação de imagens digitais Uma imagem refere-se à função bidimensional de intensidade da luz f(x, y), onde x e y representam as coordenadas espaciais e o valor de f em qualquer ponto (x,y) é proporcional ao brilho (ou níveis de cinza) da imagem naquele ponto. Uma imagem digital pode ser considerada uma matriz cujos índices de linha e coluna identifica um ponto na imagem, e o valor do elemento nesta posição da matriz identifica o nível de cinza daquele ponto. Os elementos desta matriz são chamados de pixels. Cada pixel possui uma cor produzida por uma combinação de cores primárias: vermelho, verde e azul (Red, Green e Blue - RGB). O brilho de cada uma destas cores pode variar em uma escala de 0 a 255 (GONZALEZ; WOODS, 2000, p. 174). A Figura 6 mostra uma área da imagem com o zoom aumentado de forma que seja possível visualizar os pixels da imagem.

25 24 Fonte: adaptado de Blog do Rost (2011). Figura 6 - Representação de imagem digital: (a) imagem normal e (b) área da imagem aumentada Relacionamento básico entre pixels Serão descritos nesta seção alguns relacionamentos básicos entre pixels de uma imagem. Estes relacionamentos são utilizados em diversas técnicas de processamento de imagens Vizinhos de um pixel Segundo Gonzales e Woods (2000, p. 26), um pixel denominado p nas coordenadas (x,y) possui quatro vizinhos horizontais e verticais, cujas coordenadas podem ser vistas no Quadro 1. Fonte: Gonzales e Woods (2000, p. 26). Quadro 1- Coordenadas da vizinhança-de-4 de p Este conjunto de pixels é chamado de vizinhança-de-4 de p. Cada pixel está a uma unidade de distância de p. Quando p estiver na borda da imagem, alguns de seus vizinhos ficarão fora da imagem. (x + 1, y), (x 1, y), (x, y + 1), (x, y 1) Os quatro vizinhos diagonais de p mais os vizinhos das coordenadas do Quadro 1 formam a vizinhança-de-8 de p, cujas coordenadas podem ser vistas no Quadro 2. Como já

26 25 mencionado anteriormente, quando p estiver na borda da imagem, alguns vizinhos cairão fora da imagem. (x + 1, y + 1), (x + 1, y - 1), (x - 1, y + 1), (x - 1, y 1) Fonte: Gonzales e Woods (2000, p. 26). Quadro 2 - Coordenadas da vizinhança-de-8 de p Conectividade entre pixels Gonzales e Woods (2000, p. 27) explicam que a conectividade entre pixels é importante para detecção das bordas de objetos e componentes de regiões em uma imagem. Para que dois pixels estejam conectados é preciso que eles sejam vizinhos-de-4 ou vizinhosde-8 e seus níveis de cinza sejam similares. Por exemplo, em uma imagem binária com valores 0 e 1, dois pixels podem ser vizinhos-de-4, mas somente estarão conectados se possuírem o mesmo valor. Facon (1993, p.51) enunciou outra definição para um conjunto conexo, dizendo que se dois pontos de um conjunto podem ser ligados por uma curva completamente contida nesse conjunto, então eles são conexos Rotulação de componentes conexos Gonzales e Woods (2000, p. 28) apresentam um algoritmo para rotulação de componentes conexos em uma imagem binária. Sendo a imagem percorrida pixel a pixel, de cima para baixo e da direita para a esquerda. Considerando a vizinhança-de-4, seja p o pixel em qualquer passo do processo de varredura e r e t os vizinhos superior e esquerdo de p. Ao chegar ao ponto p, r e t já terão sido descobertos pela sequência obedecida. Inicialmente verifica-se se o valor de p é 0. Caso seja, avança para a próxima posição. Se o valor de p for 1, devem ser verificados os valores de r e t, sendo ambos 0, atribui-se um novo rótulo a p. Neste caso, ou é a primeira vez que o componente conexo aparece, ou trata-se de um pixel em uma ponta de um componente já encontrado. Se apenas um dos vizinhos for 1, p recebe seu rótulo, Caso ambos sejam 1 e possuírem o mesmo rótulo, atribui-se o mesmo rótulo a p. Se forem 1, porém possuírem rótulos diferentes, atribua um dos rótulos a p e marque que os dois rótulos são equivalentes. Neste caso, r e t fazem parte do mesmo componente conexo, devido a estarem ligados por p. Prosseguindo desta maneira, no final da varredura todos os pontos com

27 26 valor 1 terão sido rotulados. Ao final os pares de rótulos equivalentes devem ser ordenados em classes de equivalência, atribuindo-se um rótulo diferente para cada classe e percorrendose a imagem para trocar os rótulos pelos que foram atribuídos a sua classe de equivalência. O mesmo processo pode ser efetuado para rotular os componentes conexos considerando a vizinhança-de-8, sendo que, neste caso, consideram-se também os dois vizinhos diagonais superiores de p Redimensionamento Reaes (2006, p. 7) explica que imagens muito grandes ou com resolução muito alta podem ser reduzidas sem perder eficiência na detecção. Existem diversos algoritmos para redimensionamento de imagens. Entre eles, podem-se citar dois: intercalação e médias. O algoritmo de intercalação (Figura 7), por exemplo, consiste em substituir um conjunto de pixels pelo primeiro pixel do conjunto. Define-se uma taxa de redução t, a largura e a altura da nova imagem com tamanho reduzido. A Figura 7 demonstra o redimensionamento de uma imagem de 4x6 pixels com taxa de redução de 50%, resultando uma imagem de 2x3 pixels. Fonte: Reaes (2006, p. 9). Figura 7 - Redimensionamento de uma imagem através do algoritmo de intercalação Imagens em tons de cinza Como já discutido na seção uma imagem digital é composta por três componentes primárias chamadas de sistema RGB. Em uma imagem em tons de cinza, as componentes das cores primárias de cada ponto possuem o mesmo valor. Desta forma é possível representar a cor através de apenas uma componente. Uma imagem de 8 bits pode ter até 256 tons de cinza. Cada pixel em uma imagem

28 27 em tons de cinza possui um valor de brilho que varia de 0 (preto) a 255 (branco). Nas imagens de 16 bits e 32 bits o número de tons de cinza é bem maior do que nas imagens de 8 bits, consequentemente seu tamanho também aumenta. Os valores de níveis de cinza também podem ser medidos como porcentagens de cobertura de tinta preta onde 0% é branco e 100% é preto (ADOBE SYSTEMS INCORPORATED, 2005). Para transformar uma imagem colorida para níveis de cinza deve-se primeiro obter as primitivas vermelho, verde e azul (da escala RGB) de cada pixel. Em seguida o pixel é substituído 4 por 30% do vermelho mais 59% do verde mais 11% do azul (NÍVEL, 2011). A Figura 8 mostra uma imagem colorida (a) e a mesma imagem em tons de cinza (b). Fonte: adaptado de Blog do Rost (2011). Figura 8 - Imagem colorida (a) e a mesma imagem em tons de cinza (b) A ideia é que com apenas um componente na banda de cores o custo computacional para processar uma imagem é menor. Reaes (2006, p. 6) diz que na escala RGB são necessárias três matrizes para representar uma imagem, uma para cada componente. Já para as imagens em tons de cinza, apenas uma matriz é necessária Histograma Segundo Marques Filho e Vieira Neto (1999, p. 55), o histograma de uma imagem é um conjunto de números indicando o percentual de pixels desta imagem para cada um de seus níveis de cinza. Geralmente estes valores são apresentados através de um gráfico de colunas que mostra a quantidade ou percentual de pixels de cada nível de cinza da imagem. Gonzales 4 Tais porcentagens estão relacionadas à própria sensibilidade visual do olho humano convencional para as cores primárias.

29 28 e Woods (2000, p. 124) apresentam que apesar do histograma não fornecer nada específico sobre o conteúdo de uma imagem, provê informações úteis sobre a possibilidade para realce (pixels mais claros) e contraste (pixels mais escuros). Cada elemento deste conjunto de números é calculado conforme o Quadro 3. Onde: - 0 r k 1; Fonte: Marques Filho e Vieira Neto (1999, p. 55). Quadro 3 - Equação para calcular um elemento do histograma Para calcular o histograma de uma imagem monocromática, inicia-se com zero todos os elementos de um vetor de L elementos, sendo L o número de tons de cinza possíveis. Percorre-se a imagem, pixel a pixel, incrementando a posição do vetor cujo índice corresponde ao tom de cinza do pixel visitado. Após ter percorrido toda a imagem, cada elemento terá a quantidade de pixels com o nível de cinza que o índice do elemento corresponde. Para normalizar estes valores, basta dividir cada um deles pelo total de pixels na imagem. Como exemplo, os dados da Tabela 1 são de uma imagem de 128 x 128 pixels, com oito níveis de cinza. A primeira coluna apresenta o nível de cinza, na segunda coluna é apresentado o número de pixels de um tom de cinza e na terceira coluna estão as respectivas probabilidades de. p r r k ) = n k n - k = 0, 1,..., L-1, onde L é o número de níveis de cinza da imagem digitalizada; - n = número total de pixels na imagem; - p r r k = probabilidade do k-ésimo nível de cinza; - n k = número de pixels cujo nível de cinza corresponde a k.

30 29 Cada Tabela 1 - Exemplo de histograma Nível de cinza ( ) ,068 1/ ,196 2/ ,296 3/ ,209 4/ ,122 5/ ,048 6/ , ,028 Total Fonte: Marques Filho e Vieira Neto (1999, p. 56). fornece a probabilidade de um pixel da imagem possuir nível de cinza. Um histograma nada mais é que uma função de distribuição de probabilidade. É possível verificar que na Tabela 1 a soma dos valores de gráfica deste histograma. é 1. A Figura 9 mostra a representação Fonte: Marques Filho e Vieira Neto (1999, p. 56). Figura 9 - Exemplo de um histograma com oito níveis de cinza para a imagem Marques Filho e Vieira Neto (1999, p. 57), explicam que também é possível aplicar o conceito de histograma em imagens coloridas. A imagem deve ser decomposta (por exemplo, em seus componentes R, G e B) e calculado o histograma correspondente para cada componente obtida Equalização de histograma Marques Filho e Vieira Neto (1999, p. 61) explicam que a equalização de histograma

31 30 é uma técnica que visa redistribuir os valores de tons de cinza em uma imagem de forma que seja obtido um histograma mais uniforme, ou seja, o número (percentual) de pixels de qualquer nível de cinza deve ser praticamente igual. Gonzalez e Woods (2000, p. 124) representam os níveis de cinza a serem realçados com uma variável r e assumindo que os valores dos pixels são contínuos e foram normalizados com valores entre [0,1], sendo r = 0 representando o preto e r = 1 representando o branco. Considerando uma formulação discreta e permitindo valores de pixel entre [0, L 1]. Para todo r no intervalo [0, 1] é obtido através da função de transformação um novo valor de nível de cinza para r em s. Esta função de transformação satisfaz as seguintes condições: a) é univariada e monotonicamente 5 crescente no intervalo 0 r 1; b) 0 1 para 0 r 1. A ordem de preto para o branco na escala de cinza é preservada pela primeira condição acima e um mapeamento consistente com o intervalo permitido de valores de pixels é garantido pela segunda condição. Na Figura 10 é exibida uma função de transformação que satisfaz estas condições. Fonte: Gonzalez e Woods (2000, p. 125). Figura 10 - Uma função de transformação de níveis de cinza Uma função de transformação normalmente utilizada é a função de distribuição acumulada (Cumulative Distribution Funcion - CDF). Esta função é apresentada no Quadro 4. 5 Monotonicamente refere-se a crescer com uma variação constante.

32 31 s k T r k Fonte: Marques Filho e Vieira Neto (1999, p. 61). Quadro 4 - Equação discreta da distribuição de probabilidade CDF Esta função de transformação satisfaz as condições a) e b) apresentadas anteriormente, porque aumenta monotonicamente de 0 a 1 em função de r. Como exemplo, pode-se equalizar o histograma da Tabela 1 apresentada na seção utilizando a função de distribuição acumulada CDF conforme os Quadros 5, 6 e 7. Fonte: Marques Filho e Vieira Neto (1999, p. 62). Quadro 5 - Cálculo do primeiro valor da Tabela 1 De forma similar no Quadro 6 é apresentado o cálculo do segundo valor da Tabela 1. Fonte: Marques Filho e Vieira Neto (1999, p. 62). Quadro 6 - Cálculo do segundo valor da Tabela 1 Seguindo no Quadro 7 são apresentados os demais valores da Tabela 1. Fonte: Marques Filho e Vieira Neto (1999, p. 62). Quadro 7 - Cálculo dos demais valores da Tabela 1 k j=0 Na Figura 11 é exibido o gráfico da função de transformação gerada com os valores calculados. n j n k j=0 p r r j Onde 0 r k 1 e k 0, 1,, L 1 s 0 T r 0 p r r j p r r 0 0,068 0 j=0 s 1 T r 1 p r r j 1 j=0 p r r 0 + p r r 1 0,264 s 2 0,560 s 3 0,769 s 4 0,891 s 5 0,939 s 6 0,972 s 7 1 Fonte: Marques Filho e Vieira Neto (1999, p. 62). Figura 11 - Função de transformação utilizada para a equalização

33 32 Como a imagem possui apenas oito níveis de cinza, os valores de devem ser arredondados para um valor múltiplo de 1/7 mais próximo, como pode ser visto no Quadro 8. mapeado para 0 Fonte: Marques Filho e Vieira Neto (1999, p. 62). Quadro 8 - Cálculo dos demais valores da Tabela 1 Depois de concluído o mapeamento, é possível verificar que o nível 0 0 foi 0. A raia correspondente não sofreu alteração. Os 3214 pixels do tom de cinza 1/7 foram mapeados para Da mesma forma, os pixels com tom de cinza 2/7 foram modificados para 4/7. Os com 3 7 passaram a 5/7 e os de 4/7 mapearam para 6/7. As raias dos pixels com tons de cinza 5/7, 6/7 e 1 foram somadas em uma única raia, com tons de cinza máximo 1. s 0 0 s s s s s 5 1 s 6 1 s 7 1 A Tabela 2 apresenta os valores agrupados e a Figura 12 o histograma após a equalização. O histograma equalizado não está perfeitamente plano, no entanto apresenta melhor distribuição dos pixels ao longo da escala de cinza comparado ao original. Tabela 2 - Histograma equalizado Nível de cinza ( ) ,068 1/7 0 0,000 2/ ,196 3/7 0 0,000 4/ ,296 5/ ,296 6/ , ,109 Total Fonte: Marques Filho e Vieira Neto (1999, p. 63).

34 33 Fonte: Marques Filho e Vieira Neto (1999, p. 64). Figura 12- Histograma equalizado Na Figura 13 pode-se ver um exemplo da equalização do histograma para aumentar o contraste de uma imagem 446 x 297 com 256 tons de cinza. A imagem original é apresentada em (a), sendo (b) o gráfico do seu histograma. Em (c) pode ser visto a mesma imagem com o seu histograma equalizado e em (d) o gráfico da equalização. Fonte: Marques Filho e Vieira Neto (1999, p. 64). Figura 13 - Equalização de histograma em uma imagem de baixo contraste

35 RECONHECIMENTO DE PADRÕES Segundo Marques (2005, p. 3), a percepção humana identifica a todo momento objetos, sons e cheiros através dos sinais captados pelos órgãos sensoriais. Estas operações são realizadas quase que automaticamente e sem grandes dificuldades. Porém, o mesmo não é nada trivial para um computador, a menos que se restrinjam as hipóteses a atingir. O autor afirma que é mais simples escolher dentre um conjunto limitado de hipóteses, qual delas se adapta melhor às observações feitas do que olhar para um objeto genérico e identificá-lo. Este problema de decisão pode ser resolvido por métodos matemáticos gerais se for suficientemente bem definido. O objetivo do reconhecimento de padrões é resolver este tipo de problema de decisão. A estrutura clássica de um sistema de reconhecimento de padrões constitui-se por dois blocos, um de extração de características, chamadas de padrões e um classificador. O primeiro bloco seleciona através dos sensores apenas as informações mais relevantes para a decisão, chamadas de características. O classificador utiliza as características para escolher a hipótese ou classe que melhor soluciona o problema definido. O Quadro 9 apresenta a estrutura de um reconhecedor de padrões. Dados Extração de características Características Classificador Decisão Fonte: Marques (2005, p. 3). Quadro 9 - Estrutura de um reconhecedor de padrões Gonzalez e Woods (2000, p. 409) apresentam um padrão como uma descrição quantitativa ou estrutural de um objeto ou outra entidade de interesse em uma imagem. Um padrão é formado por um ou mais descritores (também denotados de características), ou seja, é um arranjo de descritores. Uma classe de padrões é uma família que compartilha propriedades em comum. Estas classes são denotadas como ω 1, ω 2,..., ω m, onde m é o número de classes. Os principais arranjos de padrões para descrições quantitativas são os vetores. O Quadro 10 apresenta uma representação de vetor de padrões para x.

36 35 x = x 1 x 2 x n Cada elemento Fonte: Gonzales e Woods (2000, p. 409). Quadro 10 - Representação de um vetor de padrões representa o i-ésimo descritor e n é o número de tais descritores. Os vetores de padrões são representados por colunas, em uma matriz n x 1. Um vetor de padrões também pode ser representado por uma forma equivalente para x = ( 1, 2,, ) T, onde T indica a matriz transposta. A natureza dos componentes de um vetor de padrões x depende da técnica de medida usada na descrição do próprio padrão físico. Como exemplo, podem-se descrever três faces de pessoas (João, Maria e Juninho) medindo a largura e comprimento de suas faces. Pode-se representá-los com vetores bidimensionais da forma x = ( 1, 2 ). Em que 1 e 2 representam a largura e o comprimento das faces respectivamente. As três classes de padrões são representadas por 1, 2 3 respectivamente, correspondendo às faces de João, Maria e Juninho, respectivamente. Como o comprimento e a largura das faces variam de pessoa para pessoa, do mesmo modo os vetores de padrões que representarão estas faces também variarão, não apenas entre as diferentes classes, mas também dentro de cada classe. Neste caso foi selecionado um conjunto com duas medidas. Um vetor de padrões representa fisicamente cada uma das amostras físicas. Cada face, neste caso, torna-se um ponto no espaço euclidiano bidimensional. Pode-se notar que o comprimento e a largura de uma das faces a separou adequadamente (Juninho) das outras duas faces. E não separou adequadamente as classes de João e Maria, isto ilustra o problema clássico de seleção de características. Através da Figura 14 pode-se observar o exemplo mencionando anteriormente, apresentando diversas amostras da face de cada indivíduo.

37 36 Fonte: adaptado de Gonzales e Woods (2000, p. 410). Figura 14 Exemplo de separação de padrões com duas medidas realizadas em três faces Pode-se complementar com a explicação de Campos (2001, p. 11), onde explica que dado um conjunto de c classes, ω 1, ω 2,..., ω c e um padrão desconhecido x, um reconhecedor de padrões auxilia através do pré-processamento, extração e seleção de características, associando x ao rótulo i de uma classe ω i. Para classificação de faces, uma imagem de face é o objeto (ou padrão x) e as classes são suas identificações (ω i ). É possível obter uma representação compacta dos padrões e uma estratégia de decisão simples, com um problema de reconhecimento de padrões bem definido e restrito. Isto é obtido quando o espaço entre as características de uma classe é pequeno e o espaço entre as classes é grande. 2.5 MÉTODO DOS K-VIZINHOS MAIS PRÓXIMOS A classificação de um padrão x consiste em calcular os k padrões de treino mais próximos e determinar qual a classe mais votada. A classificação de x é determinada pela classe mais votada. Este método de decisão é chamado de método dos k-vizinhos mais

38 37 próximos devido a basear-se nos k padrões de treino mais próximos de x (MARQUES, 2005, p. 101). Campos (2001, p. 19) explica como é realizada a classificação de um padrão de teste desconhecido x através do método dos k-vizinhos mais próximos: a) calcula-se a distância entre x e todos os seus padrões de treinamento; b) obtém-se as classes cujos k padrões estão mais próximas de x; c) o padrão de teste é classificado para a classe com maior frequência entre os k padrões mais próximos de x. Para implementar esse classificador as duas distâncias mais frequentemente utilizadas são a euclidiana e a de mahalanobis. A distância euclidiana entre dois vetores é definida no Quadro 11. Fonte: Campos (2001, p. 20). Quadro 11 - Equação da distância euclidiana entre dois vetores A distância de mahalanobis entre um padrão x e o protótipo σ de uma classe é apresentada no Quadro 12, em que é a matriz de covariância dos padrões da classe de σ. Fonte: Campos (2001, p. 20). Quadro 12 - Equação da distância de mahalanobis Um classificador muito comum é adotar k = 1 no classificador dos k vizinhos mais próximos, obtendo o vizinho mais próximo. Este classificador geralmente possui uma taxa de erro maior que k > 1. A principal vantagem deste método é a superfície de decisão que ele cria adaptando-se à forma em que os dados são distribuídos. Isto possibilita boas taxas de acerto para conjuntos de treinamento grandes ou representativos. Utilizar k > 1 reduz a taxa de erros provocada por ruídos nos padrões de treinamento. Por exemplo, para um padrão de treinamento da classe, que se encontra em uma região do espaço de características da classe devido à ação de ruídos, não prejudicará o desempenho do classificador devido à verificação dos seus vizinhos, fazendo com que um padrão de teste que está localizado próximo de seja classificado como um padrão de. A principal desvantagem do classificador dos k vizinhos mais próximos é a complexidade na fase de testes, onde ao efetuar-se uma busca sem ordenação pelos vizinhos mais próximos o desempenho pode não ser eficiente devido à quantidade de operações serem na ordem O(n). d E x i, x j x i x j x i x j t. x i x j d M x, σ x i σ t. Σ 1 x i σ

39 GENERALIZAÇÃO Campos (2001, p. 23) explica que um classificador deve ser treinado usando exemplos de treinamento para estimar a distribuição das classes. Os resultados dependem diretamente da quantidade de exemplos de treinamento e da qualidade destes exemplos. O objetivo de um sistema de reconhecimento é conseguir reconhecer futuros exemplos de testes mesmo que eles não sejam os mesmos utilizados durante o treinamento. Ocorrem problemas de generalização quando um classificador se especializa demais em seus padrões de treinamento, ou quando utiliza mais informações (características) do que o necessário. 2.7 PROBLEMA DA DIMENSIONALIDADE Conforme Campos (2001, pag. 23), o problema da dimensionalidade refere-se às dimensões adotadas para o espaço das características para o reconhecimento de padrões. O número de elementos de treinamento requeridos para que um classificador tenha um bom desempenho é uma função monotonicamente crescente da dimensão do espaço de características. Em problemas práticos a adição de características pode prejudicar a classificação sem a adição de exemplos de treinamento suficientes. Isto é conhecido como o problema da dimensionalidade e pode ocorrer com qualquer classificador. A curva apresentada na Figura 15 ilustra o problema da dimensionalidade, a qual apresenta três regiões no eixo da dimensionalidade com significados diferentes.

40 39 Fonte: Campos (2001, p. 25). Figura 15 - Problema da dimensionalidade Na região entre 0 e m1 a adição de características promove o aumento da taxa de acertos. Isto ocorre devido ao espaço com dimensões muito pequenas não possuírem informações suficientes para distinguir as classes de padrões. Na segunda região (entre m1 e m2) é atingida uma estabilidade na taxa de acerto. Nesta região adicionar ou remover características não altera a taxa de acertos significativamente. Para um problema de classificação, m1 apresenta a melhor dimensionalidade, pois este é o menor valor onde a taxa de acerto é máxima. A estabilização da taxa de acertos é decorrente as características mais importantes para distinguir padrões já terem sido adicionadas na região anterior e as características extras não são nem ruidosas nem relevantes para a classificação. A partir da região m2 em diante é possível notar o problema da dimensionalidade, onde o aumento do número de características também aumenta a taxa de erros. Assim, para obter-se o desempenho máximo de um classificador de padrões é necessário primeiramente descobrir a sua dimensionalidade ideal para determinado problema de reconhecimento. Isto pode ser conseguido simplesmente fazendo testes de tentativa e erro até que se atinja o ponto máximo de desempenho de um classificador. Pode-se realizar testes com redução de dimensionalidades para obtenção de diversos subespaços de características de vários tamanhos diferentes até que seja obtida uma dimensionalidade que reduza ao máximo os erros de classificação.

41 REDUÇÃO DA DIMENSIONALIDADE O termo dimensionalidade é o número de características de uma representação de padrões, ou seja, é a dimensão do espaço de características N. A dimensionalidade deve ser a menor possível devido ao custo de medição e precisão do classificador. Quando o espaço de características possuir apenas as características principais, o classificador será mais rápido e ocupará menos memória. Devido à dimensionalidade das imagens digitais ser muito elevada, é fundamental a sua redução na visão computacional. O espaço de imagens possui características que podem ser eliminadas sem impedir que objetos sejam reconhecidos. Uma imagem de largura w e altura h (em pixels) é um padrão no espaço de imagens possuindo uma dimensionalidade N = h x w. Este valor pode ser muito elevado quando as imagens são obtidas através de scanners ou de câmeras. Alterações na rotação, translação e escala dos objetos contidos nessas imagens fará com que ocorram grandes erros de classificação. Devido a isso é necessário o emprego de algoritmos de redução de dimensionalidade que propiciem a obtenção de representações dos padrões obtidos das imagens de forma robusta a essas alterações. Campos (2001, p. 28), explica ser possível através do teorema do patinho feio, fazer dois padrões arbitrários ficarem similares se eles forem codificados com um número suficientemente grande de características similares. A redução da dimensionalidade pode ser efetuada através de duas abordagens principais: a extração de características e a seleção de características. A extração de características cria novas características através de transformações ou combinações sobre as características originais. Os algoritmos de seleção selecionam através de um critério definido, o melhor subconjunto de características do conjunto de características original. Normalmente primeiro aplica-se o algoritmo de extração de características sobre os dados de entrada e depois aplica-se o algoritmo de seleção para eliminar os atributos irrelevantes efetuando a redução da dimensionalidade. A seleção de características normalmente reduz o custo para a medição dos dados e mantém sua interpretação física original. Porém as características extraídas através dos algoritmos de extração de características, devido a serem transformadas ou combinadas e proverem uma habilidade de discriminação melhor do que o subconjunto das características originais, podem perder seu significado físico. A Figura 16 apresenta uma imagem original (a)

42 41 e uma nova imagem gerada (b) através de transformações das características originais, porém sua interpretação original foi alterada devido às transformações realizadas. Figura 16 (a) Imagem original e (b) imagem com a interpretação física original alterada 2.9 ANÁLISE DE COMPONENTES PRINCIPAIS Segundo Lopes (2001, p. 28), para um conjunto de técnicas para análise de dados, onde parâmetros são estimados de uma mesma unidade experimental, é denominada análise multivariada. A análise de componentes principais (Principal Component Analisys - PCA) é um método estatístico multivariado usado para modelar a dependência entre variáveis. A PCA foi desenvolvida por Pearson em Ele descreveu que o grupo de componentes ou combinações lineares era gerado de um conjunto de variáveis originais, com variâncias mínimas não explicadas. As combinações lineares geram um plano onde o ajuste da nuvem de pontos será o melhor devido a ser mínima a soma das distâncias de cada ponto no plano. Hotteling em 1933, reformulou esta teoria extraindo variáveis do desempenho de estudantes em testes que resolviam problemas aritméticos e a velocidade em que liam textos. O objetivo de Hotteling era identificar as variáveis que mais influenciavam no desempenho das notas obtidas pelos alunos. Na época, verificou-se que alguns alunos apresentavam melhores notas do que outros e que consequentemente deveriam ter algum componente psicológico mais desenvolvido do que outros estudantes. A análise de componentes principais, denominada por Hotelling, é a teoria que encontra estes componentes e que maximiza a variância dos dados originais. Campos (2001, p. 34) explica que PCA, também conhecida como transformada de Hotelling, é considerado o melhor extrator de características linear conhecido e é amplamente utilizada em reconhecimento de padrões e reconhecimento de faces. A PCA trata imagens

43 42 como padrões em um espaço linear com o objetivo de efetuar reconhecimento estatístico. Uma imagem pode ser representada por uma matriz de h linhas por w colunas formando um padrão de h x w características ou um vetor no espaço (h x w)-dimensional, denominado de espaço de imagens. É possível construir a representação de uma imagem em um vetor, através da leitura coluna a coluna da imagem, colocando cada valor de pixel da imagem em um vetor coluna x. Desta forma a dimensionalidade de espaço de imagens N é dada por N = h x w. Uma imagem representada por uma matriz A de m linhas por n colunas pode ser construída conforme o Quadro 13. Fonte: Campos (2001, p. 34). Quadro 13 - Equação para criar um vetor coluna a partir de uma matriz A Didaticamente pode-se ilustrar o processo de criação de um padrão X a partir de uma imagem de face, como é apresentado na Figura 17. Este padrão X é um vetor coluna transposto (matriz com apenas uma linha e várias colunas, ou seja, um vetor linha). x l A j,k Para j 1, 2, 3,, h, k 1, 2, 3,, w e l j + k 1. h Fonte: Campos (2001, p. 34). Figura 17 - Padrão criado a partir de uma imagem No reconhecimento de padrões é desejável que a representação das classes e seus respectivos padrões sejam diferentes entre si e compactos. Isto implica em não existir redundância entre as diferentes características (também chamados de descritores, vide seção 2.4) dos padrões analisados, ou seja, não deve haver covariância entre os vetores da base de espaço de características. No reconhecimento de faces existe muita redundância das características devido ao correlacionamento entre os pixels da imagem, pois todas as faces possuem, testa, olhos, bochecha, nariz, boca, queixo, etc., tornando os vetores que representam as características das faces altamente correlacionados. É possível verificar a existência de covariância entre as características através de uma matriz de covariância obtida a partir de uma matriz de padrões X. A matriz de padrões possui um padrão de treinamento em cada coluna. Para T padrões de treinamento tem-se X1, X2,..., X T. O Quadro 14 apresenta uma matriz de padrões X.

44 43 A matriz como apresentado no Quadro 15. Fonte: Campos (2001, p. 35). Quadro 14 - Matriz X de padrões de treinamento de covariância de X pode ser obtida a partir da matriz de padrões X Fonte: Campos (2001, p. 35). Quadro 15 Criação da matriz de covariância a partir da matriz de padrões de treinamento X Onde é a matriz N x T com a mesma dimensão de X e o valor de suas colunas é calculado a partir da matriz de padrões X conforme apresentado no Quadro 16. Fonte: adaptado de Campos (2001, p. 35). Quadro 16 Equação para calcular os valores da matriz de covariância, Sendo a variância da característica, os elementos na diagonal da matriz de covariância representam a variância das características e os elementos fora da diagonal representam as covariâncias, isto é,, para 0, representa a covariância entre a característica e. Caso estas duas características sejam estatisticamente independentes, a covariância é nula, ou seja,, = 0. Para representar os padrões em um espaço onde não exista covariância entre as características diferentes é preciso que o espaço vetorial possua uma matriz de covariância com base diagonal. Para isto utiliza-se uma transformada que diagonalize a matriz de covariância da base atual do espaço de imagens. Com a diagonalização da matriz de covariância é maximizada a variância das variáveis (características) e a variância entre uma variável e outra será nula. De acordo com Campos (2001, p.36), devido ao processo de criação da matriz de covariância é possível torná-la diagonalizável. A matriz de covariância dos padrões de treinamento pode ser diagonalizada através de uma mudança de base do espaço de características como apresentado no Quadro 17. Obtém-se e i da decomposição apresentada no Quadro 18. Σ X X [x 1, x 2,, x T ] X μ. X μ t T 1 μ l,i T. X l,j j=1 onde l 1, 2, 3,, N e i 1, 2, 3,, T.

45 44 Fonte: Campos (2001, p. 36). Quadro 17 Matriz H para mudança de base da matriz de covariância Fonte: Campos (2001, p. 36). Quadro 18 Obtenção do auto-vetor e auto-valor a partir da matriz de covariância auto-valor de Sendo e i o i-ésimo auto-vetor de, m o número total de auto-vetores e o i-ésimo. Em trabalhos em que a PCA é empregada para o reconhecimento de faces, ou seja, quando os padrões de treinamento são imagens de faces, os auto-vetores são denominados eigenfaces. Isto porque quando estes auto-vetores são visualizados como imagens, possuem a aparência de faces. As variáveis dos padrões apresentados a partir desta nova base do espaço de características não são correlacionadas entre si. A mudança de base para este comportamento pode ser visualizada través do Quadro 19. Fonte: Campos (2001, p. 36). Quadro 19 Operação para a mudança de base da matriz de covariância Sendo i = 1, 2, 3,... T, e a representação do padrão no novo espaço de características. O efeito desta mudança de base pode ser ilustrado, criando-se uma matriz Y contendo os padrões (semelhante como é criada a matriz X no Quadro 14). Desta forma pode-se verificar que a matriz de covariância de Y,, será diagonal. Os auto-valores refletem diretamente a importância dos auto-vetores. Na PCA os auto-valores da matriz de covariância são iguais à variância das características transformadas. Isto significa que se um auto-vetor possui um auto-valor grande, ele fica em uma direção em que existe uma grande variância dos padrões. De maneira geral, é mais fácil distinguir um padrão que usa uma base em que seus vetores apontam para a direção com maior variância dos dados e não correlacionam-se entre si. A quantidade de auto-vetores obtidos é no máximo igual ao número de pixels da imagem, ou seja, N. No entanto, tendo a matriz H sido construída somente com os autovetores contendo os maiores auto-valores, a variância total dos padrões de entrada não sofre grandes alterações. Portanto é possível obter redução de dimensionalidade usando apenas os primeiros auto-vetores com os maiores auto-valores na construção da matriz H. Desta forma a dimensionalidade dos vetores y i possuem m dimensões, reduzindo a dimensionalidade para N m dimensões. H [e 1, e 2, e 3,, e m ] λ i e i y i Σ X e i Η t. X i

46 45 Loesch e Hoeltgebaum (2012, p. 68) explicam que a Análise das Componentes Principais (ACP), envolve um procedimento matemático que transforma um conjunto de variáveis possivelmente correlacionadas em um número menor de variáveis não correlacionadas, denominadas de componentes principais. A primeira componente principal possui a maior informação possível da variabilidade total dos dados e cada componente principal sucessiva contém parte das informações (menor que a componente principal anterior) restantes, tão grande quanto possível. Para efetuar este procedimento decompõe-se a matriz de covariância dos dados, usualmente normalizados através de seus auto-vetores e auto-valores correspondentes. Visualizando-se um conjunto de dados multivariados em um espaço de dados de alta dimensão (uma dimensão para cada variável, ou característica) como sendo um conjunto de pontos, a ACP fornece ao usuário uma imagem de uma dimensão inferior, uma sombra projetada dos objetos, visualizada a partir de um ponto de vista mais informativo. Como exemplo, suponha que há uma imagem de um cavalo em um espaço tridimensional (dentro de um cubo), e busca-se saber qual é o objeto neste espaço. Uma solução seria através da sua sombra projetada. Se colocar uma luz sobre o alto do objeto, através da sombra projetada no chão, não será possível determinar de qual objeto se trata. Caso a luz seja movida para traz do objeto, a sombra projetada na frente dele, também não o demonstrará com clareza. Já movendo a luz na lateral do objeto, a sombra projetada na outra lateral terá a forma do corpo de um cavalo, o que permite identificá-lo. Neste exemplo simples, permitiu-se reconhecer um objeto localizado em um espaço em três dimensões através do uso de apenas duas dimensões, reduzindo a dimensionalidade OPENCV Conforme Bradski e Kaehler (2008, p. 1), a Open source Computer Vision library (OpenCV) é uma biblioteca de código fonte aberto desenhada para eficiência computacional e com forte foco em aplicações de tempo real. A biblioteca foi escrita em C otimizado e com utilização de múltiplos processadores. É uma biblioteca multiplataforma de uso desenvolvida pela empresa Intel em 2000, livre tanto no meio acadêmico como no comercial para o desenvolvimento de aplicativos na área de visão computacional. A OpenCV possui módulos para processamento de imagens e

47 46 vídeo, estrutura de dados, álgebra linear e interface gráfica do usuário (Graphic User Interface - GUI) básica com sistema de janelas independentes. Também possui controle de mouse e teclado, além de mais de 350 algoritmos de visão computacional como filtros de imagens, calibração de câmera, reconhecimento de objetos, análise estrutural entre outros (OPENCV, 2011). Esta biblioteca foi desenvolvida nas linguagens de programação C e C++, porém também dá suporte para outras linguagens de programação como Java, Pyton e Visual Basic. A versão 1.0 foi lançada no final de 2006, a versão 2.0 foi lançada em setembro de 2009 e atualmente encontra-se na versão As plataformas compatíveis com a OpenCV são: a) MS Windows (95/98/NT/2000/XP,7); b) POSIX (Linux/BSD/UNIX-like OSes); c) Linux; d) OS X; e) MAC OS Básico. A biblioteca pode ser empregada nas seguintes áreas de aplicação: a) Humano-Computador Interface (HCI); b) identificação de objetos; c) sistema de reconhecimento facial; d) reconhecimento de movimentos; e) gravação de vídeos; f) robôs móveis; g) reconstrução 3D; h) realidade virtual; i) realidade aumentada; j) realidade misturada. A biblioteca OpenCV é estrutura nos seguintes módulos: a) cv: módulo das principais funcionalidades e algoritmos de visão computacional; b) cvaux: módulo com algoritmos de visão, está em fase experimental; c) cxcore: módulo de estrutura de dados e álgebra linear; d) highgui: módulo de controle de interface e dispositivos de entrada; e) ml: módulo de machine learning, é um tipo de máquina de aprendizagem; f) ed: manual de estrutura de dados e operações.

48 JAVACV O Java interface para opencv (JavaCV) é uma biblioteca wrapper 6 Java para a biblioteca OpenCV feita em C. Desenvolvida pela Google, ela segue a General Public License (GPL) versão 2. O JavaCV suporta aceleração de hardware, exibição de imagem em tela, executa código de forma paralela em processadores de múltiplos núcleos. Naturalmente suporta as funcionalidades da biblioteca OpenCV. Os requisitos básicos para instalar e usar a biblioteca JavaCV são possuir instalado a JDK, com versão superior ou igual a 6, e a biblioteca OpenCV Os principais métodos e recursos da biblioteca OpenCV utilizados nesse trabalho são: a) IplImage: estrutura que armazena uma imagem digital; b) OpenCVFrameGrabber: classe que provê recursos para acesso a dispositivos, como câmera de vídeo. O método grab(), por exemplo, retorna o frame corrente da câmera representado em um objeto IplImage; c) CvMat: classe que representa uma matriz de dados; d) cvcreatemat: cria uma instância de uma matriz; recebe como parâmetros a quantidade de linhas, colunas e o seu tipo; e) cveigendecomposite: possui como principais parâmetros de entrada uma vetor de IplImages com as imagens de entrada, no caso as faces para treinamento, a quantidade de auto-vetores a serem criados, um objeto vetor do tipo IplImage para receber os auto-vetores, um objeto IplImage para armazenar a imagem média calculada e um vetor de pontos flutuantes para armazenar os coeficientes dos autovalores; f) CvSize: classe que representa uma altura e uma largura; g) CvTermCriteria: tipo para critérios de terminação usado em algoritmos iterativos; passa-se como parâmetro o número máximo de iterações de uma operação iterativa; h) cvcreateimage: cria uma estrutura para armazenar os dados de uma imagem; i) cvcalceigenobjects: calcula os objetos auto-vetores, auto-valores e a imagem média a partir das imagens de treino (entrada); j) cvnormalize: normaliza os auto-valores; 6 Em programação, wrapper é uma classe empacotadora que dá acesso à outra classe, geralmente mais complexa e de mais baixo nível.

49 48 k) cvsaveimage: salva uma imagem do tipo IplImage no disco; l) CvRect: classe com estrutura de retângulo, x, y, width e height; m) cvrect: cria uma instância de um objeto CvRect; n) cvsetimageroi: marca em uma imagem a região de interesse; o) cvcopy: copia os dados de uma imagem para outra; p) cvresetimageroi: desmarca a região de interesse marcada pelo método cvsetimageroi; q) cvreleaseimage: libera a memória alocada para uma imagem do tipo IplImage; r) CvSeq: classe com crescimento dinâmico que armazena uma sequência de elementos. Exemplo, o retorno da função cvhaardetectobjects ; s) cvgetseqelem: função que retorna um elemento de um objeto do tipo CvSeq armazenado no índice também passado como parâmetro para a função; t) CvHaarClassifierCascade: representa um classificador em cascata que utiliza a transformada de Haar 7 ; os coeficientes de treinamento são carregados a partir de um arquivo XML; u) CvMemStorage: é uma estrutura de armazenamento de memória de baixo nível utilizada para armazenar dinamicamente estruturas de dados de crescimento, tais como sequências, contornos, gráficos, etc.; é organizada como uma lista de blocos de memória de tamanho igual; v) cvcvtcolor: converte a escala de cores de uma imagem, por exemplo, transformar uma imagem colorida para níveis de cinza; w) cvresize: redimensiona uma imagem resultando em outra imagem redimensionada; x) cvequalizehist: equaliza o histograma de uma imagem passada como parâmetro, resultando em outra imagem com o histograma equalizado; y) cvhaardetectobjects: detecta objetos em uma imagem, conforme as configurações passadas em um objeto classificador do tipo CvHaarClassifierCascade; z) cvgetquadranglesubpix: Extrai os pixels de uma imagem fonte para uma imagem de destino, onde os valores de pixels de não inteiros são recuperados usando interpolação bilinear; quando a função precisa de pixels fora da imagem, 7 A Transformada de Haar é um transformada matemática discreta usada no processamento e análise de sinais, na compressão de dados e em outras aplicações de engenharia e ciência da computação. Ela foi proposta em 1909 pelo matemático húngaro Alfred Haar (TRANSFORMADA DE HAAR, 2012).

50 49 ele usa o modo de replicação fronteira para reconstruir os valores; função utilizada para rotacionar uma imagem sem deixar áreas da imagem sem pixels nas laterais APPLET JAVA Applet é um programa Java que pode ser embarcado em páginas HTML e rodar em navegadores web que suportam Java, como Chrome, Internet Explorer e Mozilla FireFox. É utilizado para tornar as páginas web mais dinâmicas e divertidas (ROSE INDIA TECHNOLOGIES PVT. LTD, 2007). Ainda segundo esta definição, devido aos applets serem projetados para executar remotamente em um navegador, eles têm restrições, como não poder acessar recursos do sistema do computador local. As vantagens dos applets são (ROSE INDIA TECHNOLOGIES PVT. LTD, 2007): a) são multi-plataforma, podendo ser executados em Windows, Linux e Mac OS, entre outros; b) funcionam em qualquer versão da extensão Java; c) são executados em um contexto isolado, então o usuário final não precisa confiar no seu código, fazendo com que ele funcione sem confirmação de segurança; d) são suportados pela maioria dos navegadores web; e) são mantidos em cache pela maioria dos navegadores web; f) poder ter acesso completo à máquina se o usuário permitir. As desvantagens dos applets são (ROSE INDIA TECHNOLOGIES PVT. LTD, 2007): a) é necessário uma extensão do Java para executá-los; b) necessita da Java Virtual Machine (JVM), então toma um tempo significativo na primeira utilização; c) é difícil construir boas telas em applet, se comparadas à tecnologia HTML Assinatura de applet Java Em Jaco Web Security (2010, p. 1) é explicado que o modelo de segurança implementado pela plataforma Java é centrada sobre o conceito de sandbox (caixa de areia).

51 50 De acordo com este conceito, um código remoto (applet) não é confiável e o seu acesso a recursos é limitado apenas à área do sandbox, uma área do servidor web dedicada àquele applet. A ideia de sandbox foi desenvolvida para garantir que mesmo que um applet com código malicioso seja baixado para a máquina do usuário, ele não consiga danificar a máquina local (apagar um arquivo por exemplo) devido a estar limitado a uma área de acesso. Entretanto, existem applets confiáveis que precisam sair do sandbox para fornecer determinado serviço, como por exemplo, acessar a webcam do usuário. Uma das maneiras de resolver isto é assinando o applet que disponibiliza este serviço. Uma assinatura digital é utilizada quando se necessita da certeza da origem de uma mensagem como se fosse uma assinatura escrita no papel. Para assinar um applet, o desenvolvedor empacota todo o código Java e arquivos relacionados dentro de um arquivo JAR, que é um formato de arquivo de compactação de propósito geral, usado para compactar os componentes de uma aplicação Java. A plataforma Java assina e verifica arquivos JAR usando um par de chaves (chave pública e privada). A chave privada funciona como uma caneta eletrônica que assina o arquivo. Como o próprio nome sugere esta chave só é conhecida pelo assinante do applet. O processo de verificação da assinatura pode ser feito por qualquer pessoa que possua a chave pública correspondente à chave que assinou o arquivo. Na Figura 18 é possível verificar o processo para a assinatura de um arquivo JAR. Fonte: Jaco Web Security (2010, p. 1). Figura 18 - Processo para assinatura de um arquivo JAR A chave pública é distribuída dentro de um certificado que é uma declaração assinada por uma entidade idônea, chamada autoridade de certificação (Certification Authority - CA), que confirma que a chave pública que está no mesmo é confiável. Existem várias autoridades de certificação, por exemplo, a VeriSign, Thawte, Entrust e Certisign (empresa brasileira). Toda CA requer um emissor para validar a sua identidade, até mesmo a de mais alto nível. Para estes casos, existem os certificados auto-assinados (self-signed), onde o emissor do certificado é o próprio sujeito. Algumas ferramentas são necessárias para efetuar a assinatura de um applet seguindo

52 51 o padrão Java. Estas ferramentas já vêm com a instalação da JDK e são: a) Jar: ferramenta para criação de arquivos JAR; b) Keytool: ferramenta para gerenciamento de chaves e certificados digitais; c) Jarsigner: ferramenta para assinatura e verificação de arquivos; d) Policytool: ferramenta para criação e gerenciamento do arquivo.policy. Na Figura 19 são apresentados os passos de um processo completo para efetuar a assinatura de um applet adicionado em um arquivo JAR. Fonte: Jaco Web Security (2010, p. 1). Figura 19 Passos para a assinatura de um applet Deve ser criado o arquivo JAR contendo o arquivo.class do applet e todas as classes que proverão serviços fora da sandbox. No Quadro 20 pode-se verificar um exemplo de criação de um arquivo JAR chamado MeuJar.jar a partir do arquivo de classe Java MeuApplet.class utilizando a ferramenta 8 jar disponível na SDK Java. jar cvf MeuJar.jar MeuApplet.class Fonte: Jaco Web Security (2010, p. 1). Quadro 20 - Comando para criar um arquivo JAR Para criar um par de chaves públicas pode-se utilizar a ferramenta keytool da JDK. No Quadro 21 são apresentadas as opções do comando, onde: a) alias: é o nome pelo qual as chaves serão reconhecidas e armazenadas em um arquivo banco de chaves keystore (.keystore); b) keyalg: algoritmo de criptografia utilizado para a criação das chaves. Este argumento é opcional, se nada for especificado o algoritmo utilizado será o Digital Signature Algorithm (DSA); 8 Executado via linha de comando em um console Disk Operating System (DOS) para Windows.

53 52 c) keysize: tamanho da chave que será gerada. O algoritmo DSA suporta tamanhos de 512 a 1024 bits, sendo o tamanho necessariamente múltiplo de 64. Para qualquer algoritmo o tamanho padrão é 1024; d) sigalg: algoritmo de criptografia utilizado para assinar o JAR. Este argumento é opcional, se nada for especificado o algoritmo utilizado será o DAS; e) dname, nome da entidade que gerará o par de chaves. Exemplo, CN=TCC, OU=BCC, O=FURB, L=Blumenau, S=Santa Catarina, C=BR. Onde, CN = nome comum, OU = unidade organizacional (departamento, divisão), O = nome da organização, L = nome da localidade (cidade), S = estado, C = código do país; f) keypass: senha utilizada para a proteção da chave no keystore; g) validity: número de dias que o certificado deve ser válido; h) storetype: permite definir a forma de armazenamento e o formato dos dados do keystore. Por padrão o formato é Java Key Store (JKS) que é um tipo proprietário da implementação de keystore fornecido pela Oracle; i) keystore: keystore onde as chaves serão armazenadas. Se nada for especificado serão armazenadas no user.home\.keystore, em geral c:\windows\.keystore, se o arquivo não existir ele será criado; j) storepass: senha protetora do keystore; k) v: mostra o certificado em forma legível. keytool -genkey {-alias alias} {-keyalg keyalg} {-keysize keysize} {- sigalg sigalg} {-dname dname} {-keypass keypass} {-validity valdays} {- storetype storetype} {-keystore keystore} {-storepass storepass} {-v} Fonte: Jaco Web Security (2010, p. 1). Quadro 21 - Opções do comando keytool Quando as chaves são geradas, um certificado auto assinado é criado. Caso deseja-se trocar este certificado por um reconhecido por uma CA, deve-se fazer um pedido de certificado de assinatura (Certificate Signing Request - CSR). O resultado desta solicitação deve ser importado para o keystore. O arquivo JAR deve ser assinado com a chave privada, para isto pode ser utilizada a ferramenta jarsigner disponível na JDK. O Quadro 22 exibe as opções do comando, onde: a) keystore: URL do keystore onde a chave está armazenada. Se nada for especificado serão armazenadas no user.home\.keystore, em geral c:\windows\.keystore;

54 53 b) storetype: especifica o tipo do keystore que será instanciado. O tipo padrão do keystore é especificado pelo valor da propriedade de keystore.type, no arquivo de propriedades de segurança; c) storepass: senha protetora do keystore. Caso a senha não seja informada, o programa perguntará antes de assinar; d) keypass: senha protetora da chave privada. Se não for informada, o programa perguntará antes de assinar; e) sigfile: especifica o nome a ser usado nos arquivos.sf (arquivo de assinatura) e.dsa (bloco de assinatura). Caso nada seja informado, o nome será composto pelos 8 primeiros caracteres do alias especificado; f) signedjar: especifica o nome e o local de armazenamento do arquivo JAR assinado. Por padrão, o arquivo assinado irá sobrescrever o não assinado; g) verbose: indica o modo verbose 9, que faz aparecer mais informações na tela durante o processo de assinatura. jarsigner {-keystore url} {-storetype storetype} {-storepass storepass} {-keypass keypass} {-sigfile sigfile} {-signedjar signedjar} {-verbose} Fonte: Jaco Web Security (2010, p. 1). Quadro 22 Opções do comando jarsigner Para distribuir a chave pública é necessário um certificado autenticando a mesma. Para isto é necessário exportar o certificado que está no keystore usando a ferramenta keytool do JDK. O Quadro 23 exibe as opções do comando para exportar a chave pública em um certificado, onde: a) alias: nome com o qual a chave foi guardada no keystore; b) file: local e nome com o qual o certificado será exportado; c) storetype: especifica o tipo do keystore que será instanciado. O tipo padrão do keystore é especificado pelo valor da propriedade de keystore.type, no arquivo de propriedades de segurança; d) keystore: local do keystore onde o certificado está armazenado. Se nada for especificado serão exportadas do user.home\.keystore em geral c:\windows\.keystore; e) storepass: senha protetora do keystore. Se não for informada o programa perguntará antes de exportar; 9 Exibe as informações em modo detalhado.

55 54 f) rfc: exporta o certificado na forma definida pelo padrão privacy enhancement For electronic mail (RFC) Quando exportado desta forma este começa com Begin e termina por End ; g) v: indica o modo verbose, que faz aparecer mais informações na tela enquanto exporta o certificado. keytool -export {-alias alias} {-file cert_file} {-storetype storetype} {-keystore keystore} {-storepass storepass} {-rfc} {-v} Fonte: Jaco Web Security (2010, p. 1). Quadro 23 Opções do comando keytool para exportar o certificado com a chave pública Após o certificado ser exportado, ele pode ser distribuído para os usuários do applet. Estes deverão executar os procedimentos conforme exposto na Figura 20. Fonte: Jaco Web Security (2010, p. 1). Figura 20 - Passos que deverão ser efetuados pelo usuário do applet Para adicionar um applet dentro de uma página HTML, deve ser adicionada uma tag semelhante à exibida no Quadro 24. <applet code="applet.class" ARCHIVE="arquivoAssinado.jar" wdth=500 height=50> </applet> Fonte: Jaco Web Security (2010, p. 1). Quadro 24 Tag para adicionar um applet em uma página HTML O usuário deve importar o certificado contendo a chave pública do applet para um keystore de seu disco local. Isto pode ser feito utilizando a ferramenta keytool já mencionada acima. O Quadro 25 exibe as opções do comando para importar um certificado, onde: a) alias: nome com o qual o certificado será importado; b) file: local e nome do certificado. keytool -import {-alias alias} {-file file} Fonte: Jaco Web Security (2010, p. 1). Quadro 25 Opções do comando para importar um certificado Deve-se efetuar também as configurações do arquivo de política.policy no disco local do usuário do applet. Este arquivo informa quais permissões serão atribuídas para o applet. O arquivo.policy é um arquivo texto normal, podendo ser gerado através da ferramenta policytool fornecidas com a JDK Java, ou ainda pode ser fornecido pelo

56 55 desenvolvedor do applet com as devidas permissões necessárias. Na Figura 21 é possível visualizar um arquivo.policy e um arquivo.keystore no diretório home do usuário. Figura 21 - Arquivos.policy e.keystore no diretório home do usuário O Quadro 26 exibe os dados do arquivo.policy utilizado neste trabalho de monografia como exemplo. /* AUTOMATICALLY GENERATED ON Sat Jan 14 09:40:01 BRST 2012*/ /* DO NOT EDIT */ keystore "file:/c:/users/marcio.koch/.keystore", "jks"; grant signedby "TCC", codebase " { permission java.io.filepermission "<<ALL FILES>>", "read, write, execute, delete"; permission java.net.socketpermission "*", "accept, connect, listen, resolve"; permission java.util.propertypermission "*", "read, write"; permission java.lang.runtimepermission "*"; permission java.awt.awtpermission "showwindowwithoutwarningbanner"; permission java.security.allpermission; }; Quadro 26 - Exemplo dos dados contidos em um arquivo.policy 2.12 TRABALHOS CORRELATOS Existem alguns trabalhos relacionados ao reconhecimento de faces, podendo-se citar o Reconhecimento facial 2D para sistemas de autenticação em dispositivos móveis de Pamplona Sobrinho (2010), feito para autorizar um usuário a acessar o celular iphone pelo reconhecimento da face. Outro que pode ser destacado é o de Reaes (2006), Reconhecimento

57 56 de Faces em Imagens: Projeto Beholder, no qual aborda técnicas de reconhecimento de faces frontais em fotos 3x4. Já o Técnicas de seleção de características com aplicação em reconhecimento de faces feito por Campos (2001), emprega o método de redução de dimensionalidade com PCA, principalmente ao tratar-se da seleção de características Reconhecimento facial 2D para sistemas de autenticação em dispositivos móveis Com o trabalho Reconhecimento facial 2D para sistemas de autenticação em dispositivos móveis, Pamplona Sobrinho (2010) descreve o reconhecimento de faces e sua aplicação para a identificação de usuários no dispositivo móvel iphone, aplicando a técnica da PCA que está entre as que possibilitam obter os melhores resultados para o reconhecimento de faces frontais. O autor utiliza a API OpenCV que já provê métodos, como o opencvfacedetect, para detecção de faces. Destaca-se por efetuar todas as etapas do reconhecimento facial utilizando apenas a capacidade de processamento do dispositivo, sem qualquer auxílio externo. Segundo Pamplona Sobrinho (2010, p. 49), o sistema proposto é capaz de reconhecer 100% das imagens do mesmo indivíduo utilizado no treino e também capaz de identificar 100% dos casos de tentativas de fraude. A Figura 22 demonstra em: (a) tela para cadastrar usuários, (b) tela para selecionar uma foto e (c) a foto selecionada. Fonte: Pamplona Sobrinho (2010, p. 44). Figura 22 - (a) Tela cadastrar usuário, (b) tela selecionar foto e (c) foto selecionada

58 Reconhecimento de Faces em Imagens: Projeto Beholder Neste projeto Reaes (2006), visa implementar um sistema visual de cadastro e busca de pessoas, onde no cadastro em que possuir uma foto da pessoa a ser cadastrada, alguns campos como cor dos olhos, cor da pele, gênero, largura do queixo, distância entre os olhos são preenchidos automaticamente. A operação de busca pode ser feita pelo preenchimento de campos como convencionalmente ou através de uma imagem de rosto como entrada. Este sistema pode ser utilizado em delegacias, para cadastro e busca de criminosos. Atualmente o autor explica que a busca é manual folheando álbum por álbum de fotografias de criminosos até encontrar o suspeito ou não. Com este projeto basta a testemunha informar características da pessoa procurada para obter a listagem de todas que sigam o padrão descrito. As técnicas abordadas por Reaes (2006) foram reconhecimento de faces frontais em fotos 3x4. Ele implementa três técnicas de segmentação de faces: baseada em bordas, outra baseada na cor da pele e uma técnica híbrida combinando as duas técnicas. Relata também que os resultados foram satisfatórios, conforme apresentado na Tabela 3. Tabela 3 - Classes de resultados para as três abordagens empregadas Baseado em bordas Baseado em cor de pele Segmentação híbrida RUIM 16,6% 23,3% 6,9% REGULAR 9,7% 13,2% 9,5% BOM 73,7% 60,5% 83,6% Fonte: Reaes (2006, p. 19). A Figura 23 e a Figura 24 mostram exemplos dessas classes respectivamente para os algoritmos de segmentação baseado em bordas e baseado em cor de pele. Fonte: Reaes (2006, p. 17). Figura 23 - Resultados da segmentação baseada em bordas em três níveis: (a) ruim, (b) regular e (c) bom

59 58 Fonte: Reaes (2006, p. 17). Figura 24 - Resultados da segmentação em cor da pele em três níveis: (a) ruim, (b) regular e (c) bom Técnicas de seleção de características com aplicação em reconhecimento de faces Campos (2001) emprega os métodos de redução de dimensionalidade com PCA, principalmente ao tratar-se da seleção de características. Também propôs um esquema de reconhecimento de pessoas a partir de uma sequência de vídeos utilizando somente regiões que caracterizam as faces (olhos, nariz e a boca). Elaborou também uma nova função critério para seleção de características com um método eficiente de busca. Segundo Campos (2001, p. 98), a maioria das funções critério calculam apenas a distância entre dois conjuntos nebulosos. A função critério desenvolvida em seu trabalho pode efetuar o cálculo da distância entre mais de dois conjuntos nebulosos para realizar seleção de características. Os resultados obtidos com os experimentos mostram um bom potencial, conforme Tabela 4 e Tabela 5. Tabela 4 - Desempenho do classificador para reconhecimento de olhos e de faces quando treinado com três imagens por pessoa # Auto-vetores Olhos % Faces % 3 25,00 31, ,00 37, ,00 37, ,25 43, ,50 43, ,50 43, ,50 43, ,50 43,75 Fonte: Campos (2001, p. 93). Tabela 5 - Desempenho do classificador para reconhecimento de olhos e de faces quando treinado com cinco imagens por pessoa # Auto-vetores Olhos % Faces % 3 40,00 46, ,33 66,67 Fonte: Campos (2001, p. 93).

60 59 3 DESENVOLVIMENTO DO PROTÓTIPO Neste capítulo são detalhadas as etapas do desenvolvimento da ferramenta. São apresentados os principais requisitos, a especificação, a implementação e por fim são listados resultados e discussão. 3.1 REQUISITOS PRINCIPAIS DO PROBLEMA A SER TRABALHADO O protótipo de aplicativo para reconhecimento de faces aplicado na identificação e autenticação de usuários na web foi desenvolvido atendendo aos seguintes requisitos: a) permitir o cadastro de usuários (Requisito Funcional - RF); b) permitir o cadastro das imagens das faces dos usuários (RF); c) permitir que usuários efetuem autenticação através do reconhecimento facial (RF); d) permitir que usuários efetuem autenticação através de um usuário e uma senha (RF); e) converter as imagens para níveis de cinza (RF); f) normalizar a iluminação das imagens (RF); g) localizar face em uma imagem (RF); h) normalizar a pose da face (RF); i) normalizar a dimensão da face (RF); j) reduzir o ruído das imagens (RF); k) efetuar a segmentação para as imagens das faces (RF); l) extrair características da face (RF); m) efetuar o reconhecimento da face (RF); n) suportar banco de dados Oracle (Requisito Não-Funcional - RNF); o) permitir a aquisição das imagens via web através de webcam (RNF); p) suportar servidor Java EE GlassFish (RNF); q) suportar Java Server Pages (JSP 10 ) (RNF); r) permitir acesso web nos navegadores Internet Explorer e Chrome (RNF). 10 JSP é uma tecnologia utilizada no desenvolvimento de aplicações para web baseada na linguagem de programação Java.

61 ESPECIFICAÇÃO A especificação foi feita através da modelagem de diagramas de casos de uso, de atividades, de sequência e de classes. Os diagramas de casos de uso, atividades, sequência e classes foram criados com base nas definições da UML a partir da IDE do Eclipse com a extensão de modelagem desenvolvida pela Senior Sistemas S/A Processo geral do funcionamento da ferramenta Esta seção visa dar uma visão geral de forma ilustrativa dos dois processos principais realizados pela ferramenta desenvolvida, sendo eles: a) autenticar um usuário através da face; b) cadastrar novos usuários efetuando a aquisição de imagens das faces. A Figura 25 apresenta uma descrição do processo distribuído pelo ambiente de reconhecimento efetuado pela ferramenta. Figura 25 Processo distribuído pelo ambiente para autenticação através de reconhecimento facial Através da Figura 25 é possível verificar que o processo de reconhecimento e cadastro do usuário é divido em duas partes (rede local e servidor remoto) e em duas operações (autenticação e novo cadastro). Uma que acontece na máquina do usuário (rede local) que estiver utilizando o sistema e outra no servidor (servidor remoto). Na máquina do usuário, através de seu navegador de internet, após acessar o sistema, um applet é carregado e acessa o dispositivo de vídeo (webcam) do usuário. O usuário pode optar por cadastrar-se ou autenticar-se. Dependendo da operação desejada, autenticação ou novo cadastro, o usuário deve capturar uma ou mais fotos e as submeter para o servidor, respectivamente. As imagens

62 61 antes de serem submetidas para o servidor passam por um processamento de redução de resolução e ajuste da pose. Após, os dados do usuário e as imagens são submetidas via socket para o servidor. No servidor os dados são recebidos e processados de acordo com a operação. Para uma operação de autenticação, a face recebida é processada utilizando a transformada PCA e é submetida ao algoritmo de reconhecimento confrontando-a com as imagens dos demais usuários existentes no banco de dados. O retorno desta operação são os dados do usuário, quando este for reconhecido, e uma mensagem de erro, caso contrário. Quando a operação for um novo cadastro, aplica-se a transformada PCA para cada face do usuário e efetua-se o treinamento com as demais faces de todos os usuários já existentes na base de dados. Por último os dados gerados através do treinamento juntamente com as amostras das faces e dados do novo usuário são armazenados na base de dados. O retorno desta operação é uma mensagem de sucesso quando for bem sucedida, ou uma mensagem de erro, caso contrário Diagrama de casos de uso Esta seção contém o diagrama de casos de uso da ferramenta bem como seu ator. Cada caso de uso é detalhado no Apêndice A, juntamente com a descrição do ator Usuário. A Figura 26 exibe o diagrama com os casos de uso. O ator Usuário é o ator principal, ou ator primário, é ele quem inicia os casos de uso da ferramenta. O ator primário é o beneficiário dos resultados do caso de uso (BEZERRA, 2007, p. 81). Isto deve-se ao fato já exposto na seção sobre o processo de reconhecimento e cadastro do usuário ser divido em duas partes. O caso de uso UC02 Autenticar através da face é sem dúvida o caso de uso principal e possui um caso de uso que o estende, o UC03 Reconhecer usuário automaticamente que permite testar o reconhecimento do usuário em frente à câmera automaticamente, antes de efetuar a autenticação propriamente dita.

63 62 Figura 26 Diagrama de casos de uso da ferramenta Diagramas de atividades Nesta seção são apresentados os diagramas de atividades desde o acesso a página de login, como o cadastro e a autenticação do usuário. A Figura 27 exibe o diagrama de atividades do acesso á página de login. O diagrama está dividido em três raias para facilitar o entendimento da atividade de cada elemento do fluxo de atividades. O usuário inicia a atividade acessando o site, seguindo pela resposta do servidor web. A página de login contendo o applet é retorna para o navegador de internet do usuário. O applet é carregado e requisita os arquivos necessários para poder acessar o dispositivo de vídeo (webcam) do usuário e iniciar o processo de captura de imagens e detecção da maior face na imagem. É possível perceber pelas duas barras paralelas na horizontal, que o applet processa duas operações simultâneas: permitir a interação com o usuário e acessar o dispositivo de vídeo (webcam) do usuário detectando a maior face.

64 Figura 27 - Diagrama de atividades do acesso à tela de login 63

65 64 Na Figura 28 é apresentado o diagrama de atividades para cadastrar um novo usuário no sistema. Apenas usuários cadastrados poderão ser reconhecidos pelo sistema e consequentemente utilizá-lo. Figura 28 - Diagrama de atividades para cadastrar usuário

66 65 Na Figura 29 é apresentado o diagrama de atividades para autenticar um usuário através da face. Como a segunda e a terceira atividades da raia do usuário já são as opções padrão da tela, o usuário apenas precisa acessar a tela de login e clicar no botão Autenticar. Figura 29 - Diagrama de atividades para autenticação através da face Diagramas de sequência A Figura 30 demonstra a sequência de interações entre as classes participantes da autenticação de usuário através da face.

67 66 Figura 30 - Diagrama de sequência do reconhecimento de usuário através da face Diagramas de classes Os diagramas apresentados nessa seção (Figura 31 à Figura 36) apresentam as principais classes da ferramenta. Na Figura 31 estão as principais classes relacionadas ao applet. A classe WebcamApplet especializa a classe JApplet e implementa algumas interfaces

68 67 para interagir com a webcam e com o aplicativo servidor que processa as requisições do usuário. A classe OpenCVWebCam é a classe que acessa a webcam. Na Figura 32 é apresentada a continuação das classes relacionadas ao applet. Estas classes são as responsáveis por manter um painel com duas abas (classe PageControlFace), sendo a aba da tela de login (classe PanelLogin) e a aba com a tela de cadastro de usuário (classe PanelNewUser). As três classes mencionadas especializam a classe abstrata CustomPanel, que possui uma área para exibir as imagens capturadas da webcam pela classe OpenCVWebCam (Figura 31). A Figura 33 apresenta mais algumas classes relacionadas ao applet, porém não diretamente. A classe FaceProcessor é o core (núcleo de processamento) para o préprocessamento das imagens e normalização da face. A classe OpenCVWebCam está associada a esta classe. Ela fornece uma imagem capturada a partir da webcam e tem como retorno a maior face detectada na imagem, pré-processada e com a pose normalizada. As classes relacionadas ao usuário, seus dados e suas faces capturadas, são apresentadas na Figura 34. A classe base User armazena as informações básicas do usuário. A classe UserFaceList especializa a classe User, suportando armazenar uma lista de imagens da face (objetos IplImage da API OpenCV) através da associação por composição com a classe FaceList, sendo esta o container das imagens das faces. Este conjunto de classes do usuário é utilizado tanto pelo applet como pelas classes do aplicativo servidor para o processamento dos cadastros e requisições de autenticação. Na Figura 35 são apresentadas as classes para processamento no aplicativo servidor. A classe PCAProcessor é o core de processamento para treinamento e reconhecimento de um usuário através da face. Ela especializa a classe abstrata PCABase que por sua vez realiza a interface PCAInterface. A Figura 36 mostra as classes de comunicação entre o aplicativo servidor e o applet. A classe ServerSystemManager inicializa o servidor de socket (classe FaceServerSocket) que fica escutando as requisições dos usuários da ferramenta. A classe FaceServerClientSocket é responsável por atender as requisições de um usuário em particular.

69 Figura 31 - Diagrama de classes do applet 68

70 Figura 32 - Diagrama de classes dos componentes das abas novo usuário e login do applet 69

71 Figura 33 - Diagrama de classes da classe FaceProcessor - principal classe de processamento de imagem 70

72 Figura 34 - Diagrama da classe de usuário e seus relacionamentos 71

73 Figura 35 - Diagrama das classes para processamento PCA 72

74 73 Figura 36 - Diagrama das classes de socket no aplicativo servidor 3.3 IMPLEMENTAÇÃO implementação. A seguir são mostradas as técnicas e ferramentas utilizadas e a operacionalidade da

75 Técnicas e ferramentas utilizadas A implementação da ferramenta foi realizada em linguagem Java sobre sistema operacional Windows 7. Foram utilizadas as seguintes ferramentas: a) Eclipse Java EE IDE for Web Developers, versão Indigo Release, como ambiente de desenvolvimento integrado; b) API JavaCV versão como biblioteca auxiliar para visão computacional e manipulação de imagens; c) OpenCV versão como biblioteca base para a biblioteca JavaCV; d) GlassFish, versão 3.1, como servidor Java EE para publicação e execução de páginas web; e) SGBD Oracle Database 10g Express Edition, para persistência dos dados; f) Oracle SQL Developer, versão , para criação e manutenção da base de dados; g) Google Chrome, versão m, como navegador de internet principal; h) Internet Explorer 9, versão 9.0.6, como navegador de internet adicional; i) Firefox 12.0, como navegador de internet adicional; j) JDK, versão 1.6.0_29-64-bit, para execução do Eclipse, do GlassFish e da própria ferramenta desenvolvida; k) JRE versão 1.6.0_31-b05 64-bit, para execução do applet Applet no lado do usuário Através do applet Java, carregado no navegador de internet, é que ocorre a maior iteração com a ferramenta por parte do usuário. Este applet é baixado automaticamente pelo navegador de internet quando o usuário acessa o site da ferramenta (e. g. O applet nada mais é do que um arquivo JAR contendo outros arquivos, que neste caso, são as classes Java compiladas (.class) dos pacotes necessários para a execução do applet, sendo que uma das classes especializa a classe JApplet, conforme ilustrado na Figura 31 e no Quadro 27.

76 75 Quadro 27 Classe WebcamApplet que especializa a classe JApplet A exportação deste arquivo JAR e dos demais componentes necessários, pode ser efetuada pelo Eclipse, conforme ilustrado na Figura 37. Figura 37 - Exportar pacotes para um arquivo JAR utilizando o Eclipse Para que o applet possa sair da sua sandbox (caixa de areia) e desempenhar o seu propósito (como acessar o dispositivo de vídeo na máquina do usuário, efetuar comunicação

77 76 via socket, carregar as DLLs da API OpenCV entre outros) ele precisa ser assinado com um certificado digital e precisa das devidas permissões no arquivo de políticas do Java.policy. Na seção há uma abordagem mais detalhada de como efetuar este procedimento. Basicamente foi gerado, com a ferramenta keytool, um par de chaves pública e privada juntamente com um.keystore para armazená-las no diretório padrão (diretório do usuário). A chave pública já é adicionada em um certificado auto assinado que a ferramenta keytool cria durante a geração das chaves. Este certificado deve ser disponibilizado para os usuários que utilizarão a ferramenta. Foi utilizada a ferramenta jarsigner para assinar o JAR contendo o applet e as classes dos demais pacotes necessários. As configurações efetuadas no arquivo.java.policy já foram vistas no Quadro 26. Entre as configurações destaca-se o caminho para o keystore, o alias para o certificado, o domínio (chave codebase) ao qual o certificado garante a confiabilidade e as chaves de permissão (permission). Finalmente, de posse do certificado, o usuário deve importá-lo no seu keystore para ser reconhecido pelo Java. Com o intuito de demonstrar o controle efetuado pelo Java quanto à proteção de código malicioso executado através de applets não assinados e que tentam ultrapassar os limites impostos pela sandbox, foi gerado uma versão do JAR contendo o applet sem assinálo. A Figura 38 mostra a mensagem de aviso de segurança apresentada pelo navegador de internet Google Chrome ao acessar a ferramenta de autenticação através da face, com o JAR contendo o applet não assinado. Figura 38 - Aviso de segurança exibido pelo Java através do navegador Google Chrome Mesmo que seja escolhido Não na mensagem questionando ao usuário se deseja bloquear a execução do componente possivelmente não seguro, devido ao código dele, no caso do applet, tentar ultrapassar a sandbox, o mecanismo de proteção do Java gera uma exceção conforme exibido na Figura 39. Nos detalhes da exceção, representados na Figura 40,

78 77 é possível evidenciar a tentativa de ultrapassar a sandbox pelo applet, através do texto selecionado na mensagem. Figura 39 - Erro exibido pelo Java através do navegador Google Chrome Figura 40 - Detalhes da exceção gerada pelo Java Como já mencionado no Quadro 27, para desenvolver um applet, deve-se especializar a classe JApplet. O applet desenvolvido inicia a sua execução através do método virtual público e sem retorno init(), conforme ilustrado através do Quadro 28. A webcam também é inicializada através deste método pela chamada de loadwebcam(), porém em uma linha de execução (thread) em separado, para que, em paralelo o usuário possa interagir com o applet e acessar a webcam.

79 78 Quadro 28 - Código fonte do método init() do applet O Quadro 30 apresenta o código fonte do método loadwebcam(). Este método baixa um arquivo comprimido chamado opencv231.zip localizado no diretório configurado no servidor de internet onde o site da ferramenta está hospedado, por padrão o diretório é e está configurado na chave dll_path do applet. Este arquivo possui as bibliotecas OpenCV necessárias para acessar o dispositivo de vídeo (webcam) do usuário, efetuar pré-processamento das imagens das faces e detecta face e os olhos. Também outros três arquivos XML estão contidos neste arquivo comprimido contendo as configurações dos classificadores para detecção das faces e olhos. O Quadro 29 exibe todos os arquivos contidos no arquivo compactado opencv231.zip. Quadro 29 - Arquivos que serão compactados e baixados para a máquina do usuário automaticamente pelo applet

80 79 Quadro 30 - Código fonte do método loadwebcam() Os arquivos são baixados para o diretório temporário do usuário dentro da pasta TCC_1-0-0 criada pelo applet. O método discoverdevices() localiza e testa os dispositivos de vídeo do usuário. Caso encontre ao menos um dispositivo de vídeo operante, inicializa a webcam e registra o próprio applet como sendo um observador (linha 152 do Quadro 30) das imagens capturadas pela webcam. A chamada webcam.start() dá início à captura das imagens. No Quadro 31 é exibido o código fonte do método de inicialização da webcam. O

81 80 método grabandpaint() é o método responsável por capturar o frame (imagem), processar a imagem (a fim de detectar a face) e exibi-la na tela para o usuário. Quadro 31 - Código fonte do método start() da webcam O Quadro 32 apresenta o código fonte do método grabandpaint(). Este método é chamado no run() da linha de execução (thread) criada na linha 89 do Quadro 31, possibilitando assim que o usuário interaja com o applet ao mesmo tempo que o applet interage com a webcam. Inicialmente é feita a captura da imagem através da chamada grabber.grab(). O frame obtido é atribuído para o processador de faces que efetua a detecção da maior face e pinta um retângulo verde ao seu redor. Na linha 70 (Quadro 32), são notificados os observadores da webcam, que no caso é apenas o applet. Isto possibilita, por exemplo, obter a face ao comando de captura realizado pelo usuário. Nas linhas 71 e 72 é feito um tratamento para exibir logo abaixo da maior face detectada o nome do usuário reconhecido, quando a opção Reconhecer automaticamente estiver marcada na tela de login no site da ferramenta. Nas linhas 74 e 79 é, atribuída a imagem com a face detectada e é feita a atualização do novo frame no painel que exibe a imagem da webcam na tela de login, respectivamente, conforme mostrado no Quadro 33.

82 81 Quadro 32 - Código fonte do método grabandpaint() Quadro 33 - Código fonte do método para atribuição e sua pintura da imagem no painel do applet Detecção facial O objetivo da detecção facial neste trabalho é encontrar a maior face presente na imagem capturada através da webcam. O acesso ao dispositivo de webcam para captura das imagens é realizado utilizando a API OpenCV. A técnica utilizada para a detecção facial é a proposta por Viola e Jones (BRADSKI; KAEHLER, 2008, p. 506) e implementada na OpenCV. Esta técnica aplica a transformada de Haar, que utiliza características que codificam a existência de contrastes orientados entre

83 82 regiões da imagem. Um conjunto destas características pode ser usado para codificar os contrastes apresentados por um rosto humano e suas relações espaciais. Classificadores em cascata são treinados com várias amostras de um objeto particular, (e. g. um rosto), denominados de exemplos positivos, que são dimensionados para o mesmo tamanho, (e. g. 20 x 20 pixels) e exemplos negativos, imagens diferentes das amostras positivas também do mesmo tamanho. Depois dos classificadores serem treinados, eles podem ser aplicados a uma região de interesse em uma imagem de entrada. O classificador gera o valor 1 se a região é aprovada e o valor 0 caso contrário. Para procurar o objeto em toda a imagem, move-se uma janela de busca em toda a imagem e verifica-se todos os locais usando os classificadores. Os classificadores podem ser facilmente redimensionados possibilitando encontrar objetos de interesse em tamanhos diferentes, o que é mais eficiente do que redimensionar a própria imagem. A classificação é feita em cascata devido ao classificador resultante ser formado por vários classificadores mais simples. Caso um classificador reprove uma região analisada, os demais classificadores nem a testam a fim de evitar processamento desnecessário, ou seja, todos os classificadores devem aprovar uma região para ela ser considerada aprovada. O experimento apresentado na Figura 41 demonstra um exemplo de reconhecimento facial utilizando a API OpenCV. É possível notar a variação no tamanho de cada face. O algoritmo neste trabalho foi projetado para detectar e identificar apenas a maior face da imagem (delimitada por um retângulo verde), pois a maior face será o objeto coletado para amostra e teste durante o processo de cadastro de usuário e reconhecimento facial. Porém nesta demonstração são demarcadas todas as faces detectadas na imagem para enfatizar a eficiência do algoritmo de detecção facial da API OpenCV. Segundo Bradski e Kaehler (2008, p. 507), o melhor modelo de treinamento fornecido pela OpenCV para detecção de faces frontais (utilizado neste trabalho, apesar de ser possível criar um próprio), está no arquivo /opencv/data/haarcascades/haarcascade_frontalface_alt2.xml.

84 83 Figura 41 - Exemplo de detecção de faces, a maior face é pintada em verde Para uma face ser detectada na imagem, algumas características são necessárias, sendo elas: a) a pose da face deve ser frontal; b) os olhos devem estar abertos; c) não é exigido expressão totalmente neutra; d) deve ser a maior face presente na imagem. O Quadro 34 mostra o código do método detectfaces(). Pode ser observado que antes de efetuar a detecção propriamente dita das faces na imagem, são realizados préprocessamentos visando maximizar a detecção. Na linha 115 é carregado o arquivo XML contendo o modelo de detecção de faces frontais. As linhas 117 e 121 criam uma imagem vazia com as mesmas propriedades da imagem original para armazenar a imagem em tons de cinza. Conforme já mencionado na seção , uma imagem em tons de cinza possui apenas um componente na banda de cores deixando o custo computacional para processá-la menor. A redução da resolução da imagem para 50% do seu tamanho original é realizada na linha 129. Os classificadores percorrem uma imagem menor com muito menos custo computacional do que a imagem no seu tamanho original sem perder a sua eficiência. Na linha 137 é feita a equalização do histograma da imagem já reduzida, mais detalhes sobre a

85 84 equalização do histograma podem ser encontradas na seção A equalização do histograma visa melhorar o contraste da imagem o que é muito importante para um classificador de características. Por fim na linha 140 a função cvhaardetecobjects() efetua a detecção das faces presentes na imagem com as ações de pré-processamento acumuladas. Quadro 34 Método detectfaces() para detectar as faces em uma imagem No Quadro 35 é exibido o código fonte do método getimagewithdetectedface() que identifica e marca com um retângulo na cor verde a maior face encontrada na imagem. A função getbigrect() retorna as coordenadas do retângulo da maior face encontrada, baseado na imagem com a resolução diminuída, para ajustar as dimensões do retângulo para a imagem original, basta multiplicar cada ponto do retângulo pela escala. Para dar um efeito mais moderno ao retângulo, ele é desenhado com segmentos de reta de forma que os centros de cada lado fiquem sem cor.

86 85 Quadro 35 - Código fonte do método getimagewithdetectedface() No Quadro 36 o método getbigfacerect() itera pela a lista de faces e compara as dimensões de cada face guardando a que possuir a maior largura e altura. Ao final do método retorna estas coordenadas através de um objeto FaceRect. Quadro 36 - Código fonte do método getbigfacerect() Na Figura 42 é possível acompanhar o resultado de cada um dos passos descritos acima, sendo que em (a) tem-se a imagem original, em (b) a imagem em tons de cinza, (c) apresenta a imagem com sua resolução reduzida pela metade e (d) apresenta a imagem com a face detectada e marcada com um retângulo verde em volta.

87 86 Figura 42- Processo executado pelo algoritmo de detecção facial: (a) imagem original, (b) imagem em tons de cinza, (c) imagem com resolução reduzida em 50%, (d) imagem com histograma equalizado e (e) imagem com a face detectada Captura da face A captura da face compreende o processo de obter a maior face detectada na imagem obtida a partir do dispositivo de vídeo do usuário. A primeira parte deste processo foi apresentada na seção Porém a maior face detectada precisa passar por mais algumas

88 87 etapas de pré-processamento para estar em condições de ser submetida ao aplicativo servidor para fins de reconhecimento ou treinamento e armazenamento na base de dados. O método getbigface() apresentado no Quadro 37, primeiramente obtém as coordenadas da maior face, ajusta as dimensões multiplicando cada ponto do retângulo pela escala. Na sequência, cria-se uma nova imagem para armazenar apenas a ROI que compreende a face. O método cvsetimageroi() marca na imagem, já em tons de cinza, a região de interesse. Esta região é extraída através do método cvcopy() para a imagem criada para armazenar a face. A região de interesse deve ser redefinida com a chamada do método cvresetimageroi(). Quadro 37 - Método getbigface() retorna a imagem da maior face detectada Um ponto muito importante neste processo de segmentação é que as imagens estejam todas com os olhos alinhados horizontalmente, com as mesmas dimensões e com o contraste ajustado. Como as imagens das pessoas foram obtidas nos mais variados ambientes variando a iluminação, distância da câmera e inclinação da face, é necessário efetuar um préprocessamento de forma automatizada em cada face. A inclinação da face é ajustada baseada na correção do ângulo formado entre os

89 88 olhos de forma que fiquem na mesma linha horizontal. Isto é obtido pelo método rotatefacebyeyes(). Este método é mais complexo e será discutido mais adiante no Quadro 38. O redimensionamento da imagem da face é efetuado através do método cvresize(). Normalmente se deseja que o mapeamento da imagem original para a de destino seja feito o mais suave possível. O argumento de interpolação desta função controla exatamente como isto será feito. Neste trabalho utilizamos o valor CV_INTER_LINEAR, que analisa o peso linear dos valores de 2 por 2 pixels circundantes da origem, conforme estão pertos do pixel de destino. Por último é feita a equalização do histograma, visando equilibrar o contraste (áreas com muita sombra e as áreas claras da imagem). A Figura 43 apresenta os paços resultantes da execução do método getbigface(). Na face (a) temos a imagem original, porém já em níveis de cinza. A região obtida da face vai desde a testa até a base do queixo. Quanto mais próximo à área do rosto, sofrerá menos influência devido a cabelo e do próprio fundo da imagem. Na face (b) a imagem foi rotacionada onze graus em sentido horário. Em (c) a imagem foi redimensionada para 100 x 100 pixels e na face (d) a imagem teve seu histograma equalizado. Figura 43 - Resultado do método getbigface(): (a) imagem original, (b) imagem rotacionada, (c) imagem redimensionada e (d) imagem com histograma equalizado No método getbigface() (linha 302) apresentado no Quadro 37, é feita a chamada ao método rotatefacebyeyes(), onde o único parâmetro passado é a face. O retorno desta função é a imagem da face rotacionada de forma que os olhos estejam alinhados horizontalmente (item (b) da Figura 43). No Quadro 38 é exposto o código fonte do método rotatefacebyeyes(). Inicialmente o método detecta o olho esquerdo e o olho direito (o código fonte da rotina que detecta os olhos está no Quadro 39). Devido à imagens de face com poses não uniformes e inclinações da face das mais variadas, a detecção de olhos em certos casos confunde outras partes da imagem como sendo olhos (falsos positivos), como as narinas (face inclinada com a cabeça para trás, destaca as narinas) e as sobrancelhas (pessoas com sobrancelhas acentuadas). Isto foi resolvido de duas formas. Para a o caso das narinas foi diminuindo a ROI em volta dos olhos. Porém reduzir

90 89 demasiadamente as imagens com a face muito inclinada não permite detectar o olho na região mais inclinada da face devido a esta ficar oclusa em relação à ROI. O tratamento para a confusão com as sobrancelhas foi mais complexo e exige ordenação do tamanho dos olhos encontrados e o cálculo de suas dimensões e posição obtendo os dois maiores olhos nas partes mais extremas da face. Com os respectivos tratamentos descritos acima, obteve-se 100% de acerto na detecção dos olhos. O ângulo de inclinação da face baseado nos olhos é obtido calculando-se a tangente do cateto oposto dividido pela hipotenusa. A Figura 44 exibe uma ilustração do triângulo retângulo formado pela linha horizontal entre os olhos. Figura 44 - Imagem de face com inclinação baseada na linha horizontal entre o centro dos olhos

91 90 Quadro 38 - Código fonte do método rotatefacebyeyes() A detecção dos olhos pode ser feita de forma muito semelhante como a já mencionada na linha 140 do Quadro 34 para a detecção da face, inclusive com o método cvhaardetectobjects(). O que muda neste caso é o arquivo XML com as configurações de

92 91 treinamento para o classificador em cascata, onde chama-se o método uma vez para cada olho e com seu respectivo arquivo de configurações (linhas 447 e 448 do Quadro 38). O Quadro 39 apresenta o código fonte do método para detecção os olhos. Quadro 39 - Código fonte do método detecteyes() A imagem passada como parâmetro para o método de detecção de olhos contém toda a face. Porém, para diminuir o custo computacional e resolver problemas de falso positivos para os olhos, conforme já mencionados acima, obtém-se apenas o ROI dos olhos com o método apresentado no Quadro 40. Quadro 40 - Código fonte do método geteyesslicefromimage Na linha 542 do método rotatefacebyeyes() (Quadro 38) é efetuada a rotação da face com a chamada do método rotateimage(). Este método utiliza uma função do OpenCV

93 92 chamada cvgetquadranglesubpix(). Esta função utiliza uma função de transformação afim e interpolação de pixels para reconstruir a imagem rotacionada. Segundo Bradski e Kaehler (2008, p. 163), uma transformação afim é qualquer transformação que pode ser expressa sob a forma de uma multiplicação de matrizes seguida de uma adição de vector. Na API OpenCV o estilo padrão para representar esta transformação é uma matriz 2 por 3. Pode-se pensar em uma transformação afim como desenhar uma imagem em uma folha de borracha grande e em seguida, deformar a folha empurrando ou puxando os cantos para fazer diferentes tipos de paralelogramos. Morimoto (2005), explica que a interpolação de imagens consiste em adicionar novos pontos a ela. Estes pontos são baseados nos pontos já existentes, aumentando a quantidade de pontos, porém não aumentando os detalhes da imagem. Para uma imagem com um ponto observado de tonalidade verde igual a 100 e outro ponto com tonalidade verde 20. Deve-se somar os dois pontos, calcular a média e incluir um novo ponto com tonalidade verde 60 entre os dois pontos anteriores. Caso a interpolação continuasse, seria incluído em seguida um ponto com tonalidade verde 40 entre o ponto 20 e o ponto 60, um ponto com tonalidade verde 80 entre o ponto 60 e o 100 e assim sucessivamente com toda a imagem. O método rotateimage() apresentado no Quadro 41, utiliza a função cvgetquadranglesubpix(). Esta função calcula todos os pontos na imagem de destino mapeando-os (com interpolação) a partir dos pontos em que foram calculados na imagem de origem através da aplicação de uma transformação afim, realizada pela multiplicação pela matriz de mapeamento 2 por 3. A conversão dos locais na imagem de destino para coordenadas homogêneas para a multiplicação é feita automaticamente (BRADSKI; KAEHLER, 2008, p. 166).

94 93 Quadro 41 - Método rotateimage() rotaciona a face baseado no ângulo passado Em particular, os pontos de resultados na imagem de destino são calculados de acordo com as equações do Quadro 42. Observa-se que o mapeamento de (x, y) a (x, y ) tem o efeito que, mesmo se o mapeamento M é um mapeamento de identidade, os pontos na imagem de destino no centro serão tomados a partir da imagem fonte em sua origem. Se for necessário obter pontos de fora da imagem, ela usa replicação para reconstruir estes valores. Fonte: adaptado de Bradski e Kaehler (2008, p. 166). Quadro 42 Equação para cálculo dos pixels da imagem de destino Na Figura 45 é possível verificar alguns processos e resultados obtidos com a rotação da face na imagem original (a). A imagem (b) ilustra a ROI obtida através do método geteyesslicefromimage() para efetuar a detecção dos olhos e a verificação do ângulo

95 94 formado pela linha calculada entre os centros dos dois olhos. A imagem (c) foi rotacionada manualmente onze graus no sentido horário em um editor de imagens (e. g. Adobe Photoshop). Em (d) a imagem foi rotacionada pelo método rotateimage(), cujo ângulo formado pela linha calculada novamente entre os centros dos dois olhos é zero e pode ser visualizado na imagem (e). Figura 45 Exemplo de uma imagem da face rotacionada, (a) imagem original, (b) olhos não alinhados horizontalmente, (c) face rotacionada em um editor de imagens, (d) face rotacionada pelo método rotateimage()e (e) olhos alinhados horizontalmente É possível verificar a diferença entre a rotação da face realizada por um editor de imagens, na imagem (c) e a rotação efetuada pelo método rotateimage() na imagem (d). A área em preto na imagem (c) foi toda reconstruída através de interpolação na imagem (d). Pode-se ainda notar que as dimensões da imagem (c) são maiores do que da imagem (d), isto deve-se ao fato de toda a imagem ser girada gerando áreas vazias nas laterais (áreas em preto) e as dimensões da diagonal serem maiores do que a imagem na posição original. Já na imagem (d) os pixels foram rearranjados preservando suas dimensões originais, apesar de, os pixels nas áreas reconstruídas não ficaram exatamente como os da imagem original.

96 Envio das informações para o aplicativo servidor Ao usuário efetuar uma submissão das informações para o aplicativo servidor, seja devido a um novo cadastro de usuário ou a uma autenticação através da face ou de um usuário e uma senha (método processuser() mostrado no Quadro 43), ou ainda pelo auto reconhecimento de um usuário (método autorecognizeuser() mostrado no Quadro 44), é aberta uma conexão TCP/IP através de um soquete (socket) com o aplicativo servidor. Neste trabalho a porta padrão utilizada foi a porta 7181, entretanto qualquer outra porta disponível poderia ter sido utilizada. O Quadro 45 apresenta o código fonte da conexão com o servidor. Quadro 43 - Código fonte do método processuser()

97 96 Quadro 44 - Código fonte do método autorecognizeduser() Quadro 45 - Código fonte do construtor da classe FaceClientSocket que abre uma conexão com o aplicativo servidor O método send()(quadro 46) da classe FaceClientSocket dispara os processos de envio dos dados da máquina do usuário para o servidor de aplicativos. O método senduserdata() envia os dados do usuário e pode ser visto no Quadro 47. As faces do usuário são enviadas ao aplicativo servidor através do método sendfaces(), tendo seu código fonte apresentado no Quadro 48. Já o comando processuseronserver() envia um comando

98 97 para o servidor, determinando que a operação pode ser processada e é exibido no Quadro 50. O comando terminateprocess() é bem simples e apenas encerra a linha de execução (thread) no servidor que atende este usuário. Finalmente o comando closeconnection() fecha a conexão do soquete com o aplicativo servidor. Quadro 46 - Código fonte do método send() Quadro 47 - Código fonte do método senduserdata()

99 98 Quadro 48 - Código fonte do método sendfaces() O método sendfaces() do Quadro 48 chama o método sendface() para cada face a ser enviada, conforme exibido no Quadro 49. Quadro 49 - Código fonte do método sendface()

100 99 Quadro 50 - Código fonte do método processuseronserver() Recebimento das informações pelo aplicativo servidor O Quadro 51 mostra o código fonte da classe ServerSystemManager, classe principal do aplicativo servidor. Apesar de ser muito simples, ela é responsável por criar a linha de execução (thread) principal que atende a todas as requisições de cadastro de usuário e reconhecimento, seja através da face ou através de um usuário e uma senha. Em especial a linha 21, que cria a instância da classe FaceServerSocket que atenderá a todas as requisições de usuários. A classe FaceServerSocket apresentada no Quadro 52, é responsável por escutar a porta configurada e criar uma linha de execução para atender cada usuário conectado à está porta, através de uma instância da classe FaceServerClientSocket. A classe FaceServerClientSocket, exibida no Quadro 53, atende a conexão de um usuário em específico. Ela possui capacidade para atender desde um cadastro de um novo usuário como o reconhecimento de um usuário, seja através da face ou de um usuário e uma senha. O método run() da classe FaceServerClientSocket, fica em loop (dentro de um laço de repetição, no caso while), lendo pacotes e executando comandos, até que um comando

101 100 de término seja recebido. Dentro do laço, primeiramente o pacote de dados recebido é lido. Cada pacote recebido deve ter um comando a ser processado pelo método executecommand(). Quadro 51 - Código fonte da classe ServerSystemManager Quadro 52 - Código fonte da classe FaceServerSocket

102 101 Quadro 53 - Código fonte do método run() da classe FaceServerClientSocket O método readpacked(), apresentado no Quadro 54, recupera do fluxo de dados (stream) recebidos pelo soquete as informações enviadas pelo usuário e armazena em um objeto da classe ByteBuffer. Em seguida lê o comando de início e os quatro bytes seguintes que contém o comando a ser executado para este pacote de dados recebidos. Na sequência do método run(), é executado o comando executecommand(), apresentado no Quadro 55. Os seguintes comandos podem ser processados dentro deste método: a) test: é um comando para testes, que simplesmente lê uma cadeia de caracteres (string). Pode ser utilizado, por exemplo, para saber se o aplicativo servidor está operante; b) newuser, recognizeuser e authuser: sinaliza a operação: novo usuário, reconhecimento de um usuário através da face e reconhecimento de um usuário através de um usuário e uma senha respectivamente. Estes chamam direta ou

103 102 indiretamente o método readnewuserdata(), que lê os dados de um usuário e instância um objeto UserFace; c) face: executa o método readface(), que lê os bytes recebidos de uma imagem contendo uma face. A imagem é reconstruída através de uma instância de um objeto IplImage, que representa uma imagem na API OpenCV. Esta imagem é adicionada ao objeto usuário que foi criado; d) processuser: este comando, cujo código fonte pode ser visualizado através do Quadro 55, executa a operação relacionada ao usuário, conforme descrito na letra b; e) distance: verifica se deve utilizar a distância euclidiana ou a distância de mahalanobis para o cálculo do vizinho mais próximo no algoritmo de reconhecimento do usuário; f) terminate: ao receber este comando, a linha de execução que atende as requisições do usuário conectado é encerrada. Quadro 54 - Código fonte do método readpacked()

104 Quadro 55 - Código fonte do método executecommand() 103

105 104 O método processuser() apresentado no Quadro 56, pode efetuar o cadastro de um novo usuário, o reconhecimento através da face, ou ainda a autenticação da forma tradicional, utilizando um usuário e uma senha. As operações de criar um novo usuário e reconhecimento através da face são processadas através de um objeto PCAProcessor, enquanto que a autenticação através de um usuário e uma senha, é efetuado através de uma pesquisa direta em banco de dados pelo objeto StorageManager, objeto principal para acesso a banco de dados. Quadro 56 - Código fonte do método processuser() da classe FaceServerClientSocket Processando um novo usuário O método processnewuser(), cujo código fonte é apresentado do Quadro 57, calcula as componentes principais e armazena um usuário e suas faces, na base de dados. Inicialmente é chamada a função loadtrainingimages() que carrega as imagens das faces para treinamento já existentes na base de dados e armazena em um vetor de imagens do tipo IplImage do OpenCV. Após efetuar a carga das imagens das faces, adiciona-se também ao final do vetor as imagens das faces do novo usuário. Este vetor de imagens é retornado pela chamada da função. Este processo é importante, pois para cada novo usuário são recalculados os eigenfaces e eigenvalues com todas as faces já existentes.

106 105 Quadro 57 - Código fonte do método processnewuser() Em seguida é efetuada a transformada PCA através do método transformpca(), seu código fonte é exibido no Quadro 58. Este método calcula os eigenvectors (auto-vetores), eigenvalues (auto-valores) e gera a imagem média. O número de eigenvectors e eigenvalues (neigens no código fonte) será no máximo a quantidade de faces menos um. Pode-se visualizar isto como se a distância entre uma face até a outra fosse um segmento de reta, cada um destes segmentos é uma componente principal. Logo, se houver duas faces, há um segmento de reta entre as duas, se tiver três faces, há dois segmentos, um entre a primeira e a

107 106 segunda face e outro entre a segunda e a terceira face e assim sucessivamente. É criado um vetor Java do tipo IplImage para armazenar os eigenvectors. Em seguida cria-se uma matriz com apenas uma linha e neigens colunas para armazenar os eigenvalues. Também é criado um objeto IplImage para armazenar a imagem média. A imagem média é utilizada no cálculo da matriz de covariância utilizada para obter os eigenvectors e eigenvalues. Estes elementos são calculados conforme descrito na seção 2.9. Em seguida é configurado um objeto OpenCV calclimit utilizado como critério de terminação para o cálculo dos eigenvectors e eigenvalues. Na sequência é executado o método cvcalceigenobjects. Os principais parâmetros passados para esta função são a quantidade de faces de treinamento, um ponteiro OpenCV para o vetor com as faces, um ponteiro OpenCV para o vetor que armazenará os eigenvectors, o objeto calclimit e um ponteiro para o vetor de eigenvalues. Uma observação importante é que os eigenvalues serão retornados ordenados de forma decrescente. Por fim, é chamado o método do OpenCV cvnormalize para a normalização dos eigenvalues entre 1 e 0, sendo o maior valor igual a 1 e o menor igual a 0. Através da Figura 46 é apresentado um exemplo de processamento de seis pessoas, cada uma com dez faces diferentes para treinamento. É possível visualizar a imagem média gerada (a) e os eigenfaces (auto-vetores) calculados e salvos como imagem. No caso de reconhecimento de faces, quando um auto-vetor é salvo como uma imagem, ele possui uma aparência de face (fantasmagórica). Daí o nome eigenface. Cada eigenface é uma componente principal. Observa-se a letra (b) de cima para baixo e da direita para a esquerda, onde percebe-se que a primeira componente principal está na primeira imagem, a segunda componente na segunda imagem a terceira componente na terceira imagem e assim seguidamente. As últimas eigenfaces praticamente não possuem informações consideráveis, o que sugere o seu descarte, pois não contribuirá para o reconhecimento, isto é redução da dimensionalidade (vide Figura 15 e seção 2.7).

108 107 Figura 46 - (a) imagem média, (b) 59 eigenfaces (auto-vetores) calculados de forma ordenada da esquerda para a direita e de cima para baixo Após calcular os componentes principais da PCA, as faces são projetadas no subespaço vetorial na forma de pontos. Esta projeção é efetuada para cada face através do método cveigendecomposite. Os principais parâmetros deste método são a face de treino a ser projetada, a quantidade de eigenvectors, um ponteiro OpenCV para o vetor contendo os eigenvectors, a imagem média e um vetor do tipo número de ponto flutuante para receber os coeficientes retornados. Por último, os dados calculados são armazenados na base de dados, através do método storetrainingdata()(quadro 57, linha 105). Este método exclui os dados de treinamento antigos (eigenvectors, eigenvalues, imagem média e coeficientes para projeção dos pontos) e os substitui pelos novos dados calculados, juntamente com as imagens de treinamento e os dados de cadastro do novo usuário.

109 Quadro 58 - Código fonte do método transformpca() 108

110 Reconhecimento através da face O reconhecimento de uma face é efetuado través do método recognizeface() conforme exposto no Quadro 59. Este método recebe como parâmetro uma imagem de face normalizada (vide seção ) e retorna um objeto UserFace com os dados do usuário reconhecido, ou null caso não seja reconhecido. Primeiramente são carregados os dados de treinamento já computados da base de dados. Para que os dados de treinamento não sejam carregados a cada teste, usou-se o padrão de projeto singleton para carregar os dados apenas na primeira chamada, e somente recarregá-los, caso um novo usuário seja incluído, devido ao recálculo de todos os dados de treinamento. Na sequência é calculado, através do método OpenCV cveigendecomposite(), os coeficientes de projeção no subespaço PCA para a face de teste, baseados na imagem de teste, nas eigenfaces e na face média. Após a obtenção dos coeficientes de projeção, é feito o cálculo da soma da menor distância quadrada entre os pontos projetados da face de testes com cada uma das faces de treinamento e suas respectivas projeções. Trata-se da utilização do método do k-vizinho mais próximo, como pode ser observado através do código fonte do método findnearestneighbor() exposto no Quadro 60. A imagem de treinamento que resultar na menor distância será a face mais semelhante com a face de testes e será considerada a pessoa encontrada. Para a face encontrada utilizando a distância euclidiana, ela apenas será considerada reconhecida caso o cálculo da confidência ser maior ou igual ao valor configurado. Já para a distância de mahalanobis, não há um nível de confidência estipulado. Os dados desta pessoa reconhecida serão recuperados da base de dados e retornados pelo método.

111 Quadro 59 - Código fonte do método recognizeface() 110

112 111 Quadro 60 - Código fonte do método findnearestneighbor() Reconhecimento através de um usuário e uma senha O reconhecimento através de um usuário e uma senha utiliza a técnica tradicional de autenticação. Basicamente efetua uma busca na tabela de usuários no banco de dados procurando pelo usuário e senha passada. Caso um registro seja encontrado, retorna-se os dados deste usuário através de um objeto UserFace. Caso nenhum registro seja encontrado é retornado null. O método que dispara este processo pode ser verificado no Quadro 56.

113 Operacionalidade da implementação Nesta seção será apresentada a utilização da ferramenta de reconhecimento facial em nível de usuário. Nas seções seguintes serão abordadas as principais funcionalidades da ferramenta Acesso à ferramenta Antes de acessar a ferramenta, é necessário observar os seguintes pré-requisitos: a) o servidor de páginas web Glassfish deve estar rodando com deploy da ferramenta efetuado; b) o aplicativo servidor deve estar executando. A ferramenta pode ser acessada pelos seguintes navegadores: Chrome, Internet Explorer e FireFox, conforme descrito na seção através da Uniform Resource Locator (URL), como por exemplo Inicialmente aparece a tela descrevendo a inicialização da ferramenta, conforme Figura 47. Figura 47 - Tela de entrada da ferramenta

114 113 Após a ferramenta ser carregada e o applet iniciar, ele acessa o dispositivo de vídeo do usuário, normalmente a webcam, exibe a tela principal, inicia a exibição das imagens capturadas e efetua a detecção da face, conforme exibido na Figura 48. A maior face é detectada é desenhado um retângulo verde em torno dela. A tela principal possui duas abas: Autenticar usuário e Cadastrar novo usuário. A primeira aba é a que está ativa por padrão ao acessar a ferramenta, pois é mais comum efetuar uma autenticação na ferramenta do que cadastrar um novo usuário. Figura 48 - Tela principal da ferramenta Cadastrar um novo usuário Inicialmente é necessário cadastrar algum usuário para poder acessar o sistema web, caso contrário a ferramenta sempre reportará que o usuário é desconhecido. Para cadastrar um novo usuário, deve-se acessar a aba Cadastrar novo usuário. A tela de cadastro de usuário possui uma barra de ferramentas no topo da tela com as seguintes opções:

115 114 a) botão Capturar: ao clicar sobre este botão é efetuada a captura de uma face do usuário posicionado na frente da câmera. Neste trabalho optou-se pela captura de 10 faces por usuário para treinamento. Cada face possui as dimensões de 64 x 64 pixels, isto engloba faces mesmo que a pessoa esteja mais afastada da câmera, além de equilibrar custo computacional com qualidade da imagem (CAMPOS, 2001, p. 91). Ao atingir as 10 faces capturadas o botão é desabilitado; b) capturas: esta opção exibe quantas capturas já foram realizadas do total de capturas necessárias; c) botão Cadastrar: esta opção envia as faces capturadas, juntamente com os demais dados do usuário para o servidor e deixa a ferramenta em estado de espera até que o servidor conclua o cadastro e retorne uma resposta para o applet. Este botão permanece desabilitado enquanto a quantidade de capturas não atingir a quantidade esperada (no caso, 10 capturas); d) botão Reiniciar: esta opção limpa internamente a lista de faces capturadas e o formulário com os dados do usuário. Antes de efetuar a operação é exibida uma mensagem solicitando a confirmação pelo usuário. Abaixo da barra de ferramentas há um formulário para o usuário preencher. Os campos são o nome do usuário, o usuário de acesso ao sistema, a senha e a repetição da senha. Os três últimos campos servem apenas para quando o usuário optar por efetuar a autenticação através de um usuário e uma senha. Todos os campos são de preenchimento obrigatório. No centro da tela aparece a área da câmera, onde são apresentadas as imagens de vídeo, de forma que o usuário possa realizar as capturas da sua face. A Figura 49 exibe a tela de cadastro com um usuário efetuando seu cadastro. Após todos os campos preenchidos e as dez faces terem sido capturadas, o usuário submete os dados para o aplicativo servidor através de clique no botão Cadastrar. O aplicativo servidor recebe os dados, efetua o treinamento das faces, armazena os dados na base de dados e retorna mensagem para o usuário, conforme pode ser observado na Figura 50, onde a mensagem reportada pelo aplicativo servidor está destacada com uma borda vermelha.

116 Figura 49 - Tela para cadastro de um novo usuário 115

117 116 Figura 50 - Tela de cadastro após submissão ao aplicativo servidor Autenticar usuário através da face A autenticação do usuário através da sua face é muito simples e rápida de ser efetuada. O usuário acessa a aba Autenticar usuário e clica no botão Autenticar. A face capturada é submetida automaticamente pelo applet para o servidor de aplicativo, e fica em estado de espera aguardando resposta. Caso o servidor reporte que o usuário foi reconhecido, apresenta uma mensagem ao usuário, conforme exibido na Figura 51 e redireciona o usuário para a página principal, conforme apresentado na Figura 52. Nesta forma de autenticação o usuário pode optar por uma de duas formas de efetuar a medição entre as distâncias dos pontos projetados no subespaço PCA, a euclidiana, que é a padrão, ou a de mahalanobis.

118 Figura 51 - Autenticação do usuário através da face com usuário reconhecido 117

119 118 Figura 52 - Usuário autenticado e redirecionado para a página principal Reconhecer usuário através da face automaticamente A tela de autenticação através da face possui um recurso para o usuário testar o reconhecimento da sua face antes de se autenticar. Este processo visa verificar o estado de calibração da ferramenta. É possível verificar se a ferramenta não esteja reconhecendo o usuário, ou o esteja reconhecendo como falso positivo. Para acionar o recurso, basta que o usuário marque a opção Reconhecer automaticamente. Que a cada três segundos o applet captura a face do usuário e faz uma requisição de reconhecimento ao aplicativo servidor automaticamente. A resposta do servidor é o nome do usuário caso ele seja reconhecido, ou o texto Usuário desconhecido caso contrário. O resultado é impresso na própria imagem de vídeo logo abaixo da face do usuário conforme exibido na Figura 53.

120 119 Figura 53 - Opção Reconhecer automaticamente a face do usuário marcada Autenticar usuário através de um usuário e uma senha Outra forma de autenticar o usuário na ferramenta é através de um usuário e uma senha que foram fornecidos no momento de seu cadastro. Esta opção deve ser utilizada em algumas situações: a) o computador do usuário não possui um dispositivo de vídeo, como uma webcam, por exemplo; b) a ferramenta não está reconhecendo o usuário, mesmo ele já estando cadastrado (falso negativo); c) a ferramenta está reconhecendo o usuário como outra pessoa (falso positivo); d) o usuário simplesmente deseja autenticar-se da forma tradicional.

121 120 Para efetuar este tipo de autenticação o usuário deve ativar a aba Autenticar usuário e no grupo Tipo de autenticação deve marcar a opção Através de usuário e senha. Marcando esta opção a tela de autenticação muda para uma tela com um formulário que permite ao usuário informar seu usuário e senha e submeter através do botão Autenticar ao aplicativo servidor. Caso o usuário e a senha sejam reconhecidos o usuário é redirecionado para a mesma tela apresentada na Figura 52. Caso o usuário ou a senha sejam inválidos, é apresentada uma mensagem ao usuário relatando o caso. Figura 54 - Autenticação convencional através de um usuário e uma senha

122 RESULTADOS E DISCUSSÃO Nesta seção são apresentados os resultados dos experimentos realizados utilizando-se a abordagem proposta. Na subseção a base de dados utilizada é mostrada. Na subseção os resultados da detecção facial são apresentados. Na subseção são apresentados os resultados da etapa de normalização da face. Por fim, a subseção apresenta os resultados do reconhecimento facial Base de dados A população da base de dados utilizada foi coletada em campo com autorização dos participantes. Procurou-se obter um número superior a 200 pessoas, porém devido à dificuldade em abordar tantas pessoas, foram obtidas imagens de 151 pessoas com 10 imagens por pessoa em média. Isto totalizou mais de 1500 imagens coletadas e adicionadas na base de dados. A coleta foi efetuada pela própria ferramenta, efetuando-se o cadastro de cada pessoa. Foi realizado um ajuste temporário na ferramenta, para que a cada captura da face, seja manual, clicando no botão Capturar na tela de cadastro, ou marcando a opção Reconhecer automaticamente na aba Autenticar usuário, fosse gravada a imagem capturada em disco, a fim de poder utilizá-la a qualquer momento para armazenamento em banco de dados e na execução de testes. Observou-se que há forte correlação entre o tempo de treinamento e o número de faces adicionadas na base de dados, isto deve-se a necessidade de retreinar utilizando todas as faces já cadastradas a cada novo usuário processado. Para a Figura 55, Figura 56 e Figura 58 são utilizadas dezesseis imagens das mesmas pessoas e nas mesmas posições a fim de demonstrar o processo de detecção da face até obterse a face normalizada. Na Figura 55 é possível verificar amostras de imagens coletadas a campo para constituir a base de dados dos usuários. Percebe-se uma grande variação em pose, escala, iluminação, distância da câmera. São fatores comuns no dia a dia da utilização de uma ferramenta com este objetivo.

123 122 Figura 55 - Amostra de imagens coletadas a campo para constituir a população da base de dados Detecção da face O algoritmo para detecção de faces mostrou-se muito robusto, visto que teve 100% de sucesso na detecção de faces frontais e com inclinações leves para a direita, para esquerda, para cima e para abaixo, inclusive com uma leve oclusão de partes da imagem, como quando coçar-se os olhos. A utilização de óculos de sol não impediu a detecção da face, apesar de ser descartado este tipo de imagem para este trabalho, devido à necessidade da localização dos olhos serem prejudicada com este tipo de situação. As imagens de faces capturadas com a pessoa usando óculos de grau também tiveram a face detectada com sucesso e foram utilizadas nos experimentos para reconhecimento, sendo estes bem sucedidos. Experimentos realizados em um ambiente com apenas a luz do monitor de um notebook mostraram que a face foi detectada com sucesso. A Figura 56 exibe uma imagem de exemplo com a detecção facial em uma amostra de usuários submetidos à detecção para posterior armazenamento na base de dados.

124 123 Figura 56 - A detecção facial atingiu 100% de sucesso nas faces apresentadas em pose frontal e sem oclusões significativas Normalização da face A normalização das faces foi bem sucedida em praticamente 100% das imagens. Ocorreram falhas apenas nas faces onde não foi possível localizar os olhos, ou o algoritmo detectou falsos positivos para os olhos como apresentado na Figura 57 (maiores detalhes estão descritos na seção ). Porém a ferramenta não captura faces onde não consiga detectar os olhos, prevenindo este problema. A Figura 58 apresenta amostras de faces normalizadas, uma para cada uma das amostras da Figura 56. Figura 57 - Problemas na detecção dos olhos, (a) confusão dos olhos com as sombrancelhas e (b) confusão dos olhos com as narinas

VISÃO COMPUTACIONAL PARA RECONHECIMENTO DE FACES APLICADO NA IDENTIFICAÇÃO E AUTENTICAÇÃO DE USUÁRIOS NA WEB. Márcio Koch

VISÃO COMPUTACIONAL PARA RECONHECIMENTO DE FACES APLICADO NA IDENTIFICAÇÃO E AUTENTICAÇÃO DE USUÁRIOS NA WEB. Márcio Koch VISÃO COMPUTACIONAL PARA RECONHECIMENTO DE FACES APLICADO NA IDENTIFICAÇÃO E AUTENTICAÇÃO DE USUÁRIOS NA WEB Márcio Koch Orientador: Jacques Robert Heckmann ROTEIRO Introdução Objetivos do trabalho Fundamentação

Leia mais

RECONHECIMENTO FACIAL 2D

RECONHECIMENTO FACIAL 2D RECONHECIMENTO FACIAL 2D PARA SISTEMAS DE AUTENTICAÇÃO EM DISPOSITIVOS MÓVEIS Luciano Pamplona Sobrinho Orientador: Paulo César Rodacki Gomes ROTEIRO Introdução Objetivos Fundamentação Teórica Conceitos

Leia mais

Processamento Digital de Imagens

Processamento Digital de Imagens Ciência da Computação Processamento Digital de Imagens Tópicos Abordagem Contínua da Equalização Equalização Exemplo de Equalização Prof. Sergio Ribeiro 2 Técnica que procura redistribuir os valores de

Leia mais

Reconhecimento facial. uma aplicação prática do reconhecimento de padrões

Reconhecimento facial. uma aplicação prática do reconhecimento de padrões Reconhecimento facial uma aplicação prática do reconhecimento de padrões Márcio Koch, junho 2014 Pauta Apresentação Visão computacional Reconhecimento de padrões Analise de Componentes Principais Reconhecimento

Leia mais

RECONHECIMENTO FACIAL UTILIZANDO EIGENFACES

RECONHECIMENTO FACIAL UTILIZANDO EIGENFACES Universidade Federal do Rio de Janeiro Instituto Alberto Luiz Coimbra de Pós-Graduação e Pesquisa de Engenharia Programa de Engenharia de Sistemas e Computação Rio de Janeiro, RJ Brasil RECONHECIMENTO

Leia mais

Processamento de Imagem. A Imagem digital Professora Sheila Cáceres

Processamento de Imagem. A Imagem digital Professora Sheila Cáceres Processamento de Imagem A Imagem digital Professora Sheila Cáceres Visão Humana Processamento de Imagens 2 Semelhança entre o sistema visual humano e uma câmera fotográfica Várias semelhanças podem ser

Leia mais

TE073 PDS II Programa de Pós-Graduação em Engenharia Elétrica

TE073 PDS II Programa de Pós-Graduação em Engenharia Elétrica TE073 PDS II Programa de Pós-Graduação em Engenharia Elétrica Prof. Alessandro Zimmer zimmer@eletrica.ufpr.br www.eletrica.ufpr.br/~zimmer/te073 Processamento Digital de Imagens PDI: Objetivos Melhoria

Leia mais

Introdução ao Processamento de Imagens Digitais Aula 01

Introdução ao Processamento de Imagens Digitais Aula 01 Introdução ao Processamento de Imagens Digitais Aula 01 Douglas Farias Cordeiro Universidade Federal de Goiás 06 de julho de 2015 Mini-currículo Professor do curso Gestão da Informação Formação: Graduação

Leia mais

Projeto - Sistema Multimídia 2014/2 Etapa 01 (N2)

Projeto - Sistema Multimídia 2014/2 Etapa 01 (N2) 1 FURB Universidade Regional de Blumenau DSC Departamento de Sistemas e Computação Grupo de Pesquisa em Computação Gráfica, Processamento de Imagens e Entretenimento Digital Disciplina: Sistemas Multimídia

Leia mais

Introdução ao Processamento de Imagens

Introdução ao Processamento de Imagens IFSul Eng. Elétrica Processamento de Imagens Digitais Introdução ao Processamento de Imagens Material de apoio organizado por: Glaucius Décio Duarte Atualizado em 18 jul. 2017 Conceitos Processamento digital

Leia mais

Motivação Por que estudar?

Motivação Por que estudar? Aula 04 Imagens Diogo Pinheiro Fernandes Pedrosa Universidade Federal Rural do Semiárido Departamento de Ciências Exatas e Naturais Curso de Ciência da Computação Motivação Por que estudar? Imagens digitais

Leia mais

SEL-0339 Introdução à Visão Computacional. Aula 3 Processamento de Imagens Coloridas

SEL-0339 Introdução à Visão Computacional. Aula 3 Processamento de Imagens Coloridas Departamento de Engenharia Elétrica - EESC-USP SEL-0339 Introdução à Visão Computacional Aula 3 Processamento de Imagens Coloridas Prof. Dr. Marcelo Andrade da Costa Vieira Prof. Dr. Adilson Gonzaga mvieira@sc.usp.br

Leia mais

INTRODUÇÃO AO PROCESSAMENTO DIGITAL DE IMAGENS SENSORIAMENTO REMOTO

INTRODUÇÃO AO PROCESSAMENTO DIGITAL DE IMAGENS SENSORIAMENTO REMOTO INTRODUÇÃO AO PROCESSAMENTO DIGITAL DE IMAGENS SENSORIAMENTO REMOTO PROCESSAMENTO DE IMAGENS Introdução Conceitos básicos Pré-processamento Realce Classificação PROCESSAMENTO DE IMAGENS Extração de Informações

Leia mais

Processamento Digital de Imagens

Processamento Digital de Imagens Ciência da Computação Processamento Digital de Imagens Prof. Sergio Ribeiro Tópicos Técnicas de Modificação do Histograma Compressão de Histograma 2 Veremos a definição e utilização do conceito de histograma.

Leia mais

Processamento Digital de Imagens

Processamento Digital de Imagens Ciência da Computação Processamento Digital de Imagens Tópicos Detecção de Pontos Isolados Detecção de Linhas Prof. Sergio Ribeiro 2 Operações lógicas e aritméticas orientadas a vizinhança utilizam o conceito

Leia mais

Detalhes do método proposto e da sua implementação são descritos nas

Detalhes do método proposto e da sua implementação são descritos nas 4 Método Proposto 4.1. Descrição geral do método O objetivo do método proposto consiste em avaliar o potencial dos FERNS para detecção das características faciais, em tempo real, em uma seqüência de imagens

Leia mais

AQUISIÇÃO E REALCE EM IMAGENS UTILIZANDO JAVA COM AUXILIO DO OPENCV

AQUISIÇÃO E REALCE EM IMAGENS UTILIZANDO JAVA COM AUXILIO DO OPENCV AQUISIÇÃO E REALCE EM IMAGENS UTILIZANDO JAVA COM AUXILIO DO OPENCV Rafael Aquino 1 Fabio Gomes 2 Ciência da Computação ciências exatas e tecnológicas ISSN IMPRESSO 1980-1777 ISSN ELETRÔNICO 2316-3135

Leia mais

Processamento de Imagens: fundamentos. Julio C. S. Jacques Junior

Processamento de Imagens: fundamentos. Julio C. S. Jacques Junior Processamento de Imagens: fundamentos Julio C. S. Jacques Junior juliojj@gmail.com Fronteiras do Processamento de Imagens Processamento de dados Dados / Informação Visão Computacional Computação Gráfica

Leia mais

Processamento de Imagens Coloridas. 35M34 Sala 3D5 Bruno Motta de Carvalho DIMAp Sala 15 Ramal 227

Processamento de Imagens Coloridas. 35M34 Sala 3D5 Bruno Motta de Carvalho DIMAp Sala 15 Ramal 227 Processamento de Imagens Coloridas 35M34 Sala 3D5 Bruno Motta de Carvalho DIMAp Sala 15 Ramal 227 Introdução Apesar do processo de percepção e interpretação de cores não ser completamente compreendido,

Leia mais

Computação Gráfica II

Computação Gráfica II Computação Gráfica II Visão Computacional Prof. Rodrigo Rocha prof.rodrigorocha@yahoo.com http://www.bolinhabolinha.com Visão Computacional Visão Huma na e Compuacional Área que é a combinação de conceitos,

Leia mais

INFORMAÇÕES DO ACADÊMICO PLANO DE TRABALHO. 1. Justificativa

INFORMAÇÕES DO ACADÊMICO PLANO DE TRABALHO. 1. Justificativa INFORMAÇÕES DO ACADÊMICO Nome: Kleber Padovani de Souza Curso: Engenharia de Computação Semestre: R.A.: Título do plano de trabalho: Extração de atributos da imagem através de momentos de imagem. Nome

Leia mais

Computação Gráfica. Visao Computacional. Visão Huma na e Compuacional

Computação Gráfica. Visao Computacional. Visão Huma na e Compuacional Computação Gráfica Visao Computacional Prof. Rodrigo Rocha Prof.rodrigorocha@yahoo.com Visão Huma na e Compuacional Visão Computacional Área que é a combinação de conceitos, técnicas e idéias do processamento

Leia mais

Propriedades da Imagem Amostragem & Quantização (Quantificação) Histograma Imagem Colorida x Imagem Monocromática. Propriedades da Imagem

Propriedades da Imagem Amostragem & Quantização (Quantificação) Histograma Imagem Colorida x Imagem Monocromática. Propriedades da Imagem Proc. Imagem Prof. Júlio C. Klafke [1] TÓPICOS DESENVOLVIDOS NESTE MÓDULO PROCESSAMENTO DE IMAGEM #02 Propriedades da Imagem Amostragem & Quantização (Quantificação) Histograma Imagem Colorida x Imagem

Leia mais

Busca de imagens baseada no conteúdo: Aplicação em imagens médicas

Busca de imagens baseada no conteúdo: Aplicação em imagens médicas Busca de imagens baseada no conteúdo: Aplicação em imagens médicas Rafael Gessele Orientador: Prof. Dr. Mauro Marcelo Mattos Sumário Introdução Objetivos do trabalho Fundamentação teórica Desenvolvimento

Leia mais

DETECÇÃO DE CORES DE SOLUÇÕES QUÍMICAS PARA PESSOAS COM NENHUMA OU BAIXA VISÃO UTILIZANDO OPENCV

DETECÇÃO DE CORES DE SOLUÇÕES QUÍMICAS PARA PESSOAS COM NENHUMA OU BAIXA VISÃO UTILIZANDO OPENCV DETECÇÃO DE CORES DE SOLUÇÕES QUÍMICAS PARA PESSOAS COM NENHUMA OU BAIXA VISÃO UTILIZANDO OPENCV Autor (1) Jéssica Fernandes Alves; Orientador (4) Suzete Élida Nóbrega Correia (1) Instituto Federal de

Leia mais

Imagem Digital. Claudio Carvilhe

Imagem Digital. Claudio Carvilhe Imagem Digital Claudio Carvilhe Imagem Digital Roteiro Introdução. Pixel. Resolução espacial. Cor. Processamento de imagens. Introdução Informação Visual: Imagem vista na tela. Informação Descritiva: Modelo

Leia mais

Descritores de Imagens

Descritores de Imagens Descritores de Imagens André Tavares da Silva PPGCA/UDESC Outubro de 2017 André Tavares da Silva (PPGCA/UDESC) Descritores de Imagens Outubro de 2017 1 / 17 Introdução Excelentes pesquisas sobre descritores

Leia mais

Visão computacional. Juliana Patrícia Detroz Orientador: André Tavares Silva

Visão computacional. Juliana Patrícia Detroz Orientador: André Tavares Silva Visão computacional Juliana Patrícia Detroz Orientador: André Tavares Silva Visão computacional Tentativa de replicar a habilidade humana da visão através da percepção e entendimento de uma imagem; Fazer

Leia mais

Visão Computacional. Alessandro L. Koerich. Programa de Pós-Graduação em Engenharia Elétrica Universidade Federal do Paraná (UFPR)

Visão Computacional. Alessandro L. Koerich. Programa de Pós-Graduação em Engenharia Elétrica Universidade Federal do Paraná (UFPR) Visão Computacional Alessandro L. Koerich Programa de Pós-Graduação em Engenharia Elétrica Universidade Federal do Paraná (UFPR) Análise da Imagem Análise da Imagem O algoritmo opera sobre a imagem e extrai

Leia mais

PROCESSAMENTO DE IMAGENS DIGITAIS PARA VISÃO ROBÓTICA. Digital Image Processing for Robotic Vision

PROCESSAMENTO DE IMAGENS DIGITAIS PARA VISÃO ROBÓTICA. Digital Image Processing for Robotic Vision PROCESSAMENTO DE IMAGENS DIGITAIS PARA VISÃO ROBÓTICA Digital Image Processing for Robotic Vision Luiz Ferreira MENEZES Jr. Faculdade de Jaguariúna Resumo: Este trabalho descreve quatro métodos para converter

Leia mais

METODOLOGIA PARA A QUANTIZAÇÃO DE CORES PELO MÉTODO SMCb: INTRODUÇÃO E EXEMPLOS DE RESULTADOS

METODOLOGIA PARA A QUANTIZAÇÃO DE CORES PELO MÉTODO SMCb: INTRODUÇÃO E EXEMPLOS DE RESULTADOS METODOLOGIA PARA A QUANTIZAÇÃO DE CORES PELO MÉTODO SMCb: INTRODUÇÃO E EXEMPLOS DE RESULTADOS Marcelo Zaniboni 1, Osvaldo Severino Junior 2 1: Universitário do curso de Ciência da Computação, Faculdade

Leia mais

VISÃO COMPUTACIONAL. Marcelo Henrique dos Santos

VISÃO COMPUTACIONAL. Marcelo Henrique dos Santos VISÃO COMPUTACIONAL Marcelo Henrique dos Santos marcelosantos@outlook.com São Paulo SP, Agosto/2013 INTRODUÇÃO Processamento de imagens é um processo onde a entrada do sistema é uma imagem e a saída é

Leia mais

MouseCam: aplicação de controle do mouse via câmera

MouseCam: aplicação de controle do mouse via câmera MouseCam: aplicação de controle do mouse via câmera Introdução ao Processamento de Imagens COS756 PESC/COPPE/UFRJ 2013 1 Renan Garrot garrot@cos.ufrj.br 1. Introdução O processo de tracking por vídeo consiste

Leia mais

Processamento de Imagem. Histograma da Imagem Professora Sheila Cáceres

Processamento de Imagem. Histograma da Imagem Professora Sheila Cáceres Processamento de Imagem Histograma da Imagem Professora Sheila Cáceres Histograma É a distribuição de frequência dos níveis de cinza da imagem onde cada entrada no eixo x representa o nível de cinza específico

Leia mais

Diego Martin Mancini Orientador: Prof. Paulo A. V. de Miranda Instituto de Matemática e Estatística Universidade de São Paulo

Diego Martin Mancini Orientador: Prof. Paulo A. V. de Miranda Instituto de Matemática e Estatística Universidade de São Paulo Estudo de comparação do descritor de imagens coloridas BIC empregando diferentes abordagens de classificação de detecção de bordas: Canny e Operador Laplaciano Diego Martin Mancini Orientador: Prof. Paulo

Leia mais

2 Reconhecimento Facial

2 Reconhecimento Facial 2 Reconhecimento Facial Em termos gerais, o reconhecimento facial é o processo pelo qual se mede o grau de similaridade entre duas imagens faciais com o proposito de identificar a um indivíduo ou de verificar

Leia mais

Aprendizado de Máquina (Machine Learning)

Aprendizado de Máquina (Machine Learning) Ciência da Computação (Machine Learning) Aula 02 Representação dos dados Pré-processamento Max Pereira Tipo de Dados Os atributos usados para descrever objetos de dados podem ser de diferentes tipos: Quantitativos

Leia mais

Dr. Sylvio Barbon Junior. Departamento de Computação - UEL. 1 o Semestre de 2015

Dr. Sylvio Barbon Junior. Departamento de Computação - UEL. 1 o Semestre de 2015 Introdução a Computação Gráfica [5COP100] Dr. Sylvio Barbon Junior Departamento de Computação - UEL 1 o Semestre de 2015 Assunto Aula 8 Descritores de Imagens Digitais 2 of 47 Sumário Descritores e Reconhecimento

Leia mais

Princípios sobre imagens digitais

Princípios sobre imagens digitais Princípios sobre imagens digitais Aula 1 LPV 5731 - ANÁLISE DE IMAGENS DE SEMENTES E PLÂNTULAS Programa de pós-graduação em Fitotecnia Francisco G Gomes-Junior Escola Superior de Agricultura Luiz de Queiroz

Leia mais

Processamento de Imagens

Processamento de Imagens Processamento de Imagens Prof. Julio Arakaki Ciência da Computação 1 Imagem Digital Full Color Image (Matriz de Pixels) RGB (24 bits): Red (8 bits) Green (8 bits) Blue (8 bits) 2 Imagem Digital Um modelo

Leia mais

Consultas por Similaridade em Domínios de Dados Complexos

Consultas por Similaridade em Domínios de Dados Complexos Consultas por Similaridade em Domínios de Dados Complexos Guilherme Felipe Zabot Orientador: Profº Dr Caetano Traina Jr Roteiro Objetivo Introdução Dados Complexos Representação de Dados Complexos Extração

Leia mais

IDENTIFICAÇÃO DE MARCADORES DE PAVIMENTAÇÃO NA ORIENTAÇÃO DE CEGOS. André Zuconelli 1 ; Manassés Ribeiro 2

IDENTIFICAÇÃO DE MARCADORES DE PAVIMENTAÇÃO NA ORIENTAÇÃO DE CEGOS. André Zuconelli 1 ; Manassés Ribeiro 2 IDENTIFICAÇÃO DE MARCADORES DE PAVIMENTAÇÃO NA ORIENTAÇÃO DE CEGOS André Zuconelli 1 ; Manassés Ribeiro 2 INTRODUÇÃO As tecnologias assistivas têm a finalidade de auxiliar pessoas com deficiência a alcançar

Leia mais

Reconhecimento de texturas utilizando padrão binário local e classificador knn.

Reconhecimento de texturas utilizando padrão binário local e classificador knn. Reconhecimento de texturas utilizando padrão binário local e classificador knn. Vinicius Santos Andrade 1 Resumo. Através de uma imagem é possível obter inúmeras informações. Portanto, é cada vez mais

Leia mais

6 Aplicações Detalhes da Implementação

6 Aplicações Detalhes da Implementação 6 Aplicações Neste trabalho, é importante implementar aplicações de interação em tempo real para que seja possível avaliar a aplicabilidade das técnicas de Visão Computacional descritas ao longo dos capítulos

Leia mais

Processamento Digital de Imagens

Processamento Digital de Imagens 1 Ciência da Computação Processamento Digital de Imagens Prof. Sergio Ribeiro Tópicos Introdução Espectro Eletromagnético Aquisição e de Imagens Sensoriamento Remoto 2 Introdução Espectro Eletromagnético

Leia mais

Processamento Digital de Imagens

Processamento Digital de Imagens Ciência da Computação Processamento Digital de Imagens Prof. Sergio Ribeiro Tópicos Introdução Espectro Eletromagnético Aquisição e Digitalização de Imagens Efeitos da Digitalização Digitalização Sensoriamento

Leia mais

ESTUDO DE TÉCNICAS PARA SOLUÇÃO DE PROBLEMAS DE PROCESSAMENTO DE IMAGENS UTILIZANDO A LINGUAGEM PYTHON

ESTUDO DE TÉCNICAS PARA SOLUÇÃO DE PROBLEMAS DE PROCESSAMENTO DE IMAGENS UTILIZANDO A LINGUAGEM PYTHON ESTUDO DE TÉCNICAS PARA SOLUÇÃO DE PROBLEMAS DE PROCESSAMENTO DE IMAGENS UTILIZANDO A LINGUAGEM PYTHON Marcus Vinícius Teodoro Silva, Marcos William da Silva Oliveira Instituto Federal de Educação, Ciência

Leia mais

Implementação dos Algoritmos e Resultados

Implementação dos Algoritmos e Resultados Capítulo 6 Implementação dos Algoritmos e Resultados 6.1 Considerações Iniciais Diversas situações foram exploradas neste trabalho visando analisar qual seria a wavelet mais adequada para sistemas de extração

Leia mais

PMR2560 ELEMENTOS DE ROBÓTICA 2016 TRABALHO DE VISÃO COMPUTACIONAL CALIBRAÇÃO DE CÂMERAS E VISÃO ESTÉREO

PMR2560 ELEMENTOS DE ROBÓTICA 2016 TRABALHO DE VISÃO COMPUTACIONAL CALIBRAÇÃO DE CÂMERAS E VISÃO ESTÉREO PMR2560 ELEMENTOS DE ROBÓTICA 2016 TRABALHO DE VISÃO COMPUTACIONAL CALIBRAÇÃO DE CÂMERAS E VISÃO ESTÉREO Esse trabalho consiste de três partes. Na primeira parte do trabalho você vai calibrar duas câmeras

Leia mais

INF Fundamentos da Computação Gráfica Professor: Marcelo Gattass Aluno: Rogério Pinheiro de Souza

INF Fundamentos da Computação Gráfica Professor: Marcelo Gattass Aluno: Rogério Pinheiro de Souza INF2608 - Fundamentos da Computação Gráfica Professor: Marcelo Gattass Aluno: Rogério Pinheiro de Souza Trabalho 02 Visualização de Imagens Sísmicas e Detecção Automática de Horizonte Resumo Este trabalho

Leia mais

Processamento digital de imagens

Processamento digital de imagens Processamento digital de imagens Agostinho Brito DCA-CT-UFRN 4 de julho de 018 Agostinho Brito (DCA-CT-UFRN) Processamento digital de imagens 4 de julho de 018 1 / 31 O que é processamento digital de imagens?

Leia mais

Processamento Digital de Imagens

Processamento Digital de Imagens Ciência da Computação Processamento Digital de Imagens Propriedades de Imagem Digital Prof. Sergio Ribeiro Tópicos Propriedades de uma Imagem Digital Vizinhança Conectividade Operações Lógicas e Aritméticas

Leia mais

Processamento Digital de Imagens

Processamento Digital de Imagens Ciência da Computação Processamento Digital de Imagens Propriedades de Imagem Digital Prof. Sergio Ribeiro Tópicos Propriedades de uma Imagem Digital Vizinhança e Aritméticas Efeitos de em Pixel a Pixel

Leia mais

Computaçã. Visão Geral. Sistema Gráfico. Computação Gráfica. Pixels. Sistema Gráfico e o Frame Buffer. Introdução à Computação Gráfica

Computaçã. Visão Geral. Sistema Gráfico. Computação Gráfica. Pixels. Sistema Gráfico e o Frame Buffer. Introdução à Computação Gráfica Visão Geral Computaçã ção o Gráfica Introduçã ção, conceitos básicosb sicos, áreas relacionadas Introdução à Computação Gráfica Como funciona um sistema gráfico Como imagens são representadas Áreas relacionadas,

Leia mais

PROCESSAMENTO DIGITAL DE IMAGENS

PROCESSAMENTO DIGITAL DE IMAGENS UNIVERSIDADE DE SÃO PAULO ESCOLA SUPERIOR DE AGRICULTURA LUIZ DE QUEIROZ DEPARTAMENTO DE ENGENHARIA DE BIOSSISTEMAS DISCIPLINA: LEB450 TOPOGRAFIA E GEOPROCESSAMENTO II PROF. DR. CARLOS ALBERTO VETTORAZZI

Leia mais

Aula 7 - Representação e Descrição de Estruturas Bi-dimensionais. Prof. Adilson Gonzaga

Aula 7 - Representação e Descrição de Estruturas Bi-dimensionais. Prof. Adilson Gonzaga Aula 7 - Representação e Descrição de Estruturas Bi-dimensionais Prof. Adilson Gonzaga 1 Introdução Objetos ou Segmentos são representados como uma coleção de pixels em uma imagem. Para o reconhecimento

Leia mais

5 Análise Experimental

5 Análise Experimental 5 Análise Experimental 5.1. Base de dados para testes Foram gravados diversos vídeos que serviram para realizar os testes realizados nesta dissertação. Cada um dos vídeos gerados para medir qualidade da

Leia mais

Processamento Digital de Imagens

Processamento Digital de Imagens Ciência da Computação Processamento Digital de Imagens Prof. Sergio Ribeiro Tópicos Transformações de Intensidade Transformações Logarítmicas Comparação entre Diversas Técnicas 2 Transformações de Intensidade

Leia mais

Processamento e Análise de Imagens

Processamento e Análise de Imagens Processamento e Análise de Imagens Prof. Moacir Ponti www.icmc.usp.br/~moacir Instituto de Ciências Matemáticas e de Computação USP 2017/1 Moacir Ponti Jr. (ICMCUSP) Processamento e Análise de Imagens

Leia mais

APLICAÇÃO DA VISÃO COMPUTACIONAL PARA SEGMENTAÇÃO DE OBJETOS EM IMAGENS CAPTURADAS POR EQUIPAMENTOS MÓVEIS.

APLICAÇÃO DA VISÃO COMPUTACIONAL PARA SEGMENTAÇÃO DE OBJETOS EM IMAGENS CAPTURADAS POR EQUIPAMENTOS MÓVEIS. APLICAÇÃO DA VISÃO COMPUTACIONAL PARA SEGMENTAÇÃO DE OBJETOS EM IMAGENS CAPTURADAS POR EQUIPAMENTOS MÓVEIS. João Marcelo RIBEIRO 1 Heber Rocha MOREIRA 2 Fiama F. S. do AMARAL 3 RESUMO Através da visão

Leia mais

Realce de imagens parte 1: operações pontuais SCC0251 Processamento de Imagens

Realce de imagens parte 1: operações pontuais SCC0251 Processamento de Imagens Realce de imagens parte 1: operações pontuais SCC0251 Processamento de Imagens Prof. Moacir Ponti Jr. www.icmc.usp.br/~moacir Instituto de Ciências Matemáticas e de Computação USP 2013/1 Moacir Ponti Jr.

Leia mais

Determinação de vícios refrativos oculares utilizando Support Vector Machines

Determinação de vícios refrativos oculares utilizando Support Vector Machines Determinação de vícios refrativos oculares utilizando Support Vector Machines Giampaolo Luiz Libralão, André Ponce de Leon F. de Carvalho, Antonio Valerio Netto, Maria Cristina Ferreira de Oliveira Instituto

Leia mais

Descritores de Imagem (introdução)

Descritores de Imagem (introdução) Descritores de Imagem (introdução) André Tavares da Silva andre.silva@udesc.br Roteiro da aula Definição de descritor de imagem Extração de Característica Tipos Geral x Específico Global (cor, textura,

Leia mais

O reconhecimento facial é dividido em três etapas: i) detecção da face, ii) extração de características e iii) reconhecimento da face.

O reconhecimento facial é dividido em três etapas: i) detecção da face, ii) extração de características e iii) reconhecimento da face. ESTUDO SOBRE MÉTODOS DE RECONHECIMENTO FACIAL EM FOTOGRAFIAS DIGITAIS Ana Elisa SCHMIDT¹, Elvis Cordeiro NOGUEIRA² ¹ Orientadora e docente do IFC-Campus Camboriú; ² Aluno do curso de Bacharelado em Sistemas

Leia mais

Processamento Digital de Imagens. Cor

Processamento Digital de Imagens. Cor Processamento Digital de Imagens Cor Em uma descrição física a cor está associada ao seu comprimento de onda. Ao se analisar o espectro eletromagnético na região do visível, os menores comprimentos de

Leia mais

Processamento digital de imagens

Processamento digital de imagens Processamento digital de imagens Agostinho Brito Departamento de Engenharia da Computação e Automação Universidade Federal do Rio Grande do Norte 18 de fevereiro de 016 Apresentação O que é processamento

Leia mais

3 Modelos Flex ıveis 3.1 Active Contour Model

3 Modelos Flex ıveis 3.1 Active Contour Model 3 Modelos Flexíveis Em Visão Computacional, uma das principais premissas é processar uma imagem com a finalidade de compreendê-la e retirar dela informações úteis. É utilizada em diversas aplicações atualmente,

Leia mais

Fundamentos sobre. Universidade Federal do Rio de Janeiro - IM/DCC & NCE. Antonio G. Thomé Sala AEP/1033. Processamento de Imagens

Fundamentos sobre. Universidade Federal do Rio de Janeiro - IM/DCC & NCE. Antonio G. Thomé Sala AEP/1033. Processamento de Imagens Universidade Federal do Rio de Janeiro - IM/DCC & NCE Fundamentos sobre Processamento de Imagens Antonio G. Thomé thome@nce.ufrj.br Sala AEP/1033 Sumário do Curso Introdução Ambientação com o MatLab Aquisição

Leia mais

T4.1 Processamento de Imagem

T4.1 Processamento de Imagem T4.1 Processamento de Imagem Proc. Sinal e Imagem Mestrado em Informática Médica Miguel Tavares Coimbra Resumo 1. Manipulação ponto a ponto 2. Filtros espaciais 3. Extracção de estruturas geométricas 4.

Leia mais

Implementação de um protópito de uma interface para um controlador de cadeira. de rodas guiado pela direção do olhar.

Implementação de um protópito de uma interface para um controlador de cadeira. de rodas guiado pela direção do olhar. Implementação de um protópito de uma interface para um controlador de cadeiras de rodas guiado pela direção do olhar. Vinícius Assis Saueia da Silva 18 de abril de 2005 1 Título Implementação de um protópito

Leia mais

PMR2560 Visão Computacional Detecção de cores e blobs. Prof. Eduardo L. L. Cabral

PMR2560 Visão Computacional Detecção de cores e blobs. Prof. Eduardo L. L. Cabral PMR2560 Visão Computacional Detecção de cores e blobs Prof. Eduardo L. L. Cabral Objetivos Detecção de cores; Detecção de blobs. Detecção de cores Cores são facilmente identificadas nas imagens. Cor a

Leia mais

Processamento digital de imagens

Processamento digital de imagens Processamento digital de imagens Agostinho Brito Departamento de Engenharia da Computação e Automação Universidade Federal do Rio Grande do Norte 6 de outubro de 2016 Segmentação de imagens A segmentação

Leia mais

Capítulo III Processamento de Imagem

Capítulo III Processamento de Imagem Capítulo III Processamento de Imagem Proc. Sinal e Imagem Mestrado em Informática Médica Miguel Tavares Coimbra Resumo 1. Manipulação ponto a ponto 2. Filtros espaciais 3. Extracção de estruturas geométricas

Leia mais

Processamento de imagem a cores

Processamento de imagem a cores A cor é um poderoso descritor que frequentemente simplifica a identificação e extracção de objectos de uma cena Os humanos podem discernir milhares de cores, mas apenas duas dezenas de cinzentos O processamento

Leia mais

PROCESSAMENTO DE IMAGENS

PROCESSAMENTO DE IMAGENS PROCESSAMENTO DE IMAGENS Introdução Conceitos básicos Pré-processamento Realce Classificação PROCESSAMENTO DE IMAGENS- aula de 25/5/10 Introdução Conceitos básicos Pré-processamento Realce Classificação

Leia mais

SEL-0339 Introdução à Visão Computacional. Aula 5 Segmentação de Imagens

SEL-0339 Introdução à Visão Computacional. Aula 5 Segmentação de Imagens Departamento de Engenharia Elétrica - EESC-USP SEL-0339 Introdução à Visão Computacional Aula 5 Segmentação de Imagens Prof. Dr. Marcelo Andrade da Costa Vieira Prof. Dr. Adilson Gonzaga Segmentação de

Leia mais

T4 Processamento de Imagem

T4 Processamento de Imagem T4 Processamento de Imagem Proc. Sinal e Imagem Mestrado em Informática Médica Hélder Filipe Pinto de Oliveira Resumo 1. Manipulação ponto a ponto 2. Conetividade 3. Filtros espaciais 4. Extração de estruturas

Leia mais

4 Testes e experimentos realizados 4.1. Implementação e banco de dados

4 Testes e experimentos realizados 4.1. Implementação e banco de dados 32 4 Testes e experimentos realizados 4.1. Implementação e banco de dados Devido à própria natureza dos sites de redes sociais, é normal que a maior parte deles possua uma grande quantidade de usuários

Leia mais

Bem-vindo ao Localizador 3.0! Neste manual você terá informações de como utilizar seu Localizador da maneira mais eficiente.

Bem-vindo ao Localizador 3.0! Neste manual você terá informações de como utilizar seu Localizador da maneira mais eficiente. Introdução Bem-vindo ao Localizador 3.0! Neste manual você terá informações de como utilizar seu Localizador da maneira mais eficiente. Para o completo funcionamento do Localizador, existem dois itens

Leia mais

Imagem e Gráficos. vetorial ou raster?

Imagem e Gráficos. vetorial ou raster? http://computacaografica.ic.uff.br/conteudocap1.html Imagem e Gráficos vetorial ou raster? UFF Computação Visual tem pelo menos 3 grades divisões: CG ou SI, AI e PI Diferença entre as áreas relacionadas

Leia mais

RECONHECIMENTO IDENTIFICAÇÃO BASEADA EM APARÊNCIA

RECONHECIMENTO IDENTIFICAÇÃO BASEADA EM APARÊNCIA RECONHECIMENTO IDENTIFICAÇÃO BASEADA EM APARÊNCIA Envolve a pergunta: É esta parte da imagem uma parte do objeto X? (modelo dado, região da imagem dada) Utiliza imagens ao invés de características como

Leia mais

Reconhecimento de palma de mão. Peterson Wagner Kava de Carvalho

Reconhecimento de palma de mão. Peterson Wagner Kava de Carvalho Reconhecimento de palma de mão Peterson Wagner Kava de Carvalho 1 Sumário 1. Introdução 2. Artigo 1: Palmprint Recognition a. Pré-Processamento b. Extração de Features c. Classificação d. Resultados 3.

Leia mais

Processamento Digital de Imagens Aula 02

Processamento Digital de Imagens Aula 02 exatasfepi.com.br Processamento Digital de Imagens Aula 02 André Luís Duarte O que adquire entendimento ama a sua alma; o que cultiva a inteligência achará o bem. Provérbios 19:8 Processamento Digital

Leia mais

Capítulo II Imagem Digital

Capítulo II Imagem Digital Capítulo II Imagem Digital Proc. Sinal e Imagem Mestrado em Informática Médica Miguel Tavares Coimbra Resumo 1. Formação de uma imagem 2. Representação digital de uma imagem 3. Cor 4. Histogramas 5. Ruído

Leia mais

Introdução a Análise de Imagens Digitais

Introdução a Análise de Imagens Digitais Introdução a Análise de Imagens Digitais Uma imagem digital é uma representação de uma cena por meio de um conjunto de elementos discretos e de tamanhos finitos, chamados de pixels, colocados em um arranjo

Leia mais

Processamento de Imagem. Compressão de Imagens Professora Sheila Cáceres

Processamento de Imagem. Compressão de Imagens Professora Sheila Cáceres Processamento de Imagem Compressão de Imagens Professora Sheila Cáceres Porque comprimir? Técnicas de compressão surgiram para reduzir o espaço requerido para armazenamento e o tempo necessário para transmissão

Leia mais

Visão Computacional. Prof. Leandro Augusto Frata Fernandes TCC Introdução à Ciência da Computação (2012.

Visão Computacional. Prof. Leandro Augusto Frata Fernandes TCC Introdução à Ciência da Computação (2012. Visão Computacional Prof. Leandro Augusto Frata Fernandes laffernandes@ic.uff.br TCC-00.169 Introdução à Ciência da Computação (2012.1) Visão Humana Responsável por cerca de 75% de nossa percepção O ato

Leia mais

Objetivos. 1. O método desenvolvido usa características de pares de pixeis para fazer estatísticas e formar

Objetivos. 1. O método desenvolvido usa características de pares de pixeis para fazer estatísticas e formar Introdução Comidas podem apresentar deformações e variações em sua forma, além de conter muitos ingredientes, nem todos visíveis; Métodos tradicionais de reconhecimento requerem a detecção de características

Leia mais

Universidade Católica Dom Bosco

Universidade Católica Dom Bosco Universidade Católica Dom Bosco Curso de Bacharelado em Engenharia de Computação Comparação entre Técnicas de Reconhecimento de Faces para Controle de Acesso a Computadores Vinícius Assis Saueia da Silva

Leia mais

Processamento de Imagem. Relaçionamentos entre pixels e Operações Aritméticas e Lógicas Professora Sheila Cáceres

Processamento de Imagem. Relaçionamentos entre pixels e Operações Aritméticas e Lógicas Professora Sheila Cáceres Processamento de Imagem Relaçionamentos entre pixels e Operações Aritméticas e Lógicas Professora Sheila Cáceres Relacionamentos básicos entre elementos de uma imagem Vizinhança Conectividade Adjacência

Leia mais

Processamento de Imagem. Filtragem no Domínio Espacial Professora Sheila Cáceres

Processamento de Imagem. Filtragem no Domínio Espacial Professora Sheila Cáceres Processamento de Imagem Filtragem no Domínio Espacial Professora Sheila Cáceres Filtragem A filtragem de imagens pode ser realizada no domínio do espaço e da frequência Operadores de filtragem são classificados

Leia mais

Álgebra Linear Aplicada à Compressão de Imagens. Universidade de Lisboa Instituto Superior Técnico. Mestrado em Engenharia Aeroespacial

Álgebra Linear Aplicada à Compressão de Imagens. Universidade de Lisboa Instituto Superior Técnico. Mestrado em Engenharia Aeroespacial Álgebra Linear Aplicada à Compressão de Imagens Universidade de Lisboa Instituto Superior Técnico Uma Breve Introdução Mestrado em Engenharia Aeroespacial Marília Matos Nº 80889 2014/2015 - Professor Paulo

Leia mais

Universidade do Estado de Minas Gerais Curso de Sistemas de Informações. Multimídia. A Imagem (Parte I)

Universidade do Estado de Minas Gerais Curso de Sistemas de Informações. Multimídia. A Imagem (Parte I) Universidade do Estado de Minas Gerais Curso de Sistemas de Informações Multimídia A Imagem (Parte I) Prof Sérgio Carlos Portari Júnior portari.uemgituiutaba@gmail.com Multimídia A imagem Tópico: Representação

Leia mais

Pontifícia Universidade Católica do Rio de Janeiro. Departamento de Informática. Fundamentos de Computação Gráfica

Pontifícia Universidade Católica do Rio de Janeiro. Departamento de Informática. Fundamentos de Computação Gráfica 1. Imagens sísmicas Pontifícia Universidade Católica do Rio de Janeiro Departamento de Informática Fundamentos de Computação Gráfica Aluno: Stelmo Magalhães Barros Netto Relatório do trabalho Imagens Sísmicas

Leia mais

Extração de objetos de interesse em imagens digitais utilizando a biblioteca de Visão Computacional OpenCV

Extração de objetos de interesse em imagens digitais utilizando a biblioteca de Visão Computacional OpenCV Extração de objetos de interesse em imagens digitais utilizando a biblioteca de Visão Computacional OpenCV Izadora Aparecida RAMOS 1,3,4 ; Servílio Souza de ASSIS 1,3,4 ; Bruno Alberto Soares OLIVEIRA

Leia mais

PROCESSAMENTO DE IMAGENS COLORIDAS. Nielsen Castelo Damasceno

PROCESSAMENTO DE IMAGENS COLORIDAS. Nielsen Castelo Damasceno PROCESSAMENTO DE IMAGENS COLORIDAS Nielsen Castelo Damasceno Definições A cor é um poderoso descritor que muitas vezes simplifica a identificação do objeto e sua extração de uma cena. Os seres humanos

Leia mais

Introdução aos computadores, à Internet e à World Wide Web. Prof. Marcelo Roberto Zorzan

Introdução aos computadores, à Internet e à World Wide Web. Prof. Marcelo Roberto Zorzan Introdução aos computadores, à Internet e à World Wide Web Prof. Marcelo Roberto Zorzan História do Java Origem Linguagem desenvolvida pela Sun Microsystems Sintaxe similar ao C++ Inicialmente chamada

Leia mais

Como capturar imagens de alta resolução?

Como capturar imagens de alta resolução? Perguntas frequentes sobre captura de imagens com câmeras de alta resolução que utilizam conexão USB. O Laudo & Imagem oferece a opção de captura de imagens de câmeras de alta resolução que utilizam a

Leia mais

CIDADÃO FISCAL: APLICATIVO PARA A ABERTURA E ACOMPANHAMENTO DE PROCESSOS NO SETOR DE OUVIDORIA DA PREFEITURA MUNICIPAL DE BLUMENAU

CIDADÃO FISCAL: APLICATIVO PARA A ABERTURA E ACOMPANHAMENTO DE PROCESSOS NO SETOR DE OUVIDORIA DA PREFEITURA MUNICIPAL DE BLUMENAU UNIVERSIDADE REGIONAL DE BLUMENAU CURSO DE SISTEMAS DE INFORMAÇÃO - BACHARELADO CIDADÃO FISCAL: APLICATIVO PARA A ABERTURA E ACOMPANHAMENTO DE PROCESSOS NO SETOR DE OUVIDORIA DA PREFEITURA MUNICIPAL DE

Leia mais