Étape 6: Réfléchir et apprendre
Oui, à quelle vitesse, il crée deux sous-processus celui pour chaque servo, quand un servo est dit de se déplacer, une vitesse est fournie. Le sous-processus en boucle et incrémente la position du servo par une avec chaque pass - jusqu'à ce qu’il atteigne la position voulue. À quelle vitesse il boucle est basé sur le paramètre de vitesse fourni. Cela vous permet de déplacer les servo-moteurs à différentes vitesses, même si la vitesse du moteur n’est pas réglable. Initialement, j’ai implémenté cela avec les threads, mais python s’est avéré pour avoir très mauvaise manipulation de threads à haute charge CPU.
À l’instar de quasiment n’importe quelle application de reconnaissance faciale de source ouverte, nous utilisons cascade de haar-classificateur de OpenCV pour rechercher des modèles correspondent à celles trouvées dans les FrontalFace.xml inclus. Mais là, il semble y être certains mal compris et documenté des aspects des paramètres de la fonction cvHaarDetectObjects qui ont un impact majeur sur l’exécution du programme.
Le premier paramètre est bien sûr l’image. Vous passez à la fonction de l’image que vous souhaitez rechercher des visages au sein, il semble y avoir une certaine confusion même à cette étape - les gens semblent penser qu’en premier convertissant l’image en échelle de gris, le traitement sera plus rapide. Un repère simple montrera que c’est faux - en fait, il rendra le processus plus lent parce que vous effectuez une étape supplémentaire. Aussi, les gens semblent penser que tout d’abord mise à l’échelle l’image vers le bas va rendre les choses plus vite - c’est logique intuitive, parce qu’il y a maintenant une image plus petite pour rechercher une face au sein, mais ce n'est pas la méthode la plus efficace, ce qui m’amène au paramètre suivant,
ScaleFactor--les habitants de forum semblent donner des suggestions sur ce que cela doit être réglé sur sans donner beaucoup d’explications sur ce qu’il est. Pour bien comprendre, vous devez savoir comment OpenCV détecte les visages :
Détection de visage OpenCV : visualisé de Adam Harvey sur Vimeo.
Regardez cette vidéo et une attention particulière vers la fin. Notez qu’un carré se déplace du coin supérieur gauche pour en bas à droite. Chaque fois qu’elle bouge, elle recherche une séquence qu’il--dans ce cas-ci, un visage, mais avec OpenCV, ce modèle pourrait être n’importe quoi. Voir comment il fait un passage et s’agrandit, puis va à elle encore ? Le montant qu’il augmente de volume à chaque passage est le scalefactor. Si vous le réglez à 1.1, qu'il va obtenir 1,1 fois plus grand (10 %) avec chaque passage 1.3 rendrait obtenir 1,3 fois plus grand à chaque passage--30 %. Évidemment plus vite il se développe en taille, plus vite il se complète, mais au détriment de manque peut-être un visage qui était là.
Le paramètre suivant n’a aucun impact sur le rendement pour autant que je peux dire. MinNeighbors indique au programme comment pointilleux pour tout ce qu’il considère comme une correspondance. La fonction cherche des modèles et vérifie si ces schémas correspondent à sa base de données de schéma - un fichier xml. Je pense que la valeur par défaut il 3--ce qui signifie que s’il y a 3 modèles à l’intérieur il est carré où il est à la recherche, qui correspond à des modèles trouvés dans le fichier xml, puis considérez-le comme une correspondance. J’ai mis le mien à 4. Plus vous le réglez, plus sûr, que vous pouvez être que quand il dit qu'il trouve une correspondance, il est juste. Cependant, il trop faible et il pense que tout ce qu’il voit est un visage. Il est trop haut et il auront du mal à attraper les visages réels.
Le prochain paramètre Flags ; Ce sont des valeurs booléennes qui vous permettent de régler les choses :
l’une est CV_HAAR_DO_CANNY_PRUNING. Ce drapeau a été conçu uniquement pour les visages ; Il indique à la fonction d’ignorer la recherche sur des zones avec des arêtes vives... parce que les visages n’ont généralement pas de bords tranchants. (Voir image en pièce jointe, parfois ils pussent...) Cela accélère les choses vers le haut selon le contexte.
un autre est HAAR_FIND_BIGGEST_OBJECT, cela indique la fonction de retour seulement le plus grand objet qu'il trouvé.
un autre CV_HAAR_DO_ROUGH_SEARCH qui indique la fonction d’arrêter de chercher dès qu’il a trouvé quelque chose, il est destiné à être utilisé avec HAAR_FIND_BIGGEST_OBJECT et améliore considérablement les performances lorsque vous essayez de trouver une face seulement.
Les deux derniers paramètres sont importants, ou au moins un d’eux est - ils sont MinSize et MaxSize. Une méthode commune pour accélérer la recherche semble être de réduire les images, si vous voulez doubler la vitesse de la détection d’un visage dans une image en 800 x 600, redimensionnez-la à 400 x 300. Le problème avec cette logique est que vous se réduisent les visages possibles et haar ne trouve fiable faces inférieures de 20 x 20 pixels. Non seulement cela, maintenant, vous utilisez des ressources informatiques pour réduire cette image. Vous pouvez obtenir le boost de vitesse même en spécifiant un MinSize pour le visage. 20 x 20 est la valeur par défaut, mais 40 x 40 ira fou rapide en comparaison. Plus vous allez, plus vite la recherche sera, mais vous pouvez commencer manque de petits visages.
Je voulais juste clarifier ce point...
J’espère que cette aide, et j’espère que tout le monde aime travailler avec le Raspberry Pi et OpenCV autant que j’ai fait.
Il s’agit de mon premier instructable. Je serais ravi de voir vos commentaires.
Merci,
Chris