Ya dije que hay diferentes tipos de procedimientos para localizar objetos, depende siempre de lo que queramos detectar.
OpenCV tiene dos herramientas para generar el archivo *.xml que necesitamos, las encontrareis en "OpenCV/Build/Common/x86" que es la carpeta donde trabajaremos por comodidad, los programas que usaremos son "opencv_createsamples" y "opencv_traincascade"
El procedimiento es el siguiente:
- Creamos tres carpetas, en una pondremos las imágenes negativas ( las que no pertenecen a nuestro objeto), en otra las positivas (por eliminación, las que si) y en la ultima ira a parar el archivo *.xml, la llamaremos "cascade".
- Creamos un archivo de texto, llamado "negative.txt" y en el insertamos las rutas de las imágenes negativas:
neg/neg_img1.jpg
neg/neg_img2.jpg
... - Creamos otro archivo de texto, llamado "positive.txt" y en este
hacemos lo mismo, pero indicando los siguientes argumentos: "ruta del
archivo" "numero de veces que sale el objeto en esa imagen" "posicion x
de la esquina superior izquierda" "posición y de la esquina superior
izquierda" "alto del recuadro" ancho del recuadro":
pos/pos_img1.jpg 1 675 210 400 150
- Una vez tengamos los archivos listos, cuantas más imagenes mejor funcionará, pasaremos a crear el primer archivo necesario. Para ello nos vamos a la consola y navegamos hasta la ruta de las herramientas, e introducimos:
opencv_createsamples.exe -vec bin_desc.vec -info positive.txt -bg negative.txt
Con esto generamos el archivo "bin_desc.vec", que es el que utilizamos para el próximo paso. - Aún dentro de la consola, introducimos:
opencv_traincascade.exe -data cascade -vec bin_desc -bg negative.txt - Dentro de la carpeta "cascade" se generan unos cuantos archivos, de ahi solo nos interesa "cascade.xml" que es nuestro clasificador, para probarlo simplemente usaremos el ejemplo del post anterior, en el que cambiaremos el archivo de caras, por el nuestro.
la posición de los archivos positivos es (x,y,ancho,alto) https://docs.opencv.org/trunk/dc/d88/tutorial_traincascade.html
ResponderEliminartú lo mencionas al reves.
hola te dio?
Eliminar