Infra - Linux

Biometria: Reconhecimento Facial Livre!

Neste documento teremos a oportunidade de conhecer um projeto de reconhecimento facial open source. Utilizando a biblioteca Malib e conceitos de visão computacional, este recurso biométrico permite criar soluções interessantes.

por Alessandro de Oliveira Faria



Introdução - Reconhecimento Facial

O reconhecimento facial é um dos processos de identificação mais utilizados pelos seres humanos, pois permite identificar rapidamente qualquer pessoa e assim definir o tipo apropriado de interação com ela. Além de identificar, podemos perceber o estado emocional de uma pessoa apenas observando sua expressão facial.

Embora o reconhecimento facial seja uma tarefa simples para o ser humano, é extremamente complexo implementar esse processo em uma máquina, pois não sabemos, ao certo, como o cérebro humano realiza essa tarefa. O cérebro humano pode identificar corretamente uma pessoa a partir de sua imagem facial mesmo sobre as mais diversas condições, como variações de iluminação, observando apenas uma de suas características ou partes, e até mesmo com distorções ou deformações.



A eficiência de um sistema de reconhecimento facial pode ser medida pela porcentagem de acertos na identificação de pessoas sobre essas condições. Os sistemas de reconhecimento facial que existem atualmente não são seguros o suficiente para serem aplicados em larga escala, mas muitos avanços foram obtidos.

Existem diversas técnicas que podem ser utilizadas para a criação de um sistema de reconhecimento facial. Descreveremos as técnicas utilizadas para a construção de um sistema de reconhecimento facial que, a partir de uma fotografia ou imagem de vídeo, seja capaz de extrair a imagem facial da pessoa e verificar se essa pessoa pertence ou não a uma base de dados com imagens faciais previamente construídas.

O sistema de reconhecimento de faces é formado por três fases fundamentais: rastreamento da face, extração e seleção de características faciais, e reconhecimento da face.

Fonte: Bastet - Sistema de reconhecimento facial
http://www.bibl.ita.br/viiiencita/

Malic - Reconhecimento facial open-source



O malic é um projeto de reconhecimento facial open-source baseado na biblioteca OpenCV e Malib, utilizando filtro de gabor. Este projeto é composto 4 principais módulos:
  • malicsampling: Utilizado para efetuar as marcações da face (olhos, nariz e outros);
  • malicfacesampling: Este módulo armazena a face e o id do usuário (nome);
  • malicrecog: Programa responsável pelo reconhecimento facial;
  • malicsaver: Módulo simples, porém interessante. Neste aplicativo, o protetor de tela é invocado quando não existir uma face diante a câmera.
Ambiente:
  • Sistema operacional OpenSuSE 10.3;
  • Compilador gcc 4.2.1;
  • Kernel 2.6.22.5-31;
  • Biblioteca OpenCV 1.0;
  • Biblioteca Malib 0.5.8;
  • Dispositivo de Video Captura: Webcam Orbit Logitech - Device compatível com api V4L (Vídeo for Linux) 1/2;
  • Micro computador padrão IBM-PC (32/64 bits); Processador Pentium Cuo Core/ Core 2 Duo2Gbytes de RAM.
Downloads e instalação

Abaixo os links para download dos pacotes:

OpenCV (fontes):
http://easynews.dl.sourceforge.net/.../opencv-1.0.0.tar.gz

OpenCV (rpm):
http://rpm.pbone.net/index.php3?stat=3&search=opencv&srodzaj=3

OpenCV-devel (rpm):
http://rpm.pbone.net/index.php3?stat=3&search=opencv-devel&srodzaj=3

Malib:
http://www.malib.net/archives/libmalib-0.5.8.tar.gz

Malic:
http://ufpr.dl.sourceforge.net/sourceforge/malic/malic-0.0.9.1.tar.gz

Instalação dos pacotes:

Para instalar a biblioteca a partir do código fonte, baixe o pacote .tar.gz (link acima), descompacte e execute os tradicionais comandos de magia negra ./configure, make e make install, como no exemplo abaixo.
# tar -zxvf opencv-1.0.0.tar.gz 
# cd opencv-1.0.0 
# ./configure 
Se todas as dependências foram satisfeitas e tudo estiver funcionando corretamente, teremos uma tela similar ao resultado logo abaixo:
General configuration ========================================
    Compiler:                 g++ 
    CXXFLAGS:                 -Wall -fno-rtti -pipe -O3 -g -march=i686 
                              -ffast-math -fomit-frame-pointer 
    Install path:             /usr/local 
