Reconnaissance de visage OpenCV / JavaCV - Valeurs de confiance très similaires
Je vais vous expliquer ce que je suis en train de faire, comme cela semble être pertinente pour comprendre ma question.
Je suis en train d'essayer de faire face à la reconnaissance des personnes que l'étape devant une caméra, en se basant sur les images dans la base de données.
Ces photos sont recueillies à partir d'une identification de la Carte à Puce (qui ne contient qu'une seule face antérieure de l'image) ou une frontale face à la photo de profil d'un réseau social. De ce que j'ai lu jusqu'à présent, il semble que, pour une bonne reconnaissance de visage, une bonne quantité de la formation des images est nécessaire (50+). En tant que tel, car mes images sont très rares à créer un système fiable de formation, j'ai plutôt essayé d'utiliser ma caméra en direct, les captures de trame (actuellement à l'aide de 150) que l'ensemble de la formation, et des images recueillies précédemment que le jeu de test. Je ne suis pas sûr si ce que je suis en train d'essayer avec ce est correct, donc s'il vous plaît laissez-moi savoir si je suis le vissage.
Donc, le problème, c'est qu'après j'ai disons, 5 identifié les photos que j'ai reçu de Cartes à Puce, j'ai essayé de faire la reconnaissance du visage en utilisant comme un ensemble de formation, les 150 images dont la caméra a capté de mon visage. Lorsque vous essayez de reconnaître, de la confiance des valeurs pour chacune des 5 test des visages est EXTRÊMEMENT similaires, ce qui rend l'ensemble du programme inutile, parce que je ne peut pas reconnaître avec précision n'importe qui. Souvent, à l'aide de caméra différents, des captures d'entraînement-je obtenir plus de confiance envers les valeurs à partir de photos de personnes au hasard que l'image de moi-même.
Je vous serais reconnaissant de toute aide que vous pouvez me donner, parce que je suis à une perte ici.
Merci.
Note: je suis en utilisant le JavaCV wrapper pour OpenCV pour faire mon programme, et la haarcascades qui viennent inclus dans le package. Eigenfaces cours de l'algorithme utilisé.
source d'informationauteur Fábio Constantino
Vous devez vous connecter pour publier un commentaire.
De Reconnaissance De Visage
Intro
Je veux ajouter ceci. libfacerec a été inclus dans l'officiel OpenCV 2.4.2voir:
Cela signifie que si vous êtes en utilisant OpenCV 2.4.2, alors vous avez la nouvelle cv::FaceRecognizer dans le contrib module. Je connais un wrapper Python a été ajouté dernièrement (merci pour ça!), probablement Java est également emballé au moment de la rédaction de ce.
cv::FaceRecognizer est livré avec une documentation détaillée, que vais vous montrer comment faire de la reconnaissance faciale avec beaucoup de l'intégralité du code source des exemples:
Si vous voulez savoir comment la disposition des algorithmes de reconnaissance de visage (Eigenfaces, Fisherfaces, Local Binary Patterns Histogrammes), puis surtout lire la Guide Pour la Reconnaissance du Visage avec OpenCV. Là, je vais expliquer comment le travail d'algorithmes et de parler de leurs défauts:
De Reconnaissance de visage avec quelques images
Maintenant à l'ensemble du problème de la reconnaissance des visages, lors de votre ensemble de données d'apprentissage est faible. Je vais vous écrire un approfondie de la réponse, donc il vaut peut-gens viennent ici de Google.
Fait Eigenfaces et Fisherfaces ne doit pas être utilisé, lorsque vous avez seulement très peu d'échantillons par personne dans votre ensemble de données. Vous avez besoin de données pour ces modèles de travailje ne peux pas souligner que suffisant. Le plus sera le mieux. Ces méthodes sont basées sur l'estimation de la variance de vos données, afin de leur donner quelques données pour estimer votre modèle à partir de! Il y a un moment, j'ai couru un petit test sur le AT&T Facedatabase (avec le facerec cadre), ce qui montre la performance de ces méthodes avec un nombre variable d'images par personne:
Je ne suis pas l'écriture d'une publication ici, pas plus que je sauvegarde ces chiffres détaillé de l'analyse mathématique. Il a été fait avant, donc je le recommande à tout le monde vient à douter de ces chiffres à regarder dans (2), afin de voir une analyse très détaillée de l'APC (Eigenfaces) et LDA (Fisherfaces) pour les petits jeux de données d'apprentissage.
Donc, ce que je suggère, c'est l'aide des Schémas Binaires, les Histogrammes (3) pour la Reconnaissance du Visage dans le petit exemple de scénario. Ce sont également inclus dans le OpenCV FaceRecognizer et ont été prouvés pour effectuer très bien sur les petits jeux de données d'apprentissage. Si vous combinez cela avec un TanTriggs de Prétraitement (4), vous devriez avoir une très solide Face à la Reconnaissance du modèle. Le TanTriggs pré-traitement est un 8-liner (ou presque) en Python, voir https://github.com/bytefish/facerec/blob/master/py/facerec/preprocessing.py#L41 pour la mise en œuvre. Qui devrait être facile à adapter à Java (ou je peux la mettre en œuvre avec OpenCV, si les gens en font la demande).
Littérature
Ce que vous voulez savoir, c'est comment vous pouvez effectuer une reconnaissance du visage avec une seule formation de l'image. C'est possible, mais dépend aussi du nombre de personnes différentes vous voulez classer.
50+ de la formation des images ne sont certainement pas nécessaires. Pour une base de reconnaissance de visage vous avez besoin d'environ 50 visages pour calculer votre visage l'espace (eigenfaces). Peut-être vous mêler à ça. Voir que vous avez beaucoup de variations dans ce visage, la couleur de la peau, des lunettes,...)
Vous pouvez prendre ces visages à partir de l'une des faces de la base de données que vous le souhaitez. http://www.face-rec.org/ listes de plusieurs bases de données et explique les différents algorithmes.
Après avoir calculé votre espace face de vous entraîner avec autant de visages que vous avez. Dans votre cas, vous n'avez qu'un. Selon la façon dont beaucoup de différents sujets que vous souhaitez classer cela pourrait déjà le travail.
Si vous obtenez un trop grand nombre de faux classifications je voudrais jeter un oeil à des méthodes hybrides. Hybrides combinent un modèle correspondant à l'algorithme (eigenfaces, fisherfaces) avec une fonctionnalité de base. Dans ce cas, vous prenez la sortie de votre premier algorithme et faire correspondre les yeux, le nez, les sourcils, le menton forme etc. avec votre test face.
En bref:
Dans le cas où vous n'avez pas trouvé, OpenCV a aussi un visage de reconnaissance de la bibliothèque:
https://github.com/bytefish/libfacerec
EDIT:
Je ne voudrais pas utiliser plus de 10-15 composants (eigenfaces).