Paso 4: Cascadas de Haar, recogiendo los aspectos positivos
Esto es donde nos reunimos alrededor de 1000 imágenes de nuestro teléfono. Algunas personas usan video, algunas personas usan scripts... utiliza secuencias de comandos.
1. cuadros
Esto es donde podemos tomar fotografías de nuestro teléfono. No necesitamos 1000 de ellos. En algún lugar entre 15 y 20 años debería ser suficiente. Esto es lo que parecían nuestras imágenes:
Puesto que nuestro objeto es bastante negro, se utilizó un fondo blanco y tomaron imágenes de alto contraste para facilitar el siguiente paso. Además, las imágenes no tienen que ser grandes porque OpenCV encogerá de todos modos: nuestros eran 1024 × 773.
2. proceso de
Esto es donde utilizamos un proceso de secuencia de comandos para leer las imágenes y marcar Dónde está el objeto. Puesto que utilizamos contraste alto y un fondo blanco, es bastante fácil obtener una suposición inicial a hacer el seguimiento de las min/max x - y y-posiciones de los píxeles oscuros. Lo importante aquí es asegurarse de que la proporción de todos los objetos marcados es la misma. En nuestro caso, este fue 1:1, y el script se asegura de que todas las imágenes marcadas seguir:
Además de recortar la imagen, la secuencia de comandos de procesamiento también escupe un archivo de texto con información sobre dónde está el objeto en la imagen original. Esto llamo Naotoshi un formato de archivo de Descripción.
3 hacer 100s
Esto es donde nos aventuramos de Naotoshi... En primer lugar, ejecute el comando siguiente para cada una de nuestras imágenes recortadas:
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
Donde cropped00.jpg es una de las imágenes recortadas de la secuencia de comandos de proceso, negatives.txt es el archivo de colección de las imágenes negativas, cropped00.txt es donde la utilidad de opencv_createsamples escribir su archivo de descripción de la salida.
Esto generará 128 imágenes colocando una versión ligeramente girada y ligeramente más brillante/oscuro de cropped00.jpg encima de una imagen negativa seleccionada al azar. Y porque se utilizó un fondo blanco cuando tomamos nuestras fotos, especificando 255 como - bgcolor hace blanco en la imagen recortada transparente, dándonos 128 imágenes como estas:
Ejecutar este comando también genera un archivo de descripción con información sobre el teléfono celular Dónde está en cada una de las 128 imágenes.
4. hacer 1000s
Si tenemos 15 imágenes, ejecuta el paso anterior en cada uno de ellos habría producido 1920 fotos de teléfonos celulares en lugares al azar. Lo que tenemos que hacer ahora es recoger todas en un archivo .vec solo antes de que podemos ejecutar la utilidad de la formación.
En primer lugar, recogemos todos los archivos de Descripción 15 en uno, ejecutando este comando:
cd sampleImageDirectory
cat cropped*.txt > positives.txt
Entonces, podemos combinar todos ellos en un archivo .vec solo usando este comando:
opencv_createsamples -info sampleImageDirectory/positives.txt \
-bg negativeImageDirectory/negatives.txt \
-vec cropped.vec \
-num 1920 -w 48 -h 48
Esto crea imágenes de 1920 recortada del teléfono celular, donde cada una se gira ligeramente diferente, y con un fondo diferente.