Um pouco de tudo

Reconhecimento Facial Windows Mobile

FaceLight reconhecendo um rosto

Durante o projeto Bunny Me para Windows Mobile me deparei com um fodástico problema: como reconhecer o rosto da pessoa para colocar a máscara. Deixe-me explicar um pouco.

O projeto Bunny Me surgiu pois no IOS (iPhone) existia uma versão portada da biblioteca OpenCV. Esta biblioteca possui várias rotinas de manipulação de imagem e um dos melhores algoritmos de reconhecimento facial. Para a plataforma Android já existia no framework padrão uma rotina para reconhecimento. Como fazer?

Nessas plataformas o funcionamento do app era tirar a foto e se reconhecer que havia um rosto nela, já inseria uma máscara na frente, no tamanho e posição corretos. Como a posição as vezes oscilava um pouco, você poderia mover a máscara para ajustá-la melhor.

No Windows Mobile, eu não encontrei nem a OpenCV ou qualquer outra rotina de reconhecimento facial disponível, a primeira versão saiu com uma feature extra, além da movimentação da máscara pelo touch, eu uso as teclas do cursor para redimensionar a máscara horizontalmente e verticalmente. Ficava de fora então o reconhecimento facial automático.

Como mesmo assim, numa apresentação informal a chefia, recebi um feedback negativo da aplicação como um todo por justamente não ter o reconhecimento facial, fiquei focado em achar qualquer coisa que pudesse servir. Esse foi um grande desafio pois realmente a resposta era achar algo fora do mundo Windows Mobile e adaptá-lo a minha realidade.

Foram alguns meses de procura e testes até esbarrar no FaceLight, uma rotina feita em SilverLight para o reconhecimento facial pela webcam do usuário. A rotina era rudimentar, usava um algoritmo bem simples que se baseava apenas numa faixa de coloração da pele e supondo que como é uma webcam, praticamente a cabeça está visível apenas. Como SilverLight usa a mesma linguagem C# do .NET CF, teoricamente isso poderia ser portado.

Tive que lidar com várias limitações do .NET Compact em relação ao .Net padrão. Muita função que usava ponto flutuante, tive que adaptá-la para inteiro e por aí vai. Já era meio rudimentar e tive que deixá-la ainda mais, mas era o que tinha. No final das contas deu certo. O tamanho da máscara e a centralização no rosto as vezes dá certo. 🙂  Como o aplicativo já estava pronto e a rotina é um pouco lenta em seu processamento, criei então uma opção no já existente menu que aciona a função de reconhecimento.

Quem se interessou pelo uso da rotina pode dar uma olhada no site do projeto:

http://facelight.codeplex.com/

Se a idéia é um reconhecimento facial em desktop mesmo, sugiro uma coisa mais profissional que é  o Emgu CV. Um wrapper em C# para usar a OpenCV que é em C++. O link da página é:

http://www.emgu.com/wiki/index.php/Emgu_CV

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s