Comment obtenir un "mugshot" de détection des visages carrés?

je suis en train de construire une application qui va prendre une image du corps entier d'une seule personne et va produire un "mugshot" pour cette personne.

Mugshot qui signifie une image de l'ensemble du visage, du cou, des cheveux et des oreilles de la même taille que celle d'un autre mugshot.

Actuellement, je suis using

http://askernest.com/archive/2008/05/03/face-detection-in-c.aspx

pour mettre en œuvre OpenCV et je suis en utilisant

harrcascade_frontalface_default.xml  
harrcascade_frontalface_alt.xml  
harrcascade_frontalface_alt2.xml  
harrcascade_frontalface_alt_tree.xml

comme mon cascade.

j'utilise toutes les cascades parce qu'une seule ne détecte pas tous mes visages. Une fois que j'ai tous les visages détectés par toutes les cascades, je trouve mon carré moyen et je l'utilise pour me faire une dernière idée de la taille et de la largeur de la photo.

mon problème est en 3 parties.

  • Mon processus actuel est plutôt lent. Comment puis-je accélérer le processus de détection?

    Edit: je trouve que le temps de traitement est directement liées à la taille de la photo. Réduire la taille des photos peut s'avérer utile.

  • une seule cascade ne détectera pas tous les visages que je croise donc je les utilise tous. Cela produit naturellement beaucoup de carrés variés et quelques faux positifs. Quelle méthode puis-je utiliser pour identifier les faux positifs et les exclure du calcul du carré moyen? ex. SandmanWayne

    Edit : j'implémente une moyenne de les valeurs à l'intérieur de l'écart-type. Je posterai le code bientôt.

  • Je ne suis pas vraiment sûr de la meilleure façon de trouver le mugshot étant donné les coordonnées carrées du visage. Où puis-je trouver des rapports visage sur mugshot?

    Edit : résolu celui-ci. En supposant que toutes mes têtes sont des rapports de leurs visages.

    static public Rectangle GetMugshotRectangle(Rectangle rFace)
    {
        int y2, x2, w2, h2;
    
        //adjust as neccessary
        double heightRatio = 2;
    
        y2 = Convert.ToInt32(rFace.Y - rFace.Height * (heightRatio - 1.0) / 2.0);
        h2 = Convert.ToInt32(rFace.Height * heightRatio);
        //height to width ratio is 1.25 : 1 in mugshots
        w2 = Convert.ToInt32(h2 * 4 / 5);
        x2 = Convert.ToInt32((rFace.X + rFace.Width / 2) - w2 / 2);
    
        return new Rectangle(x2, y2, w2, h2);
    }
    

    Sandman

    J'ai juste besoin de se débarrasser de ces faux positif.

OK, 4 numéros.

  • notre caméra que nous allons utiliser est actuellement hors service donc je n'ai pas de méthode pour capturer des images en ce moment. Où puis-je trouver des images du corps entier de personnes qui ne sont pas pron pur comme la recherche d'image de google pour des images du corps entier?

    Edit : "Personne" qui Fait une bonne recherche :)
17
demandé sur Biff MaGriff 2011-04-20 01:51:55

3 réponses

une seule cascade pourrait faire ce que font toutes vos cascades si elle est configurée de cette façon, en plus elle ne vous donne pas plusieurs résultats à juger. Les cascades que vous utilisez sont peut-être différentes dans la collection d'images d'enseignement qu'ils sont faits de ou dans certains paramètres.

Un tutoriel sur la façon de construire une cascade peut être trouvé ici. Il serait utile d'utiliser les photos pour former les quatre cascades que vous utilisez, mais je ne sais pas si elles sont accessibles au public.

1
répondu dronus 2011-04-23 23:02:56

Ok, j'ai compris mais le projet est sur la glace pour le moment.

Je n'ai pas la source pour coller la VM prend une éternité à charger.

Si quelqu'un est intéressé, faites le moi savoir et je vais poster.

Si vous voyez quelque chose qui ressemble à ce qui pourrait être fait mieux de me le faire savoir.

les mesures que j'ai prises étaient les suivantes.

  1. charger l'image, si plus de 500 pixels en hauteur ou en largeur font une nouvelle image d'un version réduite à un maximum de 500px de hauteur ou de largeur. Enregistrez la balance.
  2. exécutez L'implémentation C# OpenCV à Demandez À Ernest sur toute la face frontale de Harrcasscades à Harrtraining.
  3. pour une raison quelconque, les rectangles produits par Ask Ernest doivent être augmentés de 1,3 X
  4. avec les rectangles générés utilisez écart-type pour supprimer les faux positifs. J'ai fait cela pour chaque coin du rectangle trouver la distance entre chaque coin de rectangle et l'emplacement moyen du coin. J'ai fait une note de n'importe quel rectangle qui avait un coin hors de coup et l'ai retiré de la liste des rectangles de candidat.
  5. obtenir le rectangle moyen des rectangles restants et appliquer "GetMugshotRectangle" d'en haut dans la question.
  6. redimensionner le rectangle de mugshot à l'aide de l'échelle que nous avons sauvegardée à l'étape 1.
  7. découpez la prise de vue de l'image originale et sauvegardez sur son nouvel emplacement.

Fait!

0
répondu Biff MaGriff 2011-05-03 16:27:24

je vous suggère d'utiliser le fichier haar cascade en haut du corps qui vous retournera le rectangle till shoulder. Veuillez trouver la Tête et des épaules cascade de fichier "http://alereimondo.no-ip.org/OpenCV/34"

0
répondu Rahul galgali 2015-02-25 13:21:43