IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenCV Discussion :

Fichier haarcascade en une seule exécution


Sujet :

OpenCV

  1. #1
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2011
    Messages : 40
    Par défaut Fichier haarcascade en une seule exécution
    Bonjour,
    Je débute avec opencv et je teste actuellement haarcascade. Mon but est de pouvoir détecté sur une image une face, puis à l'intérieur une détection de lefteye et une seul car en principe on a qu'un oeil gauche etc..
    C'est je pense un truc simple de programmeur mais je débute, donc si on est dans face je peux mettre lefteye et qu'un seul, puis righteye , puis nose etc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    #include <stdio.h>
    #include "cv.h"
    #include "highgui.h"
     
    CvHaarClassifierCascade *cascade;
    CvHaarClassifierCascade *cascade2;
    CvMemStorage			*storage;
     
    void detectFaces( IplImage *img );
     
    int main( int argc, char** argv )
    {
    	CvCapture *capture;
    	IplImage  *frame;
    	int       key;
    	char      *filename = "haarcascade_frontalface_alt_tree.xml";
        char      *filename2 = "haarcascade_mcs_mouth.xml";
    	cascade = ( CvHaarClassifierCascade* )cvLoad( filename, 0, 0, 0 );
    	cascade2 = ( CvHaarClassifierCascade* )cvLoad( filename2, 0, 0, 0 );
    	storage = cvCreateMemStorage( 0 );
    	capture = cvCaptureFromCAM( 0 );
     
    	assert( cascade && storage && capture );
     
    	cvNamedWindow( "video", 1 );
     
    	while( key != 'q' ) {
    		frame = cvQueryFrame( capture );
     
    		if( !frame ) {
    			fprintf( stderr, "Cannot query frame!\n" );
    			break;
    		}
     
    		cvFlip( frame, frame, -1 );
    		frame->origin = 0;
     
    		detectFaces( frame );
     
    		key = cvWaitKey( 10 );
    	}
     
    	cvReleaseCapture( &capture );
    	cvDestroyWindow( "video" );
    	cvReleaseHaarClassifierCascade( &cascade );
    	cvReleaseMemStorage( &storage );
     
    	return 0;
    }
     
    void detectFaces( IplImage *img )
    {
        int i;
     
    	CvSeq *faces = cvHaarDetectObjects(
    			img,
    			cascade,
    			storage,
    			1.1,
    			3,
    			0 /*CV_HAAR_DO_CANNY_PRUNNING*/,
    			cvSize(40,40) );
     
    	for( i = 0 ; i < ( faces ? faces->total : 0 ) ; i++ ) {
    		CvRect *r = ( CvRect* )cvGetSeqElem( faces, i );
    		cvRectangle( img,
    					 cvPoint( r->x, r->y ),
    					 cvPoint( r->x + r->width, r->y + r->height ),
    					 CV_RGB( 255, 0, 0 ), 1, 8, 0 );
    	}
     
    	int j;
     
    	CvSeq *eye = cvHaarDetectObjects(
    			img,
    			cascade2,
    			storage,
    			1.1,
    			3,
    			0 /*CV_HAAR_DO_CANNY_PRUNNING*/,
    			cvSize(40,40) );
     
    	for( j = 0 ; j < ( eye ? eye->total : 0 ) ; j++ ) {
    		CvRect *r = ( CvRect* )cvGetSeqElem( eye, j );
    		cvRectangle( img,
    					 cvPoint( r->x, r->y ),
    					 cvPoint( r->x + r->width, r->y + r->height ),
    					 CV_RGB( 10, 0, 0 ), 1, 8, 0 );
    	}
     
     
     
     
    	cvShowImage( "video", img );
     
    }
    Actuellement, je ne sais pas dire si une face est détecter et si je suis dedans ou pas pour pouvoir ensuite mettre les eye par exemple.
    Si quelqu'un pouvais me donner une piste, merci d'avance...

    Stéphane

  2. #2
    Nouveau candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2
    Par défaut
    Bonjour,
    peux être est-ce un peux tard, néanmoins, cette piste pourra peux être vous aider :
    - A condition d'avoir un bon éclairage, je n'ai aucun probleme pour détecter mon visage. Si il n'est pas détecté, le pointeur (CvSeq *faces) pointe sur nulle.
    - De la, on peux remarquer facilement que l'oeuil gauche se trouve dans une zone situé à gauche du milieu du visage, ... Donc avec un cvsetRoi (de mémoire) pour selectionner la zone de l'image qui contient l'oeuil, tu pourra ne récuppérer que l'oeuil qui t'interresse.

    Un petit conseil à part, pour détecter un point quelconque du visage, j'ai remarqué que (haarcascade_mcs_eyepair_small) est celui qui est le plus rapide.

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2
    Par défaut
    par hasard, j'ai trouve ce lien dans la doc de opencv 1.3
    http://opencv.itseez.com/doc/tutoria...lassifier.html
    il repond parfaitement a ton probleme ce me semble

Discussions similaires

  1. Comment intégrer un fichier wave dans une Jar exécutable?
    Par HNoury dans le forum Général Java
    Réponses: 7
    Dernier message: 22/08/2008, 22h52
  2. ouvrir plusieurs fichier texte dans une seule feuille
    Par popoye dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/04/2008, 15h28
  3. [Système] Une seule exécution possible !
    Par amestoche dans le forum Langage
    Réponses: 5
    Dernier message: 29/05/2007, 14h39
  4. Une seule exécution simultanée
    Par vertical dans le forum Général Python
    Réponses: 6
    Dernier message: 21/05/2006, 14h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo