Memememe #selfie (4 / 7 steg)
Steg 4: Haar Cascades--samla positiva
Det är där vi samlas ca 1000 bilder av vår telefon. Vissa människor använder video, vissa människor använder skript... vi använt skript.
1. bilder
Det är där vi tar bilder på vår telefon. Vi behöver inte 1000 av dem. Någonstans bör mellan 15 och 20 vara tillräckligt. Detta är vad våra bilder såg ut:
Eftersom våra objekt är ganska svart, vi använde en vit bakgrund, och tog kontrastrika bilder för att underlätta nästa steg. Även bilderna behöver inte vara stort eftersom OpenCV kommer att krympa dem ändå: vår var 1024 × 773.
2. process
Det är där vi använder en skriptet att läsa bilderna och markera där objektet är. Eftersom vi använde hög kontrast och en vit bakgrund, är det ganska lätt att få en första gissning av bara att hålla reda på min/max x - och y-positionerna för mörka pixlar. Det är viktiga här att se till att proportionerna för alla markerade objekt är densamma. I vårt fall, detta var 1:1, och skriptet ser till att alla markerade bilder följa som:
Förutom att bilden beskärs, spottar bearbetningsskriptet också ut en textfil med information om var objektet finns på originalbilden. Detta är vad Naotoshi kallar en Beskrivning filformat.
3. göra 100s
Det är där vi vågar från Naotoshi... Först kör vi följande kommando för varje av våra beskurna bilder:
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
Där cropped00.jpg är en av de beskurna bilderna från bearbetning skript, negatives.txt är insamling filen för de negativa bilderna, cropped00.txt är där verktyget opencv_createsamples kommer att skriva sin beskrivning utdatafilen.
Detta genererar 128 bilder genom att placera en något roterade och något ljusare/mörkare version av cropped00.jpg ovanpå en slumpmässigt vald negativ bild. Och eftersom vi använde vit bakgrund när vi tog våra bilder, ange 255 som - bgcolor gör vita på den beskurna bilden transparent, vilket ger oss 128 bilder som dessa:
Kör det här kommandot genererar också en beskrivningsfil med information om var mobilen är i var och en av de 128 bilderna.
4. gör 1000s
Om vi hade 15 bilder, skulle kör föregående steg på varje av dem ha gett 1920 bilder av mobiltelefoner flytande i slumpmässiga ställen. Vad vi måste göra nu är att samla dem alla i en enda .vec fil innan vi kan köra verktyget utbildning.
Först, vi samlar in alla 15 Beskrivning filer till en, genom att köra kommandot:
cd sampleImageDirectory
cat cropped*.txt > positives.txt
Sedan kan vi kombinera dem alla till en enda .vec fil med kommandot:
opencv_createsamples -info sampleImageDirectory/positives.txt \
-bg negativeImageDirectory/negatives.txt \
-vec cropped.vec \
-num 1920 -w 48 -h 48
Detta kommer att skapa 1920 beskurna bilder i mobilen, där varje vrids något annorlunda, och med olika bakgrund.