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 détecter une personne ?


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 220
    Par défaut Comment détecter une personne ?
    bonsoir,

    Je travaille à partir d'une séquence vidéo, j'ai isolé le foreground, maintenant j'aimerais bien reconnaitre une personne dans mon foreground. Comment faire?

    Merci

    PS : Je sais que plusieurs techniques existent, qu'il n'y a aucune technique fiable à 100%. J'aimerais une technique simple et efficace, je suis débutant et les maths, c'est pas mon fort lol.

  2. #2
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 220
    Par défaut
    J'ai 2 techniques en têtes :

    - histogramme à partir du foreground, de plus j'ai généré une carte de mouvements et transitions à partir d'un certains nombre d'images significatives. Ces cartes pourraient me servir de poids dans le calcul de statistique de détection de personne. Mais je ne sais pas comment interpréter une forme humaine dans un histogramme, je suis débutant et un peu perdu parmi toutes ces techniques?

    - Un base de données de photos positives et négatives de personnes qui me permettrait de déterminer la personne (à partir de l'image originale ou en niveau de gris).

    Que faire? La technique 1 est, je crois, moins performante que la 2. Mais la technique 2 doit sûrement prendre beaucoup plus de temps de calculs.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut
    Bonjour,

    Il existe une troisième technique, le HaarTraining, qui a l'avantage d'avoir un faible temps de calcul et ne nécessite presque aucune connaissance en mathématique.

    La librairie OpenCV est distribuée avec un fichier XML pour le HaarTraining qui permet de détecter un corps en mouvement (fichier haarcascade_fullbody.xml).

    Voici un exemple de code :
    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
     
    /**
     * Détection et dessin de la position de l'objet.
     * 
     * @param _image Image source de la détection.
     * @param _cascade Structure nécessaire à la détection.
     */
    void detect(IplImage *_image, CvHaarClassifierCascade *_cascade)
    {
    	int i, neighbors, flags;
    	double scale;
    	CvSeq *faces;
    	CvSize size;
    	CvRect *rectangle;
    	CvPoint p1, p2;
    	IplImage *gray;
     
    	// Paramètres de la détection
    	scale = 1.05;
    	neighbors = 2;
    	flags = 0; // ou CV_HAAR_DO_CANNY_PRUNING;
    	size = cvSize(50, 50);
     
    	// Allocation de l'espace mémoire de la détection
    	if(storage == NULL)
    		storage = cvCreateMemStorage(0);
    	cvClearMemStorage(storage);
     
    	// Conversion en niveau de gris
    	gray = cvCreateImage(cvSize(_image->width, _image->height), 8, 1);
    	cvConvertImage(_image, gray, CV_BGR2GRAY);
     
    	if(_cascade != NULL)
    	{
    		// Détection de(s) objet(s) visibles sur l'image source
    		faces = cvHaarDetectObjects(gray, _cascade, storage, scale, neighbors, flags, size);
     
    		if(faces != NULL)
    		{
    			for(i = 0; i < faces->total; i++)
    			{
    				// Conversion en rectangle
    				rectangle = (CvRect*) cvGetSeqElem(faces, i);
     
    				// Calcule des points du réctangle
    				p1.x = rectangle->x;
    				p1.y = rectangle->y;
    				p2.x = (rectangle->x + rectangle->y);
    				p2.y = (rectangle->y + rectangle->height);
     
    				// Dessin du réctangle sur l'image source
    				cvRectangle(_image, p1, p2, CV_RGB(255,0,0), 3, 8, 0);
    			}
    		}
    	}
     
    	// Libération de l'espace mémoire en niveau de gris
    	cvReleaseImage(&gray);
    }
    Cet exemple est inspiré de la documentation suivante :
    http://www.cognotics.com/opencv/docs...rDetectObjects

    Sam

  4. #4
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 220
    Par défaut
    merci, je viens de tester mais je ne trouve pas cela très performant. J'aimerais bien tester les autres aussi.

Discussions similaires

  1. Comment détecter une SD Card?
    Par sfaxi dans le forum C++
    Réponses: 0
    Dernier message: 14/04/2008, 18h34
  2. Réponses: 3
    Dernier message: 10/07/2007, 13h53
  3. Comment détecter une modification ?
    Par programaniac dans le forum Composants VCL
    Réponses: 5
    Dernier message: 16/11/2005, 13h25
  4. Comment détecter une erreur dans un process
    Par chuckboy dans le forum MFC
    Réponses: 3
    Dernier message: 25/10/2005, 10h40
  5. [VCL] Comment détecter une combinaison de touches ?
    Par micatmidog dans le forum Composants VCL
    Réponses: 3
    Dernier message: 23/01/2005, 14h19

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