¿Cómo funciona la detección de rostros?

La detección de rostros ha sido un problema resuelto desde principios de la década de 2000, pero hoy en día enfrenta algunos desafíos que incluyen encontrar rostros pequeños y detección en tiempo real en la CPU sin código oscuro y no portátil.

La técnica más utilizada es una combinación de histograma de gradientes orientados (HOG para abreviar) y Support Vector Machine (SVM) que logran relaciones de detección mediocres a relativamente buenas (no en tiempo real, al menos en la CPU) dada una imagen de buena calidad. Así es como funciona el algoritmo:

  • Dada una imagen de entrada, calcule la representación piramidal de esa imagen, que es una pirámide de versión derribada a escala múltiple (tal vez gaussiana) de la imagen original. Para cada entrada en la pirámide, se utiliza un enfoque de ventana deslizante. El concepto de ventana deslizante es bastante simple. Al recorrer en bucle una imagen con un tamaño de paso constante, se extraen pequeños parches de imagen, típicamente de un tamaño de 64 x 128 píxeles a diferentes escalas. Para cada parche, el algoritmo toma una decisión si contiene una cara o no. El HOG se calcula para la ventana actual y se pasa al clasificador SVM (lineal o no) para que se tome la decisión (es decir, cara o no). Cuando se realiza con la pirámide, generalmente se realiza una operación de supresión no máxima (NMS para abreviar) para descartar rectángulos apilados. Puede leer más sobre la combinación HOG / SVM aquí.
  • En Symisc pronto lanzaremos un marco de detección de objetos integrados de propósito general (incluida la detección de rostros) que logra un rendimiento en tiempo real en la CPU utilizando una combinación de redes neuronales y forestales aleatorias: https://github.com/symisc.
  • Puede leer más sobre la combinación HOG / SVM aquí.

PixLab, donde actualmente trabajo, viene con muchos comandos que te permiten realizar operaciones en caras. Estos incluyen:

  • facedetect: se utiliza para la detección de rostros.
  • marcas faciales: se utilizan para extraer rasgos faciales como los ojos , los huesos y las coordenadas de la boca .
  • facecompare: para comparación cara a cara. En otras palabras, se usa para el reconocimiento.
  • facelookup: ¡encuentra la cara de una persona en una multitud de personas!

Espero que esto ayude.

Hay algunos enfoques diferentes. Para nombrar solo dos son los clasificadores en cascada de Haar y las redes neuronales convulsoras. Esencialmente, al mostrar al algoritmo de aprendizaje automático muchos ejemplos de imágenes con o sin caras, el algoritmo “aprende” lentamente las características abstractas. Esto puede ser más evidente con las redes neuronales profundas ya que las diferentes capas pueden recoger progresivamente características más reconocibles.

Es importante distinguir la detección de rostros del reconocimiento de rostros. El reconocimiento de rostros en realidad se puede hacer calculando la diferencia entre dos imágenes de un rostro con al menos uno conocido.

Aquí hay un código de muestra usando los clasificadores en cascada de Haar: https://github.com/Shumakriss/bu