2010-09-21 5 views
6

Ho compilato e installato OpenCV (ultima versione da SVN) su Mac OS X (questa è forse la fonte del problema).Rilevamento di volti lenti su OpenCV?

L'esempio funziona, ma l'algoritmo di rilevamento del fronte mi sembra lento. Il tempo di rilevamento per un volto è di circa 400ms (ho usato l'esempio incluso). L'FPS è quindi piuttosto basso.

Su YouTube e tutti, vedo un video super-liscio con in tempo reale rilevamento dei volti (anche su iPhone), quindi mi sento confuso. Ricordo che è ancora più veloce sul mio vecchio PC Windows.

400 ms è un tempo di rilevamento corretto?

Nota: il mio Macbook non è vecchio (2009) e tutto funziona perfettamente. Io uso la webcam iSight (webcam integrata). Ho solo una faccia (la mia faccia) sulla webcam. Ed è all'incirca nello stesso tempo se non c'è una faccia.

+1

Hai compilato con OpenMP abilitato? Fa schifo senza di essa. – GManNickG

+0

Compilare con la configurazione di default (quindi non ne ho idea). È abilitato di default? –

+0

Dipende dal compilatore, ma in genere no. Qual è il tuo compilatore? Cerca come abilitare OpenMP con esso, ricompilalo e provalo. – GManNickG

risposta

5

Qual è la dimensione dell'immagine in ingresso. Sto indovinando 640x480. Generalmente le persone che pubblicano video di YouTube ridimensionano l'immagine a 160x120. A piena risoluzione di 640x480 è molto difficile ottenere più di 2-3 fps. Prova a inviare un'immagine 160x120. Dovresti ottenere almeno 10 fps.

+0

Grazie, questo è un buon consiglio. Questo progetto è in pausa per ora, ma +1 per la risposta. –

+0

Attualmente sto eseguendo il rilevamento del volto su un live streaming webcam FullHD. Ridimensionando il video a 480x270 e facendo il rilevamento del volto viene eseguito a velocità interattive (20-40 ms) sul mio Corei7 con OpenCV 1.0. – rotoglup

0

ho avuto lo stesso problema, su una macchina quad-core con 4GB di RAM è di 500 ms per il rilevamento, però ho notato che c'è un opzione Scala .... ottenere questo a:

./facedetect - -scale = 4

ricevo tassi di rilevamento di < 20ms

Speranza che aiuta,

Keukpa

+2

Putting Scale = 4 è sbagliato !! il fattore di scala denota la procedura con cui si desidera cambiare searchWindowSize ... significa, supponiamo inizialmente di cercare con una finestra di dimensione 1 * 100, la prossima volta si cercherà con windowSize = 1 * 400 .... e quindi eseguiremo meno iterazioni ma potremmo anche perdere volti che si trovano tra due. Passaggi predefiniti vicino a 1.1 che significa modificare le dimensioni della finestra del 10%. –

3

In aggiunta al pre Vere risposte:

è anche possibile velocizzare le cose impostando il valore massimo e, soprattutto, la dimensione minima per detectMultiScale.

[Inoltre, come le risposte precedenti dicono, la riduzione graduale è necessaria in quanto il rilevatore Haar utilizza caratteristiche molto semplici (per le relazioni fino a 6 pixel, su scale più grandi si sommano aree rettangolari come se fosse solo un pixel). Su standard mac/mbp2011 potrei ottenere circa 60 fps che è più che sufficiente.]

Per una velocità ancora migliore, è possibile eliminare anche le aree non modificabili, ad esempio say templateMatching.

0

Quando si esegue sull'immagine, si dovrebbe downscaling a determinati limiti. In caso di video, insieme al rilevamento dei volti, puoi anche provare il tracciamento. Puoi fare il rilevamento del volto ogni fotogramma alternativo e tracciare la posizione del volto tra fotogrammi.

Inoltre, OpenCv supporta l'uso di Canny per scartare le regioni in cui le probabilità di trovare Face non sono disponibili.

3

Recentemente ho trovato uno Simd Library, che ha un implementation di classificatori a cascata HAAR e LBP. Può utilizzare casserini standard HAAR e LBP di OpenCV. Questa implementazione ha ottimizzazioni SIMD con l'utilizzo di SSE4.1, AVX2 e neon (ARM), in modo che funziona in 2-3 volte più veloce implementazione OpenCV originale.