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 :

Suivi des mains dans une vidéo


Sujet :

OpenCV

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 26
    Points : 11
    Points
    11
    Par défaut Suivi des mains dans une vidéo
    Bonjour,
    je suis débutant dans le domaine de traitement vidéo.
    et je cherche les étape a suivre pour suivre les main en utilisant la biblio OpenCV (selon la couleur de peau).

    Merci beaucoup

  2. #2
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2008
    Messages : 138
    Points : 70
    Points
    70
    Par défaut
    Bonjour,

    Je ne suis pas le mieux placé pour vous répondre, mais voici quelques pistes.

    Je pense que ceci est susceptible de vous aider, mais cela utilise l'ancienne version d'OpenCv.

    Pour ma part, j'ai déjà réalisé une telle chose ( il s'agissait de traquer un visage selon la couleur de la peau ) en utilisant Camshift algorithme. Ca marche plutot bien. Une démo officielle est disponible ici

    Après tout dépend du contexte de la vidéo. Il n'existe pas un algorithme qui peut traiter tous les contextes. Est-ce que l'image ne contiendra que des mains ? En gros plan ou non ? Est-ce que d'autres objets couleur peau sont susceptibles d'apparaitre à l'image ? Et aussi, est-ce que la couleur de la peau est pré-définie ou bien détectée sur la vidéo ?

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    j'ai lu la page de geckogeek, mais il n'explique pas comment identifier la couleur de peau
    1) pour moi je traite la reconnaissance de geste, cad j'ai un signeur qui fait des signe en utilisant ses mains, donc pour moi il faut faire le hand tracking (j'ai chercher sur internet pour savoir les étapes a suivre mais ... )

    2) normalement la couleur de peau est prédéfinie

  4. #4
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2008
    Messages : 138
    Points : 70
    Points
    70
    Par défaut
    Dans cet exemple, tous les pixels ayant leur Hue value et Sat value ( dans le système de couleur HSV ) contenus dans un intervalle de couleur sont sélectionnés. Il te suffit de connaître ces deux valeurs pour ta couleur de peau prédéfinie et déterminer un seuil de tolérance définissant cet intervalle.

    Après, pour de la reconnaissance de signes, je ne sais pas si le tracking est ou non la meilleure solution.

  5. #5
    Membre régulier Avatar de GabrielD
    Homme Profil pro
    ingénieur de recherche
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur de recherche

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Points : 88
    Points
    88
    Par défaut
    pour la reconnaissance tu peux essayer de lire ça:
    http://opencv.itseez.com/opencv_tutorials.pdf (p.227)

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Merci mes amis

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    y'a t-il un tutorial en français ??

  8. #8
    Membre régulier Avatar de GabrielD
    Homme Profil pro
    ingénieur de recherche
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur de recherche

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Points : 88
    Points
    88
    Par défaut
    Surement pas aussi complet!
    Faut bien s'y mettre un jour à l'anglais
    Pour commencer sache que Topolino s'appelle Mickey Mouse en anglais
    Bon courage

  9. #9
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Mdrrrrrrr Gabriel

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2011
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    S'il vous plait, j'ai besoin de votre aide. je suis débutante en OpenCv, j'ai une image en HSV. je veux dessiner un rectangle qui autours les pixels de l'objet à detecter (dans mon cas les pixels en blanc) mais j'ai toujours eu des fautes
    le code est :
    #include<cv.h>
    #include<cvaux.h>
    #include<highgui.h>
    #include<cxcore.h>



    int main()
    {
    IplImage *monImage;
    int minX=monImage->width;
    int minY=monImage->height;
    int maxX=0;
    int maxY=0;
    monImage=cvLoadImage("hsv.jpg");
    //pixel blanc(enfin je crois verifie)
    CvScalar pixel;
    //parcourir tous les pixels de l'image
    for (int i=0; i < monImage->height; i++)
    {
    for (int j=0; j < monImage->width; j++)
    {
    //recuperer le pixel
    pixel = cvGet2D(monImage,i,j);
    //si le pixel est blanc alors(essaye de changer avec 0 // si ca marche pas):
    if( pixel.val[0] == 1)
    {
    if( j < minX)minX=j;
    if( i < minY)minY=i;
    if( j > maxX)maxX=j;
    if( i > maxX)maxX=i;
    cvSetImageROI(monImage, cvRect(minX, minY, maxX-minX, maxY-minY));
    cvNamedWindow("Roi");
    cvShowImage("Roi", monImage);


    }
    }
    }

    return 0;
    }

  11. #11
    Membre éclairé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Octobre 2011
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 312
    Points : 749
    Points
    749
    Par défaut
    salut, je cherche la même chose que toi, mais je pense que suivre la couleur est une très mauvaise idée...

    apparement, le fichier cascade n'est pas une très bonne idée non plus, puisque la main peu se retrouver dans tellement de forme possibles qu'au final, tu perdrais énormément de temps à prendre des photos, et quelques jours pour générer un XML pas fiable...


    J'ai entendu parlé de "blob" le soucis, c'est que la libcvblob n'est dispo qu'en C++.

    Il reste donc faire de la recherche de formes combinées... mais j'avoue être totalement perdu... par le manque de documentation parlante à ce sujet... je ne sais comment trouver ces informatitions, et donc, comment trouver les fonctions d'openCV nécéssaires pour ça

  12. #12
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2008
    Messages : 138
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par vohufr Voir le message
    salut, je cherche la même chose que toi, mais je pense que suivre la couleur est une très mauvaise idée...
    Pourquoi utiliser la couleur ( HSV ) serait une mauvaise idée ? Ca marche très bien dans bien des cas et il est même possible de déterminer le seuil automatiquement.

  13. #13
    Membre éclairé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Octobre 2011
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 312
    Points : 749
    Points
    749
    Par défaut
    parce qu'on ne peut pas forcément prévoir ce qui se trouve dans le fond de l'image :/

    et par exemple, si je suis assis devant la cam, y a mon visage devant, le visage et la main ont la même couleur...

    Tu peux m'en dire plus ? j'ai l'impression d'avoir perdu 1 semaine de recherches d'un coup :/

  14. #14
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2008
    Messages : 138
    Points : 70
    Points
    70
    Par défaut
    En effet, comme je l'ai suggéré plus haut, ça dépend vraiment du contexte. Si des éléments susceptibles d'avoir la même teinte que les mains ont de grandes chances d'apparaître à l'écran, alors le tracking de la teinte est sûrement à écarter.

    Hormis ça, il existe des algorithmes suffisamment précis pour être capables de différencier une teinte au premier plan et une autre en arrière plan. OpenCV propose même un algorithme d'extraction de background, mais je ne l'ai pas encore utilisé.

    Désolé, la recherche de formes combinées je ne connais pas pour ma part.

  15. #15
    Membre éclairé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Octobre 2011
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 312
    Points : 749
    Points
    749
    Par défaut
    la, je voudrais utiliser cvConvexHull2, mais... mon programme plante à l'execution, je comprends pas pourquoi

    voilà le code de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void detectPointes(IplImage *imgGray)
    {
    		CvMemStorage* storage1 = cvCreateMemStorage(0);
    		CvSeq* contours;
    		//cvThreshold(imgGray, imgGray, 150, 255, CV_THRESH_BINARY);
    		CvScalar color = CV_RGB(rand(), rand(), rand());
    	 	cvDrawContours( imgGray, contours, color, color, 2, CV_FILLED, 8); //définit les contours
     
     
    		CvSeq* hull = cvConvexHull2(contours, 0, CV_CLOCKWISE, 0); 
     
    		cvShowImage( "detectPointes", imgGray );
    		/*
    imgGray passe par cvCvtColor(imgSrc, *imgDst, CV_RGB2GRAY) juste avant.

    et la sortie de l'execution donne :
    OpenCV Error: Assertion failed (arr != 0 && contour_header != 0 && block != 0) in cvPointSeqFromMat, file /build/buildd-opencv_2.3.1-8-i386-58GsrM/opencv-2.3.1/modules/imgproc/src/utils.cpp, line 47
    terminate called after throwing an instance of 'cv::Exception'
    what(): /build/buildd-opencv_2.3.1-8-i386-58GsrM/opencv-2.3.1/modules/imgproc/src/utils.cpp:47: error: (-215) arr != 0 && contour_header != 0 && block != 0 in function cvPointSeqFromMat

    Abandon (core dumped)

Discussions similaires

  1. Suivi et comptage dans une vidéo
    Par sylvain_r dans le forum OpenCV
    Réponses: 20
    Dernier message: 28/05/2010, 14h18
  2. integrer les messages des fenetres dans une main loop
    Par d'Oursse dans le forum Windows
    Réponses: 3
    Dernier message: 15/06/2007, 19h29
  3. insérer des images dans une bd postgresql
    Par ephet dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 20/01/2004, 09h18
  4. [langage] Comment rajouter des champs dans une liste
    Par toto_titi dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2003, 14h09
  5. Ordre des champs dans une table
    Par patapetz dans le forum Outils
    Réponses: 5
    Dernier message: 30/07/2003, 06h53

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