8
votes

Détection de visage lente sur OpenCV?

J'ai compilé et installé OpenCV (dernière version de la SVN) sur Mac OS X (ceci est peut-être la source du problème).

L'échantillon fonctionne, mais la la détection de visage l'algorithme semble lent pour moi. Le temps de détection pour une face est autour 400ms (je viens d'utiliser l'exemple inclus). Le FPS est alors assez bas.

sur YouTube et tout, je vois une vidéo super fluide avec temps réel détection de visage (même sur l'iPhone), donc je me sens confondre. Je me souviens que cela étant encore plus rapide sur mon ancien PC Windows.

est 400 ms une heure de détection correcte?

Note: Mon MacBook n'est pas ancien (2009) et tout fonctionne bien. J'utilise la webcam isight (webcam intégré). Je n'ai qu'un seul visage (mon visage) sur la webcam. Et c'est à peu près au même moment s'il n'y a pas de visage.


5 commentaires

Avez-vous compilé avec OpenMP activé? Ça craint sans elle.


Je compile avec la configuration par défaut (donc je n'ai aucune idée). Est-ce activé par défaut?


Dépend de votre compilateur, mais généralement pas. Quel est votre compilateur? Recherchez comment activer OpenMP avec elle, ré-compiler et essayer cela.


J'ai lu sur la mise à jour OpenCV 2.1: "OpenCV a été complètement commutée d'OpenMP en TBB", je suppose donc que je ne devrais pas m'inquiéter à ce sujet alors, étant donné que j'utilise la dernière version SVN? (Link: opencv.willowgarage.com/wiki/opencv%20 Monthly )


Ah désolé. Cela fait longtemps que j'ai utilisé OpenCV. Donc, je pense que la prochaine chose serait de regarder la documentation et de voir si aucun pré-dépannage définit, vous devez faire pour dire à OpenCV que vous devez utiliser TBB. Je serai en mesure d'aider à regarder plus tard. En outre, mettez @gman sur les choses, donc je serai averti que vous avez répondu.


6 Réponses :


9
votes

Quelle est la taille de l'image d'entrée. Je devine 640x480. Généralement, les personnes qui posent des vidéos YouTube redimensionnent l'image à 160x120. En résolution complète de 640x480, il est très difficile d'obtenir plus de 2-3 fps. Essayez d'envoyer une image 160x120. Vous devriez avoir au moins 10fps.


2 commentaires

Merci, c'est un bon conseil. Ce projet est fait une pause pour le moment, mais +1 pour la réponse.


Je suis actuellement en train d'exécuter la détection de visage sur un flux de webcam FullHD en direct. Décalage vers le bas de la vidéo à 480x270 et faire la détection de visage à des tarifs interactifs (20-40ms) sur mon Corei7 avec OpenCV 1.0.



1
votes

J'avais le même problème, sur une machine à quad à 4 Go de RAM de 4 Go était de 500 ms par détection, mais j'ai remarqué qu'il y a une option d'échelle ... Obtenir cela à:

./ Facedetect --Cale = 4

Je reçois des taux de détection de <20ms

espère que cela aide,

keukpa


1 commentaires

Mettre à l'échelle = 4 est faux !! L'échec de l'échelon dénote la mise à la terre avec laquelle vous souhaitez modifier la rechercheWindowsize ... signifie, supposons que vous recherchiez dans une fenêtre de taille 1 * 100, la prochaine fois que vous rechercherez Windowsize = 1 * 400 .... et donc nous jouons moins Les itérations mais aussi nous pouvons manquer des visages qui se trouvent entre deux. Par défaut, par défaut, près de 1.1 signifie changer la taille de la fenêtre de 10%.



4
votes

Ajout aux réponses précédentes:

Vous pouvez également accélérer les choses en réglant le max et surtout la taille minimale pour détectemulcale .

[En outre, comme indiquent les réponses précédentes, la mise à l'échelle lourde est en ordre que Haar Détecteur utilise des caractéristiques très simples (pour les relations allant jusqu'à 6 pixels; sur des échelles plus grandes, vous additionnez des zones de type rectangle comme si c'était juste un pixel). SUR STANDARD MAC / MBP2011, je pourrais avoir environ 60fps qui est plus que suffisant.]

Pour une accélération encore meilleure, vous pouvez également éliminer les zones non changeantes, à l'aide de TemplateMatching.


0 commentaires

1
votes

Lorsque vous courez sur l'image, vous devez réduire les limites de certaines limites. En cas de vidéos, ainsi que de détection de visage, vous pouvez également essayer de suivre. Vous pouvez faire la détection face à chaque autre cadres et suivre la position de visage entre les cadres.

En outre, OPENCV prend en charge l'utilisation de Canny pour supprimer les régions où les chances de trouver un visage n'en sont pas.


0 commentaires

4
votes

Récemment, j'avais trouvé un Library SIMD , qui a un Mise en œuvre de Haar et de classificateurs de cascade de LBP. Il peut utiliser des Casscades Standard Haar et LBP d'OPENCV. Cette implémentation a des optimisations SIMD avec l'utilisation de SSE4.1, AVX2 et néon (bras), de sorte qu'il fonctionne dans 2 à 3 fois plus rapidement que la mise en œuvre d'Occenv.


0 commentaires

0
votes

J'ai redimensionné le cadre dans la séquence vidéo avec le facteur de 10 et cela fonctionne bien. Également pour un processus plus rapide, utilisez fort> détecteur de visage fort> dans chaque image x code>, puis utilisez Face Face Tracker strong> dans X-1 CODE> Cadres Entre ( pour éviter de dériver em>).

Checkout Ce lien: Suivi VS Détection de P>


Et peut-être aussi un code exemple aide quelqu'un (c'est un simple détection pas em> le suivi ou em > Reconnaissez): p>

Ceci est l'exemple Android strong> mais il est à peu près similaire à OpenCV pour d'autres plates-formes et langues " p>

public Mat proc(Mat mRgba, Mat mGray, int resizeFactor) {
MatOfRect faces = new MatOfRect();
        if (mJavaDetector != null)
            mJavaDetector.detectMultiScale(mGray, faces, 1.1, 2, 2, new Size(0,0), new Size());//change this according to your usage-> Size(0, 0)

        Rect[] facesArray = faces.toArray();
        for (Rect rect : facesArray) {
            Point t1 = rect.tl();
            t1.x *= resizeFactor;
            t1.y *= resizeFactor;
            Point br = rect.br();
            br.x *= resizeFactor;
            br.y *= resizeFactor;
            Imgproc.rectangle(mRgba, t1, br, FACE_RECT_COLOR, 3);
        }

        return mRgba;
    }


0 commentaires