HighGUI configuration ========================================
    Windowing system -------------- 
    Use Carbon / Mac OS X:    no 
    Use gtk+ 2.x:             yes 
    Use gthread:              yes 
    Image I/O --------------------- 
    Use libjpeg:              yes 
    Use zlib:                 yes 
    Use libpng:               yes 
    Use libtiff:              yes 
    Use libjasper:            yes 
    Use libIlmImf:            no 
     Video I/O --------------------- 
    Use QuickTime / Mac OS X: no 
    Use xine:                 no 
    Use ffmpeg:               no 
    Use dc1394 & raw1394:     no 
    Use v4l:                  yes 
    Use v4l2:                 yes 
Wrappers for other languages =================================
    SWIG 
    Python                    yes 
Additional build settings ==================================== 
    Build demo apps           yes 
Now run make ... 
Agora execute os mágicos comandos make e make install.
# make 
# make install 
Se preferir instalar os pacotes .rpm, abaixo as instruções de instalação:
# rpm -ivh opencv-1.0.0-22.1.i386.rpm 
# rpm -ivh opencv-devel-1.0.0-22.1.i386.rpm 
Logo a seguir as instruções de compilação da biblioteca Malib:
$ tar -zxvf libmalib-0.5.8.tar.gz
$ cd libmalib-0.5.8
$ ./configure --prefix=/usr/local/malib
$ make
$ su
Senha:
# make install 
Se você chegou até aqui parabéns, pois o seu sistema está preparado para compilar o projeto de reconhecimento facial Malic, abaixo as instruções:
$ tar -zxvf malic-0.0.9.1.tar.gz
$ cd malic-0.9.1
$ CFLAGS="-I/usr/local/malib/include -I/usr/local/opencv/include" \ 
LDFLAGS="-L/usr/local/malib/lib -L/usr/local/opencv/lib" ./configure --prefix=/usr/local/malic
$ make
$ su
Senha:
# make install
Utilização do sistema

O primeiro passo é informar as coordenadas dos pontos característicos da face sobrancelha, olhos, nariz e boca. Para tal tarefa, execute o comando ./malicsampling e se tudo estiver funcionando corretamente, teremos uma tela como na ilustração abaixo:


Fig-A: Mapeando os pontos característicos

Para informar os pontos característicos no sistema, clique nos pontos extremos (esquerdo e direito) das sobrancelhas, dos olhos, nariz e boca. Lembrando que ao clicar em cada ponto, devemos pressionar o respectivo botão da coordenada correspondente. Ao término, pressione o botão ENTER para armazenar as coordenadas e depois no botão SAVE para gravar o arquivo .XML.

Agora o segundo passo é armazenar a FACE e um ID (nome se preferir) para um posterior autenticação. Execute o comando ./malicfacesampling para continuar com o procedimento.


Fig-B: Vinculando face e ID

Neste aplicativo, basta digitar o ID na caixa de texto e pressionar o botão ENTER seguido do botão SAVE e pronto!

Agora testaremos a identificação executando o comando malicrecog seguido do XML de gabor e o XML contendo a face e o ID. A segui um exemplo de execução:

$ ./malicrecog -j gaborrg_jet.xml -f face_jet.xml


Fig-C: Identificação Facial

O sinal vermelho indica que existe uma face diante a câmera, já o sinal azul corresponde a uma identificação concluída com sucesso.

Habilitando o ScreenSaver quando não houver usuário diante o computador.

Agora para finalizar, executaremos um aplicativo interessante que habilita o SCREENSAVER quando não existir uma face diante a câmera. Assim quando levantarmos do micro, automaticamente o protetor de tela será iniciado.

O processo é muito simples, basta abrir executar o xscreensaver e a seguir o malicsaver como no exemplo abaixo:
$ xscreensaver&
$ ./malicsaver 
Agora é sair mostrando para todos, que o software livre proporciona a todos projetos interessantes e inovadores.

Vale a pena mencionar que o projeto malic apresenta mais recurso do que os mencionados neste texto. Para maiores informações, aconselho ler os arquivos do projeto.

Para finalizar, abaixo um vídeo mostrando o projeto em execução.



"Colaborar atrai amigos, competir atrai inimigos...
Use a força, LEIA OS FONTES!"
Alessandro de Oliveira Faria

Alessandro de Oliveira Faria - Sócio-proprietário da empresa NETi TECNOLOGIA fundada em Junho de 1996 (http://www.netitec.com.br), empresa especializada em desenvolvimento de software e soluções biométricas, Consultor Biométrico na tecnologia de reconhecimento facial, atuando na área de tecnologia desde 1986 assim propiciando ao mercado soluções em software nas mais diversas linguagens e plataforma, levando o Linux a sério desde 1998 com desenvolvimento de soluções open-source, membro colaborador da comunidade Viva O Linux, mantenedor da biblioteca open-source de vídeo captura entre outros projetos.