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 :

Détecteur de Haar : reconnaissance de visage


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 177
    Par défaut Détecteur de Haar : reconnaissance de visage
    Bonjour,

    J'ai récupéré un code, que j'ai par la suite francisé, qui permet de tracer des rectangles autour de visages dans des images.

    Cependant j'ai quelques erreurs à la compilation : notamment "expected constructor, destructor, or type conversion before '*' token " à la ligne 2

    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
     
    //declarations
    CvHaarClassifierCascade* pCascade = 0;  // le detecteur de visage 
    CvMemStorgage* pStorage = 0;            // buffer mémoire expensible
    CvSeq* pFaceRectSeg;                    // liste des visages detectés
    int i;
     
    // initialisations
    IplImage* pInpImg = (argc > 1) ?
    cvLoadImage(argv[1], CV_LOAD_IMAGE_COLOR) : 0;
    pStorage = cvCreateMemStorage(0);
    pCascade = (CvHaarClassifierCascade *)cvLoad
    ((OPENCV_ROOT"/data/haarcascades/haarcascade_frontalface_default/xml"),0,0,0,0);
     
    // On valide que tout a bien été initialisé correctement
    if(!pInpImg || !pStorage || !pCascade)
    {
     printf("L'initilisation a echoue : %s \n,
       (!pInpImp)?  "n'a pas charge l'image" : 
       (!pCascade)? "n'a pas charge le detecteur de Haar -- "
                    "verifiez que le chemin est correct" :
       "Allocation memoire a echoue");
       exit(-1);
    }
     
    // Detection de visage dans l'image
    pFaceRectSeq = cvHaarDetectObjects
      (pInpImg, pCascade, pStorage,
      1.1,                            // augmente l'échelle de recherche de 10% à chaque passe
      3,                              // met de côté les groupes plus petit que 3 détections
      CV_HAAR_DO_CANNY_PRUNING,       // abandonne les régions non candidates à contenir un visage
      cvSize(0,0));                   // utilise les paramètres XML par défaut pour la plus petite echelle de recherche
     
      // create a window to display detected faces
      cvNamedWindow("Fenetre de Haar", CV_WINDOW_AUTOSIZE);
     
      // dessine un rectangle autour de chaque visage detecté
      for(i=0;i<(pFaceRectSeq? pFaceRectSeq->total:0);i++)
      {
       CvRect* r = (Cvrect*)cvGetSeqElem(pFaceRectSeq, i);
       CvPoint pt1 = { r->x, r->y };
       CvPoint pt2 = { r->x, r->width, r->y + r->height };
       cvRectangle(pInpImg, pt1, pt2, CV_RGB(0,255,0), 3, 4, 0);
     }
     
    // Affiche la détection de visage
    cvShowImage("Fenetre de Haar", pInpImg);
    cvWaitKey(0);
    cvDestroyWindow("Fenetre de Haar");
     
    // Libère les ressources
    cvReleaseImage(&pInpImg);
    if(pCascade) cvReleaseHaarClassifierCascade(&pCascade);
    if(pStorage) cvReleaseMemStorage(&pStorage);
    Je ne suis pas très bon développeur C++ donc j'ai quelques petits soucis ^^
    Merci pour vos réponses

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Par défaut
    à la ligne 2 il y a ....

    "CvMemStorgage" au lieu de "CvMemStorage".

    astuce: tu peux faire ctrl+c pour copier un bout de texte

  3. #3
    Invité de passage
    Inscrit en
    Mai 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 1
    Par défaut Code corrigé (pour ceux que ca intéresse)
    En effet, il y a qq erreurs (de frappe notamment) dans ton script, voici a peu près le même avec ces fautes corrigées, pour ceux qui seraient intéressés par un code "tout fait" qui marche du premier coup.
    A noter que j'ai changé légèrement le cvLoad pour les "cascades" en mettant directement le chemin qui marchait chez moi (à modifier par votre propre chemin si OpenCv n'est pas installé dans /usr/local/share/opencv chez vous...)
    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
     
     
    //declarations
    CvHaarClassifierCascade* pCascade = 0;  // le detecteur de visage 
    CvMemStorage* pStorage = 0;            // buffer mémoire expensible
    CvSeq* pFaceRectSeq;                    // liste des visages detectés
    int i;
     
    // initialisations
    IplImage* pInpImg = (argc > 1) ?
    cvLoadImage(argv[1], CV_LOAD_IMAGE_COLOR) : 0;
    pStorage = cvCreateMemStorage(0);
    pCascade = (CvHaarClassifierCascade *)cvLoad
    ("/usr/local/share/opencv/haarcascades/haarcascade_frontalface_default.xml",0,0,0);
     
    // On valide que tout a bien été initialisé correctement
    if(!pInpImg || !pStorage || !pCascade)
    {
     printf("L'initilisation a echoue");
       exit(-1);
    }
     
    // Detection de visage dans l'image
    pFaceRectSeq = cvHaarDetectObjects
      (pInpImg, pCascade, pStorage,
      1.1,                            // augmente l'échelle de recherche de 10% à chaque passe
      3,                              // met de côté les groupes plus petit que 3 détections
      CV_HAAR_DO_CANNY_PRUNING,       // abandonne les régions non candidates à contenir un visage
      cvSize(0,0));                   // utilise les paramètres XML par défaut pour la plus petite echelle de recherche
     
      // create a window to display detected faces
      cvNamedWindow("Fenetre de Haar", CV_WINDOW_AUTOSIZE);
     
      // dessine un rectangle autour de chaque visage detecté
      for(i=0;i<(pFaceRectSeq? pFaceRectSeq->total:0);i++)
      {
       CvRect* r = (CvRect*)cvGetSeqElem(pFaceRectSeq, i);
       CvPoint pt1 = { r->x, r->y };
       CvPoint pt2 = { r->x + r->width, r->y + r->height };
       cvRectangle(pInpImg, pt1, pt2, CV_RGB(0,255,0), 3, 4, 0);
     }
     
    // Affiche la détection de visage
    cvShowImage("Fenetre de Haar", pInpImg);
    cvWaitKey(0);
    cvDestroyWindow("Fenetre de Haar");
     
    // Libère les ressources
    cvReleaseImage(&pInpImg);
    if(pCascade) cvReleaseHaarClassifierCascade(&pCascade);
    if(pStorage) cvReleaseMemStorage(&pStorage);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. la reconnaissance des visages
    Par naim2009 dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 04/05/2009, 16h13
  2. détermination du seuil optimal pour la reconnaissance des visages
    Par imene_t1 dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 01/03/2008, 21h13
  3. reconnaissance des visages
    Par imene_t1 dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 10/09/2007, 10h36
  4. Suivi d'images pour reconnaissance de visages
    Par souma86.s dans le forum Images
    Réponses: 3
    Dernier message: 24/05/2007, 13h48

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