Detecção e Reconhecimento de Faces

Falaa Galera,

Meu primeiro post aqui e primeiramente saudações a todos =).

Estou analisando a possibilidade de desenvolver um sistema que irá , entre outras coisas, fazer detecção e reconhecimento de face para o TCC. Procurei pelo assunto aqui no forum e encontrei bastante gente comentando algo relacionado, mas ainda fiquei com algumas dúvidas. Gostaria de saber se há alguma biblioteca que torne possível a detecção e comparação de uma foto com uma previamente armazenada, ou seja eu armazeno uma foto de uma pessoa com seu nome, sexo, etc… e depois quero pegar uma foto diferente e comparar com a armazenada e caso seja a mesma pessoa eu iria trazer os dados dela. Vi que muitos comentaram da OpenCV, mas ela é uma biblioteca em C/C++ (me corrijam se eu estiver errado). Consegui encontrar também alguns assuntos sobre uma implementação da OpenCV em java, mas não cheguei a testar. Há alguma outra biblioteca em java ? Alguém ja utilizou a OpenCV com java ?

Primeiramente é isso.

Valeu galera

Eu trabalho com a opencv aqui e posso te dizer que é muito boa. O mapeamento java dela é muito aquém. Não compensa usar java para isso.
A única biblioteca que implementa haar cascades é a opencv. Haar cascades só identifica a localização dos olhos e da boca.
Para identificar a face de alguém você precisa medir as distâncias que são características dos rostos de cada pessoa.

Existe um algoritmo que se chama Ada Boost. Vai precisar estudá-lo.

Assino embaixo do que o Julio falou. Acredito que a OpenCV é, de longe, uma das melhores ferramentas pra se trabalhar com processamento de imagens.

Você provavelmente vai ter de usar alguma técnica de IA ou algum modelo matemático ‘out-of-the-box’. Além da AdaBoost, acho interessante dar uma olhada em Eingenface.

Julio, você que lida com o assunto, o que acha de RNA pra aprendizado nesse caso? Eu tenho minhas dúvidas quanto a performance, principalmente dependendo da entrada.

[quote=Andre Brito]Assino embaixo do que o Julio falou. Acredito que a OpenCV é, de longe, uma das melhores ferramentas pra se trabalhar com processamento de imagens.

Você provavelmente vai ter de usar alguma técnica de IA ou algum modelo matemático ‘out-of-the-box’. Além da AdaBoost, acho interessante dar uma olhada em Eingenface.

Julio, você que lida com o assunto, o que acha de RNA pra aprendizado nesse caso? Eu tenho minhas dúvidas quanto a performance, principalmente dependendo da entrada.

[/quote]

RNA é utilizada posteriormente quando você já adquiriu os modelos normalizados das faces(que são números representando as características dela). Isso é a Imagem Integral de Viola e Jones. Nesse tempo a face já foi detectada por esses algoritmos.


Exs de haar features usadas na opencv.

      x    y

I(x,y) = SUM( SUM( G(i,j) ) )
i=0 j=0

http://www.siliconintelligence.com/people/binu/perception/node47.html

Esse não é um projeto muito ambicioso não. É perfeitamente cabível em um TCC. Um amigo que estudava comigo desenvolveu-o no final do curso usando-o diretamente num filtro do directshow e posteriormente ligando o software numa web cam. A margem de erro é bem baixa.

Aqui tem um exemplo simples de detecção de face(saber quando existe um rosto na imagem) utilizando a opencv.

http://opencv.willowgarage.com/wiki/FaceDetection
http://www.cognotics.com/opencv/servo_2007_series/part_2/sidebar.html

A parte mais complicada é fazer o reconhecimento utilizando as características específicas de cada rosto. Nesse caso entra a IA.

Muito Obrigado pelas informações Julio e André.

Muito legal o OpenCV, vou estudar mais sobre o assuntos que vocês passaram. O projeto que tenho em mente é um serviço web. É feito um upload da foto pro serviço, há o processo de reconhecimento e a resposta (afirmativa ou negativa ) é devolvida. Encontrei uma API, www.face.com, online que faz algo parecido com fotos da sua conta do Facebook e do Twitter e há a possibilidade de você utilizar ela em sua aplicação. Farei um estudo dela e volto com informações.

Muito obrigado galera.

Abraço

Se não for usar isso em uma cãmera em realtime é perfeitamente possível de implementá-lo em java. Se o quesito não é o vídeo, sugiro que dê uma olhada na http://www.aforgenet.com/. Uma biblioteca que inclui algoritmos mais utilizados para processamento de imagens, IA, etc…

Essa biblioteca é escrita em c#.

O mais importante no TCC é saber como a coisa funciona. Mais importante até que a implementação. Se usar uma API de alto nível seu tema perde o foco. Tome cuidado.

A princípio eu não pretendo aplicar em real time Julio, seria apenas as imagens enviadas ao serviço. Vi que existe a JAI (Java Advanced Imaging API), seria possível fazer isso com ela ? Vou olhar a que você passou.

Obrigado

[quote=jdetoni]A princípio eu não pretendo aplicar em real time Julio, seria apenas as imagens enviadas ao serviço. Vi que existe a JAI (Java Advanced Imaging API), seria possível fazer isso com ela ? Vou olhar a que você passou.

