jueves, 11 de diciembre de 2014

OpenCV y Python IV (Entrenamiento HAAR cascade)

En el anterior tutorial aprendimos a utilizar los clasificadores HAAR, usando los que trae por defecto OpenCV, ahora pasamos a algo más interesante, "entrenar" al software a reconocer los objetos que queremos.
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.

2 comentarios:

  1. la posición de los archivos positivos es (x,y,ancho,alto) https://docs.opencv.org/trunk/dc/d88/tutorial_traincascade.html

    tú lo mencionas al reves.

    ResponderEliminar