3.2 Detección de caras. Haarcascade

Vamos avanzando en la programación y ahora toca la búsqueda por sistemas de patrones.

El sistema de Haar-cascade es la búsqueda por patrones.

EL haarcascade es un fichero .XML generado a partir de unos cientos de fotos qe contienen el objeto a buscar.
En nuestro caso hemos usado un patrón de caras.

Aquí podemos encontrar toda la teoría para entender el funcionamiento de haarcascades

Todo funciona en base al obejto

CascadeClassifier

CascadeClassifier(const string& filename)

donde el filename es nuestro fichero .xml con los patrones entrenados.

 

La función para búsqueda es muy sencilla

detectMultiScale(const Mat& image, vector<Rect>& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size())

Lo que hace es devolvernos un rectángulo con la posición de cada uno de los objetos detectados.


int detectarElementos(const Mat &img, CascadeClassifier cascade, vector<Rect> &elementos)
{
int resultado = 0;
cascade.detectMultiScale(img, elementos, 1.1,5,0,Size(40,40));
resultado = elementos.size();
return resultado;
}

&nbsp;

Una vez detectados los objetos podremos trabajar con cada uno por separado.


void mostrarResultado(Mat &img, vector<Rect> &elementos)
{

for (size_t i=0; i< elementos.size();i++)
{
rectangle(img,elementos[i],RED);
ponerOjos(img,elementos[i],BLUE);
ponerNariz(img,elementos[i],RED);
ponerBoca(img,elementos[i],PURPURA);

}
}

 

shot0003

 

Hagamos el ejercicio.