2013-04-02 5 views
1

J'ai réussi à effectuer une simple détection et un suivi du visage et des yeux. Ce n'est pas trop précis mais ça marche. Je me demandais s'il y avait un moyen dans la bibliothèque OpenCV où je pourrais extraire les coordonnées des yeux et du visage quand il se déplace et l'imprimer dans la console en temps réel. Ou peut-être même enregistrer ces coordonnées dans un fichier de sortie.Impression de coordonnées oculaires grâce au suivi OpenCV

UPDATE (code pour le visage et la détection des yeux):

int detect(IplImage* img, const char* cascade_name) {

static CvMemStorage* storage = 0; 

static CvHaarClassifierCascade* cascade = 0; 

int scale = 1; 
int i; 
IplImage* temp = cvCreateImage(cvSize(img->width/scale,img->height/scale), 8, 3); 

//Load Cascade

cascade = (CvHaarClassifierCascade*)cvLoad(cascade_name, 0, 0, 0); 

if(!cascade) 
{ 
    fprintf(stderr, "ERROR: Could not load classifier cascade!\n"); 
    return 0; 
} 


storage = cvCreateMemStorage(0); 
cvClearMemStorage(storage); 
int faceDetected = 0; 
if(cascade) 
{ 
    //In case there is more than one face 
    CvSeq* faces = cvHaarDetectObjects(img, cascade, storage, 
             1.1, 2, CV_HAAR_DO_CANNY_PRUNING, 
             cvSize(40, 40)); 

    faceDetected = (faces ? faces->total : 0); 

    for(i = 0; i < (faces ? faces->total : 0); i++) 
    { 

     CvRect* r = (CvRect*)cvGetSeqElem(faces, i); 

//Maybe this is where I get the coordinates?

 pt1.x = r->x*scale; 
     pt2.x = (r->x+r->width)*scale; 
     pt1.y = r->y*scale; 
     pt2.y = (r->y+r->height)*scale; 

//Draw rectangle over face

 cvRectangle(img, pt1, pt2, CV_RGB(255,0,0), 3, 8, 0); 

    } 
} 
cvReleaseImage(&temp); 
return faceDetected; 

}

+0

oui vous pouvez. pas besoin de s'interroger. – Barshan

+0

J'aurais dû être plus direct. Ma question est comment? Quelles méthodes devrais-je appeler pour le faire. J'ai essayé de regarder les documents OpenCV et je n'ai rien trouvé de plus simple pour moi. Je suis nouveau à la vision par ordinateur FYI. –

+0

montrez-moi la fonction dans votre code qui détecte les yeux ou le visage – Barshan

Répondre

3

Peut-être c'est ce que vous voulez:

for(i=0 ; i< faces->total; i++) 
{ 
CvRect* r = (CvRect*)cvGetSeqElem(faces, i); 
printf("(%d %d) , (%d %d) ", r->x, r->y, r->x + r->width, r->y + r->height); 
} 
+0

Génial. Cela va sûrement aider. J'ai une autre question concernant OpenCV. J'ai été capable de tout faire en temps réel. Mais parfois ça devient vraiment lent, mon ordinateur n'est pas très puissant quand il s'agit de gérer des vidéos haute résolution affichées en temps réel sur l'écran. Existe-t-il un moyen de réaliser le suivi sur une vidéo d'entrée, quelqu'un peut-il me guider à travers la documentation sur la façon de le faire? Est-ce aussi efficace? Merci! –

0

This est une simple détection de visage construit en OpenCV. Ils détectent les yeux dans les visages avec un autre CascadeClassifier. Vous pouvez télécharger la liste des CascadeClassifiers existants de opencv repository et les utiliser pour vos besoins. Si aucun d'eux ne répond à vos exigences, vous pouvez toujours former votre propre classificateur, par exemple this tutorial.

Questions connexes