2012-06-10 17 views
10

Sto sviluppando un'applicazione per iOS che deve rilevare quando l'utente sbadiglia.Come rilevare lo sbadiglio utilizzando Open CV

Quello che ho fatto è includere Open CV e trovare facce usando una cascata di haar, e quindi trovare la bocca all'interno delle facce (anche usando una haarcascade).

Il problema che ho è che credevo che sarebbe stato così facile rilevare uno sbadiglio come fare qualcosa come (face.y - mouth.y) < qualcosa = sbadiglio.

Ma il problema che ho è che i rettangoli per il viso e la bocca sono "inestables", voglio dire ogni volta che il ciclo viene eseguito valori X e Y per i rettangoli di viso e della bocca sono (obviusly) non è la stessa.

C'è una cascata di haar a "bocca aperta" che posso utilizzare, o come posso sapere quando l'utente apre la bocca?

+0

Si può notare come un esempio di riconoscimento di espressioni facciali, che sono per lo più eseguite utilizzando SVM. Quindi, googling su questa strada può darti dei buoni risultati. –

+1

Cosa succede se l'utente copre la bocca mentre sbadiglia? – Hassan

+2

@Hassan invia loro un elettroshock anche per questo! :) – kenny

risposta

11

Come un generale, Support Vector Machine (SVM) viene utilizzato per il riconoscimento espressione facciale come la rabbia, il sorriso, sorpresa, ecc dove ancora attivo lo sviluppo avviene. Googling ti dà molti articoli su questo argomento, (anche uno dei miei compagni di classe ha fatto questo come suo progetto per l'ultimo anno). Per questo, in un primo momento è necessario addestrare l'SVM e per fare ciò, è necessario disporre di immagini di esempio di sbadigli e volti normali.

Sbadigliare è quasi simile alla sorpresa, in cui la bocca aperta su entrambi i casi. Vi consiglio di controllare il pagina 3 di sotto della carta: Real Time Facial Expression Recognition in Video using Support Vector Machines (Se non è possibile vedere il link, Google in base al nome della carta)

Il documento (anche il mio compagno di classe) utilizzato vettore spostamento delle caratteristiche facciali. Per questo, trovi alcuni punti caratteristica sul viso. Ad esempio, nella carta, hanno usato la pupilla dell'occhio , i punti estremi dei coperchi, la punta del naso, i punti estremi della bocca (labbra) ecc. Quindi tracciano continuamente la posizione delle caratteristiche e trovano la distanza euclidea tra di loro. Sono utilizzati per addestrare l'SVM.

Partenza seguito due documenti: immagine Osservi

Feature Points Extraction from Faces

Fully Automatic Facial Feature Point Detection Using Gabor Feature Based Boosted Classifiers

sotto di quello che voglio dire con punti caratteristici sul viso:

enter image description here

Nel tuo caso , penso che tu sia impl caricarlo in iPhone in tempo reale. Quindi potrebbe essere possibile evitare punti caratteristici agli occhi (anche se non è una buona idea, dal momento che quando sbadigli, gli occhi diventano di piccole dimensioni). Ma rispetto ad esso, i punti caratteristica delle labbra mostrano più variazioni e predominanti. Quindi, implementare solo il labbro può far risparmiare tempo. (Beh, tutto dipende da te).

Lip Segmentazione: E 'già discusso in SOF e check out questa domanda: OpenCV Lip Segmentation

E, infine, io sono sicuro che si può trovare un sacco di dettagli sul googling, perché si tratta di un'area di sviluppo attivo, e molti documenti sono là fuori.

Un'altra opzione:

Un'altra opzione in questa regione, che ho sentito più volte, è Active Appearance Model. Ma non ne so nulla. Google tu stesso.

+0

Questi concetti sono lontani da me :) Ma mi sono risolto in questo modo con il haar cascate: prima cerco facce, all'interno dei volti cerco la bocca. La bocca si trova quando le labbra non sono aperte. Quindi se ho trovato una bocca e più tardi non riesco più a trovare la bocca, suppongo che l'utente abbia sbadigliato. NON è perfetto, non è nemmeno bello, ma ha risolto ciò di cui avevo bisogno per sviluppare la mia applicazione. – FreelanceAr

+0

Il metodo che ho detto non è così lontano. Questo è stato fatto dal mio amico in MATLAB quando siamo studenti. E anche tutte le funzioni sono implementate in OpenCV. Nessun problema, la tua è una scelta. ho appena sottolineato questo metodo. buona fortuna –

+0

Thnanks @Il problema è che non ho alcuna idea di SVM e nemmeno di Open CV, solo le basi: D ma è davvero interessante quindi dopo questo progetto cercherò un po 'di più per fare un "buono" "implementazione di questo. E anche questo knowlegde ha molteplici usi, ad esempio la realtà aumentata, e può essere implementato quasi ovunque con Open CV (Android, iOS, Desktop, ecc.). Quindi in futuro cercherò di più sui metodi che mi hai detto. Grazie ancora! – FreelanceAr

0

OpenCV dispone anche di funzionalità di riconoscimento/rilevamento facciale (vedere gli esempi forniti con l'SDK openCV). Penso che questi sarebbero un posto migliore dove guardare, poiché haar cascade non analizza realmente le espressioni facciali nel modo in cui ne hai bisogno. Prova a eseguire gli esempi e vedere di persona: otterrai dati in tempo reale sugli occhi/bocca rilevati e così via.

Buona fortuna

Problemi correlati