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 :

Comment fonctionne les descripteurs cascade ?


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Par défaut Comment fonctionne les descripteurs cascade ?
    bonjour,

    D'abord il faut signaler que je suis débutante dans le domaine de traitement d'image et dans la programmation avec opencv donc ça se peut que mes questions seront banales
    alors , je sais qu'il existe une application dans les sample d'opencv pour la détection de visage
    je voudrais connaitre comment travaillent les 'cascade' ou les descripteurs de Haar parce que j'ai pas bien compris comment ils récupèrent les caractéristique de visage par d'autre terme comment ils savent le visage de non visage . ensuite comment on récupère ces informations (qui sont dans le fichier . xml) je sais qu'il existe une fonction mais j'ai pas compris comment elle fonctionne . merci de me expliquer un peu
    enfin qu'elle est les déférences entre haarcascade_frontalface_alt.xml et haarcascade_frontalface_alt2.xml,haarcascade_frontalface_alt_tree

  2. #2
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    tes questions sont loin d'être banales, je ne suis pas un pro de l'utilisation de haar mais j'ai quelques réponse (c'est déjà ca ^^)

    comment on récupère ces informations (qui sont dans le fichier . xml)
    elles sont difficillement récupérable le seul moyen et d'aller voir ce qu'il écrit dans son xml (il te faut aller voir la fonction sous entendu le code de la fonction complète, à vue de nez doit y avoir pas mal d'histogramme)

    qu'elle est les déférences entre haarcascade_frontalface_alt.xml et haarcascade_frontalface_alt2.xml,haarcascade_frontalface_alt_tree
    pour généré le fichier XML tu as besoin de centaine de photo, une fois le xml généré,l'algo trackera les objets ayant les même propriété que les photos que tu as utilisé pour ta génération (brillance, contraste, couleur.....) les trois ont été généré avec des photos ayant des caractéritiques différentes de mémoire le premier cité ne detecte que les visages de face et bien éclairé pour les autres je ne sais pas ca (pour le tree c'est le traitement qui diverge au lieu de faire un traitement en cascade pour la comparaison, il le fait en forme d'arbre).

    en ce qui concerne la fonction ca doit être celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    static IntPtr cvHaarDetectObjects(
    	IntPtr image, 
    	IntPtr cascade, 
    	IntPtr storage, 
    	double scaleFactor, 
    	int minNeighbors, 
    	int flags, 
    	MCvSize minSize
    )
    image: c'est l'image dans laquelle tu cherches les objets à détecter
    cascade: c'est le filtre à appliqué, le descripteur
    storage: une zone mémoire ou tu va stocker les résultats du filtre
    scaleFactor: le facteur de reduction de la fenêtre de recherche il va rechercher en faisant des blocs et c'est la taille des blocs il me semble
    minNeighbors:ca je ne sais pas trop
    flags: un filtre pour exclure des zones de l'image par exemple
    minSize: la taille minimale de l'objet à détecter

    donc tu appliques la fonction et il va chercher comme un grands tout ce qui t'intéresse et le sauvegarde ^^

    Et bien sur j'ai failli oublier le paramètre de retour qui est le rectangle de l'objet détécté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CvSeq* faces = cvHaarDetectObjects( img, cascade, storage,
                                                1.1, 2, CV_HAAR_DO_CANNY_PRUNING,
                                                cvSize(40, 40) );
    dans l'exemple ca donne ca ^^
    CVSeq représente une écriture dynamique de ce que tu veux donc ici tu y écris des rectangles.

    voilà de ce que j'ai compris en espérant avoir été clair ^^

    edit: dit nous ce que tu veux faire si tu as des souci

  3. #3
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Par défaut
    bonjour, merci snowpy pour l'explication
    dit nous ce que tu veux faire si tu as des souci
    j'ai pas compris quelques lignes du code face detection, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int optlen = strlen("--cascade=");
    const char* input_name;
    if( argc > 1 && strncmp( argv[1], "--cascade=", optlen ) == 0 )
        {
            cascade_name = argv[1] + optlen;
            input_name = argc > 2 ? argv[2] : 0;
        }
    2- concernant le fichier xml (toujours j'ai un problème avec lui ) avant l'exécution du programme est ce que il était vide?(j'ai vous dit que mes questions sont banales )
    3-j'ai pas compris comment fonctionne "CvHaarClassifierCascade".

  4. #4
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    le code sert à charger le descripteur que tu lui as donnée en paramètre.

    2. Non il est loin d'être vide, il contient énormément de caractéristique de l'image que tu veux tracker, taille, luminosité, pour savoir précisément il faut aller fouiller dedans ^^

    3. CvHaarClassifierCascade c'est la manière dont il va tracker l'objet à l'intérieur de ton image

  5. #5
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Par défaut
    bonjour, merci snowpy
    le code sert à charger le descripteur que tu lui as donnée en paramètre.
    alors après l'exécution de ces lignes on obtient un descripteur qui contient les informations de l'image?
    il contient énormément de caractéristique de l'image que tu veux tracker, taille, luminosité, pour savoir précisément il faut aller fouiller dedans
    il contient les informations sur l'image ou sur le visage de cette image?
    comment aussi il connaitre que ça c'est un visage ou non ( ou l'essentiel qu'il détecte le visage mais comment ce n'est pas notre problème).
    finalement , je voudrais connaitre qu'elle est la différence entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
    qui criée une rectangle pour dessiner le visage
    et cette ligne qui a pour but de dessiner le rectangle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     cvRectangle( img, pt1, pt2, CV_RGB(255,0,0), 3, 8, 0 );
    en d'autre manière est ce que on peux utiliser le premier ligne pour connaitre les coordonnés du visage sans l'utiliser pour dessiner le rectangle par contre on l'utilise pour dessiner une autre chose

  6. #6
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2009
    Messages : 141
    Par défaut
    en d'autre manière est ce que on peux utiliser le premier ligne pour connaitre les coordonnés du visage sans l'utiliser pour dessiner le rectangle par contre on l'utilise pour dessiner une autre chose
    C'est tout a fait possible, regarde la structure CvRect :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct CvRect
    {
    int x;
    int y;
    int width;
    int height;
    }
    CvRect;
    Cette structure contient la position du coin haut gauche du rectangle (ici qui encadre ton visage a priori) ainsi que sa largeur et sa longueur. A partir de la tu peux utiliser ces infos pour tracer ce que tu veux, pas seulement un rectangle.

Discussions similaires

  1. Comment fonctionnent les "keywords"
    Par shikakus dans le forum Référencement
    Réponses: 3
    Dernier message: 29/01/2007, 00h13
  2. Comment fonctionne les versions d'un logiciel?
    Par Antigonos Ier Gonatas dans le forum Windows
    Réponses: 12
    Dernier message: 14/07/2006, 18h48
  3. [VB6] Comment fonctionne les Tableaux ?
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 27/04/2006, 14h59
  4. [FLASH 8] Comment fonctionne les clips
    Par steeves5 dans le forum Flash
    Réponses: 3
    Dernier message: 27/01/2006, 10h23
  5. Comment fonctionnent les index des options d'un select ?
    Par pekka77 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/10/2005, 18h05

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