2010-09-21 29 views
6

Compilé e instalé OpenCV (última versión del SVN) en Mac Os X (esta es quizás la fuente del problema).Detección de rostro lento en OpenCV?

El ejemplo funciona, pero el algoritmo de detección de rostros me parece lento. El tiempo de detección para una cara es alrededor de 400ms (Acabo de utilizar el ejemplo incluido). El FPS es bastante bajo.

En youtube y todo, veo video super suave con en tiempo real detección de rostros (incluso en el iPhone) por lo que me siento confundido. Recuerdo que era aún más rápido en mi vieja PC con Windows.

¿Es 400 ms un tiempo de detección correcto?

Nota: mi Macbook no es vieja (2009) y todo funciona bien en ella. Uso la webcam iSight (cámara web integrada). Tengo solo una cara (mi cara) en la webcam. Y es más o menos al mismo tiempo si no hay cara.

+1

¿Ha compilado con OpenMP habilitado? Apesta sin eso. – GManNickG

+0

Compilo con la configuración predeterminada (así que no tengo ni idea). ¿Eso está habilitado por defecto? –

+0

Depende de tu compilador, pero normalmente no. ¿Cuál es tu compilador? Busque cómo habilitar OpenMP con él, vuelva a compilar e intente eso. – GManNickG

Respuesta

5

Cuál es el tamaño de la imagen de entrada. Supongo que 640x480. En general, las personas que publican videos de YouTube cambian el tamaño de la imagen a 160x120. En resolución completa de 640x480 es muy difícil obtener más de 2-3 fps. Intenta enviar imágenes de 160x120. Deberías obtener al menos 10 fps.

+0

Gracias, es un buen consejo. Este proyecto está pausado por ahora, pero +1 para la respuesta. –

+0

Actualmente estoy ejecutando detección de rostros en una transmisión de cámara web FullHD en vivo. Escalando el video a 480x270 y haciendo la detección de rostros se ejecuta a velocidades interactivas (20-40ms) en mi Corei7 con OpenCV 1.0. – rotoglup

0

que estaba teniendo el mismo problema, en una máquina de cuatro núcleos con 4 GB de RAM era de 500 ms por cada detección, sin embargo, me he dado cuenta de que hay una opción de Escala .... conseguir esto:

./facedetect - -scale = 4

consigo tasas de detección de < 20ms

Espero que ayude,

Keukpa

+2

Putting Scale = 4 is wrong !! scalefactor denota el tamaño de paso con el que desea cambiar searchWindowSize ... significa, supongamos que inicialmente está buscando con una ventana de tamaño 1 * 100, la próxima vez buscará con windowSize = 1 * 400 .... y así realizaremos menos iteraciones, pero también podemos perder caras que se encuentran entre dos. El tamaño de los pasos predeterminado es cercano a 1.1, lo que significa cambiar el tamaño de la ventana en un 10%. –

3

Agregando al pre vious answers:

También puede acelerar las cosas estableciendo el tamaño máximo y más importante, el mínimo para detectMultiScale.

[También, como dicen las respuestas anteriores, la reducción de escala es importante ya que el detector Haar utiliza características muy simples (para las relaciones de hasta 6 píxeles, en grandes escalas se agregan áreas rectangulares como si fuera solo un pixel). En mac/mbp2011 estándar, pude obtener alrededor de 60 fps que es más que suficiente.]

Para una aceleración aún mejor, también podría eliminar áreas que no cambian, utilizando decir templateMatching.

0

Cuando se ejecuta en la imagen, debe reducir la escala a ciertos límites. En el caso de los videos, junto con la detección de rostros, también puedes intentar rastrear. Puede hacer detección de rostros en cada cuadro alternativo y rastrear la posición de la cara entre los cuadros.

Además, OpenCv admite el uso de Canny para descartar regiones donde la posibilidad de encontrar Face es nula.

3

Recientemente he encontrado un Simd Library, que tiene un implementation de los clasificadores en cascada HAAR y LBP. Puede usar cascadas estándar HAAR y LBP de OpenCV. Esta implementación tiene optimizaciones SIMD con el uso de SSE4.1, AVX2 y NEON (ARM), por lo que funciona en 2-3 veces más rápido que la implementación original de OpenCV.

Cuestiones relacionadas