2017-06-26 1 views
1

Ici, je dis que j'ai essayé beaucoup de tutorials pour implémenter la reconnaissance faciale dans OpenCV 3.2 en utilisant la classe FaceRecognizer dans le module de visage. Mais je n'ai pas obtenu le résultat accepté comme je le souhaite.Quelle est la meilleure méthode pour former les visages avec FaceRecognizer OpenCV pour avoir le meilleur résultat?

Ici, je veux demander et je veux savoir, quel est le meilleur moyen ou quelles sont les conditions à éviter pendant l'entraînement et la reconnaissance?

Ce que je l'ai fait pour améliorer la précision:

  • Créer (au moins) 10 visages pour la formation de chaque personne dans la meilleure qualité, la taille et l'angle.
  • Essayez d'ajuster le visage dans l'image.
  • Egaliser les HIST des images

Et puis je l'ai essayé tous les Recognizer trois visage (EigenFaceRecognizer, FisherFaceRecognizer, LBPHFaceRecognizer), le résultat tout était le même, mais le taux de reconnaissance était vraiment très faible, je ont formé seulement pour trois personnes, mais ne peuvent pas non plus reconnaître très bien (la première personne a été identifiée comme le deuxième et ainsi de suite des problèmes).

Questions:

  • charge la formation et les images de reconnaissance doivent être de la même caméra ?
  • Les images d'entraînement sont-elles recadrées manuellement (photoshop -> lire les images puis former) ou cette tâche doit être effectuée par programmation (detect-> crop-> redimensionner puis former)?
  • et quels sont les meilleurs paramètres de chaque face (int num_components, double threshold)
  • reconnaisseur
  • Et comment définir la formation algorithme pour revenir -1 quand il est une personne inconnue.
+0

** Q1 **: Préféré mais non obligatoire, les caméras doivent avoir une qualité comparable ** Q2 **: Il n'y aurait pas de différence entre les deux, mais je choisirais de le faire par programmation, car cela permettrait d'économiser mon temps. ** Q3 **: Vous pouvez essayer avec les paramètres par défaut dans les documents, ils ont bien fonctionné pour moi ** Q4 **: Lire la [ligne 134] (http://docs.opencv.org/2.4/modules /contrib/doc/facerec/facerec_tutorial.html#eigenfaces-in-opencv) * Joyeux Eid * – ZdaR

+0

@ZdaR Merci! Pouvez-vous me dire quel est le seuil le plus élevé et quel est le seuil inférieur, et quelle est la valeur de ce seuil? Et ces paramètres sont pour l'entraînement ou pour la reconnaissance? Parce que quand j'ai formé les données, alors je vais l'enregistrer et ensuite la prochaine fois que je charge seulement les données. Quand je charge les données, je dois également préparer les mêmes paramètres que lorsque je me suis entraîné? –

+0

Pouvez-vous joindre le lien des documents, où ces termes sont référés? – ZdaR

Répondre

2

Expansion sur mon commentaire, chapitre 8 Mastering OpenCV fournit vraiment des conseils utiles pour les visages pré-traitement pour rendre l'aide au processus de reconnaissance, tels que:

  • prendre un échantillon seulement lorsque les deux yeux sont détectés (via la cascade de haar)
  • transformation géométrique et culture: Ce processus comprendrait mise à l'échelle, la rotation et la conversion des images de sorte que les yeux soient alignés, suivie de l'élimination du front, le menton, les oreilles, et le fond de l'image du visage.

  • égalisation d'histogramme distinct pour les côtés gauche et droit: Ce processus normalise la luminosité et le contraste sur les deux côtés de droite et gauche du visage de façon indépendante.

  • Lissage: Ce processus réduit le bruit d'image en utilisant un filtre bilatéral.

  • masque Elliptique: Le masque elliptique enlève des cheveux restant et arrière-plan de l'image du visage.

J'ai ajouté une charge hacky/enregistrer à my fork of the example code, ne hésitez pas à essayer/tweak comme vous en avez besoin. Actuellement, c'est très limité, mais c'est un début. En outre, vous devez également vérifier OpenFace and it's DNN face recognizer. Je n'ai pas encore joué avec ça, donc je ne peux pas fournir de détails, mais ça a l'air vraiment cool.

+0

Merci pour votre explication, j'ai une question, je pense qu'il reste quelque chose dans le fichier preprocessing.cpp à la ligne 224, qu'il n'y a pas de passer le paramètre 'scaledWidth' et aussi aucune valeur par défaut pour cela. Comment résoudre ceci? –

+0

@BahramdunAdil J'ai regardé tout le code d'exemple du chapitre, mais je n'ai pas pu trouver 'scaledWidth' et je ne suis pas sûr de savoir de quoi vous parlez. –

+0

'void detectLargestObject (const Mat & img, CascadeClassifier & cascade, Rect & largerObject, int scaledWidth)' Je dis que dans la ligne 224 dans le fichier preprocessing.cpp, pourquoi il n'y a aucune valeur pour 'scaledWidth' que vous pouvez revoir, peut-être verra ça. –