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)?
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:
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.
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.
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