Obrigado[/quote]

Não sei se a jai tem o algoritmo do viola implementado. A única que eu conheço é a opencv.

OpenCv ja implementa o Eigenface.

De uma olhada na documentação: http://opencv.willowgarage.com/wiki/FaceRecognition

[quote=alanweb]OpenCv ja implementa o Eigenface.

De uma olhada na documentação: http://opencv.willowgarage.com/wiki/FaceRecognition[/quote]

É verdade, olha só a coleção de artigos relacionados:

http://www.face-rec.org/interesting-papers/

Julio ,
Meu TCC tambem abrangerá reconhecimento facial, por isso tenho pesquisado muito a respeito, porém não tinhamos pensado em nos aprofundarmos muito no assunto na monografia, pois a ideia era usar o OpenCv para o renhecimento facial num primeiro instante justamente pela facilidade de implementar o algoritmo, deixando em aberto a possibilidade de num futuro a troca do motor de reconhecimento por outro algortmo não suportado pelo OpenCv em associação com o mesmo ou não!

Nesse caso vc acha que deveriamos dar uma maior atenção realmente aos algoritmos cabiveis, mesmo que não o utilizemos num primeiro momento???
A principio explicariamos somente o funcionamento do Eigenface, pois é o algoritmo que o OpenCv implementa. mas agora fiquei com um certo receio, rsss!!!

jdetoni,
Mais alguns links interessantes:

JavaCv - http://code.google.com/p/javacv/

Pagina pessoal de Shervin Emami - http://www.shervinemami.co.cc/openCV.html (Grande entusiasta do OpenCv - Leitura recomendadissima)

OpenCv Tutorials - http://opencv.willowgarage.com/wiki/FullOpenCVWiki#Welcome.2BAC8-Introduction.Tutorials

Galera, show a ajuda de vocês. To pesquisando as informações que vocês passaram e dou um feedback. Andei trabalhando com a API que comentei, face.com, e apesar de estar em beta ela traz informações interessantes. Volto com mais notícias. Mais uma vez muito obrigado a todos

Não sei como anda a sua pesquisa, mas a titulo de curiosidade eu também estava precisando usar a opencv mas para aplicações em JAVA.

Neste caso eu estou usando um WRAPPER chamado JAVACV, você chegou a pesquisar?

Com ele você faz praticamente tudo, como se estivesse usando o opencv direto, só que em JAVA e orientado a objeto ! ;D

Dê uma olhada em : http://code.google.com/p/javacv/

Menegussi

jdetoni Eu sei que esse post é bem antigo, mais eu vou fazer meu tcc nessa área. Meu orientador me pediu para fazer comparativos entre os algoritmos da OpenCV. Entre 3-10 comparações. Vou utilizar o MatLab por ter maior credibilidade acadêmica. Gostaria de saber se você terminou o seu tcc. E se você poderia me ajudar.

Olá Jpkun,

Infelizmente na época tive que abandonar o projeto. O que eu consegui aprender sobre o assunto foi a partir das dicas e material que o André e o Julio disponibilizaram e de pesquisas na internet.
Te recomendo a começar dando uma olhada nesse material.
Nunca trabalhei com MatLab, mas vi que é possível utilizar a OpenCV nele. Segue alguns links que encontrei:



http://xanthippi.ceid.upatras.gr/people/evangelidis/matlab_opencv/
http://kyamagu.github.io/mexopencv/

Se puder ser útil em mais alguma coisa, por favor, me informe.

No mais, Boa Sorte e Sucesso com o Trabalho!!

Abs

Eu fiz um mestrado usando a OpenCV.

Quando o assunto é OpenCV, tanto faz usar o MatLab ou não.

Ele não tem mais “credibilidade acadêmica”. O único ponto positivo é que ele descreve facilmente vários conceitos matemáticos, o que facilita a reprodução dos seus códigos. Por outro lado, ele é uma ferramenta paga e uma péssima escolha se você pensa em fazer um trabalho que possa virar um produto real.

Eu fiz um mestrado usando a OpenCV.

Quando o assunto é OpenCV, tanto faz usar o MatLab ou não.

Ele não tem mais “credibilidade acadêmica”. O único ponto positivo é que ele descreve facilmente vários conceitos matemáticos, o que facilita a reprodução dos seus códigos. Por outro lado, ele é uma ferramenta paga e uma péssima escolha se você pensa em fazer um trabalho que possa virar um produto real.[/quote]

Por que péssima escolha? O Matlab gera código pra dispositivos embarcados inclusive, em C ou mesmo VHDL, que em tese seria excelente para lançar um produto que fosse embedded.

Não é uma péssima escolha se você tiver os U$2650,00 da licença + os aproximadamente U$1200,00 para cada pacote adicional que você venha a usar.

Isso claro, para uma licença individual. Se você tiver uma empresa, o preço é bem mais alto.

[quote=ViniGodoy]Não é uma péssima escolha se você tiver os U$2650,00 da licença + os aproximadamente U$1200,00 para cada pacote adicional que você venha a usar.

Isso claro, para uma licença individual. Se você tiver uma empresa, o preço é bem mais alto.[/quote]
É, derrubou meu argumento kkk