Étape 4: Haar Cascades--collecte les points positifs
C’est là où on rassemblait environ 1000 images de notre téléphone. Certaines personnes utilisent la vidéo, certaines personnes utilisent des scripts... nous avons utilisé des scripts.
1. images
C’est où nous prendre des photos de notre téléphone. Nous n’avez pas besoin de 1000 d'entre eux. Quelque part entre 15 et 20 devrait être suffisant. Voilà à quoi ressemblaient nos images :
Étant donné que notre objet est assez noir, nous avons utilisé un fond blanc et a pris des photos de contraste élevé afin de faciliter l’étape suivante. En outre, les photos pas besoin d’être grand puisque OpenCV peut réduire leur quand même : nôtre étaient 1024 × 773.
2. processus
C’est où l'on utilise une transformation de script pour lire les images et marquer où est l’objet. Puisque nous avons utilisé le contraste élevé et un fond blanc, il est assez facile d’obtenir une estimation de juste garder la trace de la min/max x - et y-positions des pixels foncés. Ce qui est important ici est de s’assurer que les proportions de tous les objets marqués est le même. Dans notre cas, c’était de 1:1, et le script s’assure que toutes les images marquées suivent qui :
En plus de rogner l’image, le script de traitement crache également un fichier texte qui contient des informations sur où l’objet est sur l’image originale. C’est ce que Naotoshi appelle un format de fichier de description.
3. faire 100 s
C’est où nous aventurer de Naotoshi... Tout d’abord, nous exécutez la commande suivante pour chacun de nos images recadrées :
opencv_createsamples -img cropped00.jpg \
-bg negativeImageDirectory/negatives.txt \
-info sampleImageDirectory/cropped00.txt \
-num 128 -maxxangle 0.0 -maxyangle 0.0 -maxzangle 0.3 \
-bgcolor 255 -bgthresh 8 -w 48 -h 48
Où cropped00.jpg est une des images recadrées depuis le script de traitement, negatives.txt est le fichier de collection pour les images négatives, cropped00.txt est où l’utilitaire opencv_createsamples va écrire son fichier de description de sortie.
Cela génèrera les 128 photos en plaçant une version légèrement pivotée et légèrement plus clair/plus foncé de cropped00.jpg sur le dessus une image négative choisie au hasard. Et parce que nous avons utilisé un fond blanc, lorsque nous avons pris nos photos, spécifiant 255 comme le bgcolor - rend le blanc sur l’image recadrée transparent, ce qui nous donne 128 photos comme celles-ci :
Cette commande génère également un fichier de description des informations sur l’emplacement du téléphone cellulaire dans chacune des 128 images.
4. faire 1000 s
Si nous avions 15 images, exécute l’étape précédente sur chacun d’eux aurait produit 1920 photos de téléphones cellulaires flottant dans des endroits aléatoires. Ce que nous devons faire maintenant est de recueillir l’ensemble d'entre eux dans un fichier unique .vec avant que nous puissions exécuter l’utilitaire de la formation.
Tout d’abord, nous recueillons tous les fichiers de description 15 en un seul, en exécutant cette commande :
cd sampleImageDirectory
cat cropped*.txt > positives.txt
Ensuite, nous pouvons tous les combiner dans un fichier unique .vec en utilisant cette commande :
opencv_createsamples -info sampleImageDirectory/positives.txt \
-bg negativeImageDirectory/negatives.txt \
-vec cropped.vec \
-num 1920 -w 48 -h 48
Cela va créer des images 1920 recadrée du téléphone cellulaire, où chacun pivote légèrement différent, et avec un fond différent.