Reconhecimento de Faces

Boa tarde a todos.
Meu professor de algebra linear da faculdade passou um trabalho computacional sobre sistemas de reconhecimento de Face. É um sistema bem simples, no qual ele tem um conjunto de arquivos de arquivos de imagens contendo fotos de algumas pessoas. O sistema lê um arquivo qualquer de foto e converte a imagem para uma matriz de pixels. Então ele efetua algumas operações elementares sobre a referida matriz e compara a foto com cada uma das fostos do banco de imagens do sistema. Então ele tenta dizer se a foto é de uma pessoa que esá cadastrada no banco. Ele deu o algoritmo do sistema e quer que nós façamos algumas alterações nele para melhorar a detecção de faces.
Eu me interessei muito pelo tema e gostaria de desenvolver o referido sistema em C++. Então, qual biblioteca devo usar para reconhecimento de faces? Alguém me indicaria algum livro sobre o assunto? Alguém teria alguma ideia para deixar meu sistema um pouco mais sofisticado? Só estou pedindo ideias, não quero código.
Obrigado a todos.

Jovem,
Interessante o trabalho proposto nunca tive a oportunidade em trabalhar com reconhecimento de face,
o ultimo projeto que participei com biometria foi para um grande banco e precisávamos reconhecer a palma da
mão do cliente no ATM e tivemos que desenvolver o driver do dispositivo de leitura… dor de cabeça total.
Mas li diversos livros que me ajudou bastante, mas recomendo esses dois ISBN: 0387362320 e 0750679670.

Sucesso no desafio.

abs,

Obrigado pela resposta Kanin Dragon. Mais sugestões são bem vindas

A Opencv é uma biblioteca da intel que implementa haarcascades.

O reconhecimento de faces funciona da seguinte maneira:

haarcascades para detectar se existe um rosto na imagem e separá-lo da imagem restante;
Imagem integral para simplificação dos valores dos pixels;
Rede neural para reconhecimento desses valores;

http://opencv.willowgarage.com/wiki/

Aqui tem um exemplo de deteção de faces ecrito em c++ usando opencv.
http://opencv.willowgarage.com/wiki/FaceDetection

A parte do reconhecimento já é mais complicada.

Obrigado juliocbq.
O opencv então implementa funcionalidades relacionadas ao reconhecimento de faces, certo? Teria alguma dica de livro sobre reconhecimento de faces?

[quote=matheuslmota]Obrigado juliocbq.
O opencv então implementa funcionalidades relacionadas ao reconhecimento de faces, certo? Teria alguma dica de livro sobre reconhecimento de faces?[/quote]

Você pode usar a uma kohonen para resolver esse problema.

http://www.scholarpedia.org/article/Kohonen_network

Uma coisa é processamento de imagens e outra é inteligência artificial.

O processamento de imagens é usado para encontrar um rosto de acordo com uma métrica(Que pode ser a medida entre os dois olhos) e recortar a mesma.

O resultado do processamento vão ser essa imagem(os pixels) normalizados para a rede kohonen.

Quem faz o recohecimento e identifica se alguém é alguém, é a rede neural.

Entendi. Muito obrigado pelas informações juliocbq. Usando somente o algoritmo kohonen eu ainda preciso de mais coisas para montar a rede neural do sistema? Grato pela atenção.

matheus, a kohonen é um modelo de rede neural e não um algoritmo. Voce vai usar alguns algoritmos de aprendizado para treinar a rede.

Você vai precisar de uma bibliografia sobre processamento de imagens e Inteligência Artificial :


Só talvez esclarecer um pouco a excelente resposta do juliocbq:

Existem dois problemas distintos.

A grande idéia é de cada imagem obter um conjunto de parâmetros daquela imagem que seja característico do objeto a ser reconhecido. Imaginar agora que existam 3 parâmetros por imagem e que cada parâmetro vá de zero a cem. Calculamos esses parâmetros para digamos 10 imagens de cada objeto, sendo cinco objetos diferentes. Agora, se a gente plota esses parâmetros num gráfico 3D, as imagens de cada tipo de objeto (ou rosto sei lá) estão formando grupinhos no espaço (já que gravitam em torno de parâmetros característicos daquele objeto). Então é necessário achar um algorítmo que agrupe essas imagens e possa dizer, dado os valores de parâmetro, em que imagem aqueles valores se encaixam melhor.

Para a primeira parte: achar os parâmetros (feature space) você usa processamento de imagens.

Pro segundo você usa algorítimos de aprendizado de maquina. Eu recomendo você olhar SVM (máquinas de vetores de suporte) ao invéz de RNA (redes neurais). Além de ser mais eficiente (tempo), funciona melhor com um grande número de dados de entrada (quantidade de parâmetros) e, na minha experiência prática, simplesmente funciona melhor.

Olhe este exemplo com OpenCV:

http://www.shervinemami.co.cc/faceRecognition.html

Obrigado juliocbq e barba_rio pela ajuda. Começarei a desenvolver e quando tiver algum resultado posto aqui.

1 curtida