2012-05-29 15 views
6

Desidero un modo per tenere traccia di un utente che guarda uno schermo nel tempo.Software di rilevamento del volto su mac (nella fotocamera di costruzione)

E.g. in uso normale quali secondi esatti del giorno l'utente ha guardato lo schermo.

Mi chiedo quali idee innovative o software pre-esistenti mi consentano di fare questo.

Quindi per ulteriori dettagli il modo in cui lo vedo è che ci sarebbero alcuni livelli di tolleranza, ad es. distanza dallo schermo, angolo di testa a schermo che sarebbe considerato "impegnato" con il monitor. Se la fotocamera diceva che un mac book pro era usato per tracciare questo, registrerebbe in un file di testo/valore chiave un timestamp e un valore booleano per ogni secondo del tempo in cui il programma è acceso.

Qualcuno ha esperienza con questo genere di cose?

risposta

6

si può trovare un buon punto di partenza qui: http://code.google.com/p/ehci/

Si tratta di un software basato su OpenCV che tiene traccia di testa e rilevare il suo orientamento. È opensource.

+0

sfortunatamente, questo non sembra essere pronto per mac. Certo, potrei provare a lavorare su iOS, ma idealmente vorrei evitarlo. –

+0

ma cerca di registrare esattamente ciò di cui ho bisogno. –

+0

Puoi cercare nel codice ciò di cui hai bisogno. Il codice è un po 'confuso (una sorta di software Frankenstein), ma dovrebbe funzionare con iOS con un po' di lavoro. –

1

Face.com ha una soluzione per ricongiungere i volti. Quindi prendi l'input della telecamera e invialo ai loro server, immagino?

+2

Sembra suggerire che accetta solo foto anziché video. Ora mi rendo conto che il video è solo una sequenza di foto, ma sembra che ci sia un sacco di lavoro per spogliarlo con il tempo e inviare a lì l'API per ottenere risultati. –

3

Ci sono implementatori di facetrackers (e già addestrati con i marcatori), ad esempio in OpenCV. Ti suggerisco di iniziare innanzitutto con il rilevamento dei volti. Una volta che hai un robusto facetracker, puoi generare un output che indica per quanto tempo un volto ha guardato lo schermo, ecc.

In seguito puoi aggiungere miglioramenti. Una volta rilevato un volto, puoi provare a riconoscere le persone che analizzano i pixel del viso.

Un'altra linea è quello di riconoscere le parti del viso, come la bocca, gli occhi, il naso, le sopracciglia ...

Se è possibile monitorare viso e parti del viso, si può provare a riconoscere i modelli di espressione del viso, come felicità, tristezza, ecc.

1

Ho costruito un sistema di rilevamento del volto per fare qualcosa del genere una volta utilizzando OpenCV, è possibile vedere il risultato here.

Il metodo che ho utilizzato è stato due usi separati di haarTraining con lo standard incorporato nei classificatori OpenCV. Ho usato il classificatore chiamato haarcascade_frontalface_default.xml per vedere se un utente sta guardando lo schermo e haarcascade_profileface.xml per vedere se l'utente stava guardando altrove. Il seguente codice dovrebbe iniziare a utilizzare openCV e C++.

CvHaarClassifierCascade *cascade_face; 
CvMemStorage   *storage_face; 
CvHaarClassifierCascade *cascade_profile; 
CvMemStorage   *storage_profile; 

//profile face 
storage_profile = cvCreateMemStorage(0); 
cascade_profile = (CvHaarClassifierCascade*)cvLoad("haarcascade_profileface.xml", 0, 0, 0); 
cvHaarDetectObjects(frm, cascade_profile, storage_profile, 1.1, 2, CV_HAAR_DO_CANNY_PRUNING); 

//frontal face 
storage_face = cvCreateMemStorage(0); 
cascade_face = (CvHaarClassifierCascade*)cvLoad("haarcascade_frontalface_default.xml", 0, 0, 0); 
cvHaarDetectObjects(frm, cascade_face, storage_face, 1.1, 2, CV_HAAR_DO_CANNY_PRUNING); 

//detect profiles 
CvSeq *profile = cvHaarDetectObjects(img,cascade_profile, storage_profile, 1.1,3,0,cvSize(20, 20)); 

for(i = 0 ; i < (profile ? profile->total : 0) ; i++) { 
    CvRect *r = (CvRect*)cvGetSeqElem(profile, i); 
    //draw rectangle here, or do other stuff 
} 

//detect front 
CvSeq *faces = cvHaarDetectObjects(img,cascade_face, storage_face, 1.1,3,0,cvSize(20,20)); 

for(i = 0 ; i < (faces ? faces->total : 0) ; i++) { 
    CvRect *r = (CvRect*)cvGetSeqElem(faces, i); 
    //draw rectangle here, or do other stuff 
} 
Problemi correlati