viola sistema rostro reconocimiento pago jones identificación haar facial explicacion eigenfaces deteccion como codigo clasificador algoritmo c++ opencv viola-jones

c++ - sistema - reconocimiento facial



¿Cómo funciona el método de detección de rostros Viola-Jones? (2)

Explíqueme, en pocas palabras, cómo funciona el método de detección de rostros Viola-Jones.


El detector Viola-Jones es una compilación de clasificador binario fuerte de varios detectores débiles. Cada detector débil es un clasificador binario extremadamente simple.

La detección consta de las siguientes partes:

Haar Filter : extraiga las características de la imagen para clasificarlas (las características actúan para codificar el conocimiento del dominio ad-hoc)

Integral Image : permite una evaluación muy rápida de las características.

Cascade Classifier : Un clasificador en cascada consta de varias etapas de filtros, para clasificar una imagen (ventana deslizante de una imagen) es una cara.

A continuación se muestra una descripción general de cómo detectar una cara en la imagen.

Una ventana de detección cambia alrededor de toda la función de extracción de la imagen (por el haar filter computarizado por Integral Image luego envía la función extraída al Cascade Classifier para clasificar si es una cara). La ventana deslizante cambia píxel por píxel. Cada vez que la ventana se desplaza, la región de imagen dentro de la ventana pasará por el clasificador en cascada.

Haar Filter : puede comprender que el filtro puede extraer características como los eyes , el bridge of the nose etc.

Integral Image : permite una evaluación muy rápida de las características.

Cascade Classifier :

Un clasificador en cascada consiste en múltiples etapas de filtros, como se muestra en la siguiente figura. Cada vez que la ventana deslizante se desplaza, la nueva región dentro de la ventana deslizante pasará por el clasificador en cascada etapa por etapa. Si la región de entrada no pasa el umbral de una etapa, el clasificador en cascada rechazará inmediatamente la región como una cara. Si una región pasa todas las etapas con éxito, se clasificará como un candidato de cara, que se puede refinar mediante un procesamiento adicional.

Para más detalles:

En primer lugar, le sugiero que lea el documento de origen Detección rápida de objetos utilizando una Cascada de características simples para obtener una descripción general del método.

Si no puede entenderlo claramente, puede ver la Detección de rostros Viola-Jones o Implementar el algoritmo de detección de rostros Viola-Jones o el Estudio del detector de rostros en tiempo real Viola-Jones para obtener más detalles.

Aquí hay una implementación en Python del algoritmo de detección de rostros por parte de Paul Viola y Michael J. Jones .

Código matlab here .


El detector Viola-Jones es una compilación fuerte y clasificadora binaria de varios detectores débiles

Each weak detector is an extremely simple binary classifier

Durante la etapa de aprendizaje, se entrena una cascada de detectores débiles para obtener la tasa de aciertos / fallos (o precisión / recuperación) deseada con Adaboost. Para detectar objetos, la imagen original se divide en varios parches rectangulares, cada uno de los cuales se envía. a la cascada

Si un parche de imagen rectangular pasa por todas las etapas en cascada, se clasifica como "positivo". El proceso se repite a diferentes escalas.

En realidad, en un nivel bajo, el componente básico de un detector de objetos es solo algo necesario para decir si una determinada sub-región de la imagen original contiene o no una identidad del objeto de interés. Eso es lo que hace un clasificador binario.

El clasificador básico y débil se basa en una característica visual muy simple (este tipo de características a menudo se denominan "características similares a Haar")

Las características similares a Haar consisten en una clase de características locales que se calculan restando la suma de una subregión de la característica de la suma de la región restante de la característica .


Estas características se caracterizan por el hecho de que son fáciles de calcular y con el uso de una imagen integral, muy eficientes de calcular.

Lienhart presentó un conjunto extendido de características similares a Haar retorcidas (ver imagen)


Estas son las características estándar de Haar que se han retorcido 45 grados. Lienhart originalmente no hizo uso de la característica similar a Haar del tablero de control torcido (x2y2) ya que los elementos diagonales que representan pueden representarse simplemente utilizando características retorcidas, sin embargo, está claro que también se puede implementar y usar una versión retorcida de esta característica. .

Estas características similares a Haar retorcidas también se pueden calcular de manera rápida y eficiente utilizando una imagen integral que se ha retorcido 45 grados. El único problema de implementación es que las entidades retorcidas deben redondearse a valores enteros para que estén alineadas con los límites de píxeles. Este proceso es similar al redondeo utilizado al escalar una característica similar a Haar para ventanas más grandes o más pequeñas, sin embargo, una diferencia es que para una característica retorcida de 45 grados, el número entero de píxeles utilizados para la altura y el ancho de la característica significa que Las coordenadas diagonales del píxel estarán siempre en el mismo conjunto diagonal de píxeles.


Esto significa que el número de características trenzadas de diferentes grados de 45 grados disponibles se reduce significativamente en comparación con las características estándar alineadas vertical y horizontalmente.

Así que tenemos algo como:

Acerca de la fórmula, el cálculo rápido de características similares a Haar con imágenes integrales se ve así:

Finalmente, aquí hay una implementación de c ++ que usa ViolaJones.h por Ivan Kusalic

Para ver el proyecto c ++ completo , entra aquí.