Pourquoi créer vos propres cascades Haar-classifier?

j'ai trouvé tutoriel sur la création de vos propres cascades haar-classifier.

cela m'a amené à me poser la question: Quels sont les avantages, le cas échéant, de faire fonctionner HaarTraining, et de créer votre propre Classificateur (par opposition à utiliser les cascades fournies par OpenCv)?

13
demandé sur Will 2011-08-29 17:28:36

2 réponses

les classificateurs en cascade Haar ou LBP sont des techniques courantes utilisées pour la détection ou les objets rigides. Voici donc deux points importants pour la formation de votre propre cascade:

  1. les Cascades venant avec OpenCV ne couvrent pas tous les types d'objets possibles. Ainsi, vous pouvez utiliser une des cascades OpenCV si vous allez créer une application de détection de visage, mais il n'y a pas prêt à utiliser cascades si vous avez besoin de détecter par exemple les chiens.

opencv_traincascade est une version plus récente et il a 2 caractéristiques importantes: il prend en charge les caractéristiques LBP et il prend en charge multi-threading (TBB). Typique différence ressemble ce

haartraining + singlecore > 3 semaines pour un classificateur.

traincascades + multicœur < 30 minutes, pour un classificateur.

Mais le pire de tout, je ne connais pas de bons tutoriels expliquant l'utilisation de opencv_traincascade. Voir ce fil pour plus de détails.

31
répondu Andrey Kamaev 2011-08-29 14:13:10

je peux vous donner un exemple Linux. Le code et les techniques ont été tirés de diverses sources. Il suit cet exemple mais avec une version python de mergevec, donc vous n'avez pas à compiler mergevec.fichier cpp.

en supposant que vous avez deux dossiers avec des images positives et négatives recadrées et prêtes (.png files dans cet exemple), vous créez deux fichiers texte avec tous les noms d'image dans:

find positive_images -iname "*.png" > positives.txt
find negative_images -iname "*.png" > negatives.txt

puis, en utilisant le createsamples.pl script fourni par Naotoshi Seo (dans le dossier OpenCV/bin), qui prend les deux fichiers texte et un dossier de sortie, et crée le .vec des fichiers:

perl createsamples.pl positives.txt negatives.txt 'output' 1500 "opencv_createsamples -bgcolor 0 -bgthresh 0 -maxzangle 0.5 -w 50 -h 50"

suivez cela avec un script python créé par Blake Wulfe appelé mergevec.py qui va créer une sortie.vec fichier en combinant tous les .fichiers vec dans le sous-dossier

python mergevec.py -v samples -o output.vec

en supposant que tout est fait, utiliser opencv_traincascade comme suit devrait aider:

opencv_traincascade -data classifier -vec output.vec -bg negatives.txt \
  -numStages 10 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 200 \
  -numNeg 400 -w 50 -h 50 -mode ALL

Si tout ce qui se passe utilisez votre nouvelle cascade (classifier / cascade.xml) avec quelque chose comme facedetect.py à partir d'échantillons opencv:

opencv-3.0.0-rc1/samples/python2/facedetect.py --cascade classifier/cascade.xml test_movie.mp4
2
répondu user3258790 2015-08-11 13:19:58