OpenCV: comment créer un file .vec à utiliser avec opencv_traincascade

Comme je l'ai expliqué dans mon post précédent ici , j'essaie de générer des files cascade.xml pour reconnaître les pièces en euros à utiliser dans mon application iOS. Quoi qu'il en soit, je trouve beaucoup de difficultés à comprendre comment générer un file .vec à donner en input à opencv_traincascade . Ceci parce que j'ai entendu beaucoup de points de vue dissidents: quelqu'un m'a dit que le file vectoriel ne devait inclure que des images positives ne contenant que l'object à reconnaître; quelqu'un d'autre (et aussi comme lu dans mes tutoriels) a dit que le file vectoriel doit inclure des images "samples", c'est-à-dire des images randoms auxquelles l'object à reconnaître a été ajouté par opencv_createsamples . En d'autres termes avec:

opencv_createsamples -img positives/1.png -bg negatives.txt -info 1.txt -num 210 -maxxangle 0.0 -maxyangle 0.0 -maxzangle 0.9 -bgcolor 255 -bgthresh 8 -w 48 -h 48

qui a généré 12000 images. Enfin, j'ai créé le file .vec avec:

cat *.txt > positives.txt

opencv_createsamples -info positives.txt -bg negatives.txt -vec 2.vec -num 12600 -w 48 -h 48

Donc, je voudrais vous requestr quelles sont les images correctes contenues dans les files vectoriels des deux suivants:

entrez la description de l'image ici

entrez la description de l'image ici

De plus, quelle est la dernière command à donner pour lancer la formation? Ce sont ceux que j'ai utilisés jusqu'à maintenant:

opencv_traincascade -data final -vec 2.vec -bg negatives.txt -numPos 12000 -numNeg 3000 -numStages 20 -featureType HAAR -precalcValBufSize 2048 -precalcIdxBufSize 2048 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -w 48 -h 48 -mode ALL

où les files .vec contient 12000 échantillons d'images (arrière-plan + pièce à reconnaître). Si le file .vec ne contient que des images positives (uniquement des pièces de monnaie), comment dois-je dire à opencv_traincascade de s'entraîner en utilisant les images des échantillons?

J'ai vraiment besoin de savoir comment faire les choses correctement parce que j'ai lancé de nombreuses formations qui ne mènent alors à aucun résultat correct et comme elles prennent plusieurs heures ou plusieurs jours à s'exécuter, je ne peux plus perdre de time.

Merci à tous pour votre attention.

UPDATE J'ai réussi à créer un file cascade.xml avec LBP. Voyez ce qui se passe si je donne une des images utilisées comme échantillons d'entraînement à un simple programme OpenCV:

entrez la description de l'image ici

alors qu'avec une image comme celle-ci:

entrez la description de l'image ici

Ca ne fonctionne pas du tout. Je ne sais vraiment pas où je fais l'erreur.

MISE À JOUR Peut-être d'abord convertir des images positives en échelle de gris pourrait aider? entrez la description de l'image ici

Les cascades OpenCV (HAAR, LBP) peuvent parfaitement détecter les objects qui ont des caractéristiques permanentes. À titre d'exemple, tous les visages ont le nez, les yeux et la bouche aux mêmes endroits. Les cascades OpenCV sont formées pour searchr des entités communes dans la class d'object requirejse et ignorer les entités qui changent d'object en object. Le problème est de conclure que la cascade utilise une forme rectangular de window de search, mais une pièce de monnaie a une forme ronde. Par conséquent, une image de la pièce aura toujours une partie de fond. Ainsi, les images d'entraînement de la pièce doivent inclure tous les arrière-plans possibles afin que les classificateurs puissent les ignorer (sinon, ils ne détecteront la pièce que sur le fond spécifique).

Ainsi, tous les échantillons d'entraînement doivent avoir le même ratio d'image, la même taille et la même position de la pièce (images carrées avec pièce au centre, diamètre de la pièce = largeur de l'image 0,8-0,9) et différents fonds!

J'ai utilisé la database d' negative samples de la formation INRIA http://pascal.inrialpes.fr/data/human/

et cette input (png avec transparence alpha autour de la pièce):

entrez la description de l'image ici

en utilisant ceci avec cette command:

opencv_createsamples -img pos_color.png -num 10 -bg neg.txt -info test.dat -maxxangle 0.6 -maxyangle 0 -maxzangle 0.3 -maxidev 100 -bgcolor 0 -bgthresh 0

produit une sortie comme celle-ci:

entrez la description de l'image ici

entrez la description de l'image ici

donc la couleur de fond n'a évidemment pas fonctionné. Convertir en niveaux de gris au début me donne cependant cette input:

entrez la description de l'image ici

et la même command produit une sortie comme celle-ci:

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

Je sais que ce n'est pas une réponse à toutes vos questions, mais peut-être que ça aide encore.