Stap 4: Haar Cascades--verzamelen de positieven
Dit is waar we samenkomen ongeveer 1000 beelden van onze telefoon. Sommige mensen gebruiken video, sommige mensen gebruiken scripts... we scripts gebruikt.
1. foto 's
Dit is waar we nemen foto's van onze telefoon. We hoeven niet 1000 van hen. Ergens tussen 15 en 20 zou voldoende moeten zijn. Dit is wat onze beelden leek:
Aangezien ons doel vrij zwart is, we gebruikt een witte achtergrond, en nam hoog contrast foto's om de volgende stap te vergemakkelijken. Ook de foto's niet hoeven te worden groot omdat OpenCV ze hoe dan ook krimpen zal: onze 1024 × 773 waren.
2. proces
Dit is waar we gebruik maken van een verwerking script te lezen van de beelden en markeren waar het object zich. Aangezien we hoog contrast en een witte achtergrond gebruikten, is het vrij gemakkelijk te krijgen van een eerste gok door gewoon het bijhouden van de min/max x - en y-posities van donkere pixels. Wat is hier belangrijk is om ervoor te zorgen dat de hoogte-breedteverhouding van alle gemarkeerde objecten hetzelfde is. In ons geval, dit was 1:1, en het script zorgt ervoor dat alle gemarkeerde afbeeldingen volgen dat:
Naast de afbeelding bijsnijden, spuugt het Processing script ook naar een tekstbestand met informatie over waar het object zich op de oorspronkelijke afbeelding. Dit is wat Naotoshi noemen een Beschrijving-bestandsindeling.
3. maken 100s
Dit is waar we venture van Naotoshi... Wij Voer eerst de volgende opdracht voor elk van onze bijgesneden beelden:
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
Wanneer cropped00.jpg is één van de bijgesneden beelden uit het Processing script, negatives.txt is de collection-bestand voor de negatieve beelden, cropped00.txt is waar het hulpprogramma opencv_createsamples haar beschrijving uitvoerbestand zal schrijven.
Hierdoor genereert u 128 beelden door het plaatsen van een iets gedraaid en iets lichter/donkerder versie van cropped00.jpg op de top van een willekeurig geselecteerde negatief beeld. En omdat we een witte achtergrond gebruikt toen we onze foto's, 255 opgeven als de bgcolor - de wit op de bijgesneden afbeelding transparant maakt, geeft ons 128 beelden als deze:
Met deze opdracht genereert ook een van het beschrijvingsbestand met informatie over waar de mobiele telefoon in elk van de 128 beelden is.
4. Maak 1000s
Als we 15 foto's hadden, zou de vorige stap uitvoeren op elk van hen hebben geproduceerd 1920 foto's van mobiele telefoons, zwevend op willekeurige plaatsen. Wat wij moeten doen is nu allemaal in een enkele .vec bestand verzamelen voordat we de opleiding hulpprogramma kunt uitvoeren.
Eerst, verzamelen we alle 15 Beschrijving bestanden tot één, door het uitvoeren van deze opdracht:
cd sampleImageDirectory
cat cropped*.txt > positives.txt
Dan kunnen we ze allemaal combineren in een enkele .vec-bestand met behulp van deze opdracht:
opencv_createsamples -info sampleImageDirectory/positives.txt \
-bg negativeImageDirectory/negatives.txt \
-vec cropped.vec \
-num 1920 -w 48 -h 48
Dit zal leiden tot 1920 bijgesneden beelden van de telefoon van de cel, waar elk iets anders wordt gedraaid, en met een andere achtergrond.