2009-05-25 11 views
19

Estoy buscando un algoritmo/biblioteca robusto de detección de rostros, preferiblemente en C (C++ también está bien; otros idiomas que puedo transferir si es necesario). He utilizado la implementación de OpenCV en el pasado, pero no creo que sea invariable con la rotación. No necesita ser en tiempo real, pero tampoco debe ser tremendamente lento (tal vez uno o dos segundos por foto está bien). Buscando alta confiabilidad, y no muchos falsos positivos. ¿Alguien sabe de alguna buena implementación?Detección de rostros robustos en C/C++?

+4

@mark: "Puedes tenerlo rápido, barato o preciso; elige cualquiera de los dos", parece sinceramente que estás pidiendo la luna. – Tarrant

+5

@Wergan: I * no * pedí rápido y barato. La detección precisa de rostros se puede realizar en menos de 50 ms. Dije que puede llevar hasta 2000. Eso no es pedir mucho. – mpen

+1

El reconocimiento de patrones es un tema MUY difícil, especialmente si trabajas desde una vista de ángulo único como una fotografía. Será un éxito imprevisto: (razonablemente) está bien para los tiros; (imposiblemente) difícil para las tomas de multitudes a todo color. – slashmais

Respuesta

9

Mira lo que en OpenCV Wiki sobre la detección de rostros utilizando Haar-like features.

@floppydisk: el mismo tipo publicó otra project implementando estas características similares a Haar para la detección de rostros.

El concepto no es difícil de entender y que incluso podría aplicar por sí mismo. Quizás la parte más difícil es la construcción de la cascada de impulsado clasificadores (! Pero OPENCV tiene todo eso implementado fácilmente)

Algunos otros métodos que se pueden utilizar en la detección de rostros que se pueden hacer invariante a afín transformaciones incluyen:

  • Eigenfaces con SVD/PCA
  • descriptores de Fourier
  • Los modelos estadísticos de forma (this paper en particular)
1

La única cosa que he trabajado es Visionics FaceIt. Funcionó bastante bien, pero lo último que supe fue muy, muy, muy lejos de ser libre (ya sea como en la cerveza o en el habla).

+1

Debería haber mencionado "gratis" también es bueno. FaceIt parece ser un software de reconocimiento facial .... Estoy buscando un algoritmo de código abierto. – mpen

5

Usted podría tratar de echar un vistazo a esta biblioteca:

http://vasc.ri.cmu.edu/NNFaceDetector/

Se nota en uno de los casos de prueba caras que se rotan. Como puede ver, se hizo como una disertación, por lo que también puede leer ese documento, si lo desea.

+0

Hm ... solo aproximadamente el 80% de recuperación, pero bajos falsos positivos (alta precisión). No estoy seguro si eso es bueno o no? Oh, bueno, esto es lo suficientemente bueno para empezar si puedo hacer que compile. Gracias :) – mpen

+0

- la alta precisión es más importante para mí de todos modos. El 20% restante se puede etiquetar manualmente si es necesario, pero me hubiera dado cuenta de que ahora podríamos obtener tasas por encima del 95%. Quizás estoy equivocado. – mpen

+0

Bien, esto no le gusta compilar en Ubuntu de 64 bits. – mpen

2

En Over Code Project, alguien publicó un detailed description de un proyecto para reconocimiento facial, así como también un código fuente C++ para el proyecto y enlaces a las bibliotecas que utilizó. Su algoritmo se enfoca en usar las diferencias de color para encontrar parches de piel y luego probar para ver si las imágenes de 19x19 píxeles coinciden con las caras. No estoy familiarizado con todas las bibliotecas para el reconocimiento facial, pero leyendo algunos de sus códigos, muchos de los métodos y funciones tienen CV en el nombre, por lo que puede estar usando la biblioteca OpenCV pero no estoy familiarizado con ella, así que ' m no estoy 100% seguro. Sin embargo, proporciona muchas explicaciones sobre su aplicación y los archivos fuente, por lo que puede ser un buen punto de partida.

+1

Podría estar tratando de construir su propia biblioteca de cv. Pensé que podría haber estado arrancando partes de opencv, pero nada realmente indica eso. Presume 98% de precisión, pero eso fue principalmente entrenado y probado en su propia cara, por lo que no es mucho decir. No menciona nada sobre la rotación ... Me gustaría que me diera una evaluación más detallada. Las curvas de recuperación de precisión son impresionantes. Oh, bueno, gracias por esto. Puedo intentarlo también ... podría ser muy bueno para todo lo que sé. – mpen

+1

Tengo mejores estadísticas que el tipo que afirma el 98% de precisión. 99.99999999999% está mintiendo o ha sido entrenado. El reconocimiento facial no es tan preciso, incluso los mejores sistemas no son tan precisos. – monksy

3

Marcos - que dicen que OpenCV puede no ser invariantes a la rotación

Lo que le impida hacer cuatro compara, girando 90 ° después de cada comparación?

+0

Nada evitaría eso. Esta es una respuesta válida;) – mpen

1

No he utilizado las funciones de Haar para la detección de rostros, pero por lo que recuerdo, podría ser más efectivo para detectar un rostro que los propios/pca.

se han topado con la cuestión acerca de los problemas de rotación con la cara. Mi pensamiento es que tal vez podrías probar la coincidencia de formas e intentar corregir el objeto. Pruebe y oriéntelo para la relación de aspecto normal de la cabeza.Nunca llegué tan lejos en mi proyecto con Eigenface, pero déjame saber cómo funciona. Eso debería ser fácil en Matlab. : P

Cuestiones relacionadas