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 :

Kinect et détection de visage


Sujet :

OpenCV

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Points : 30
    Points
    30
    Par défaut Kinect et détection de visage
    Bonsoir à tous,

    J'espère poster dans la bonne partie de cet immense et merveilleux forum.

    J'ai comme projet la détection de visage a l'aide du capteur Kinect (imageRGB et imageDepth).

    Je commence tout juste et après avoir installer OpenNI et les drivers de Kinect (pas de possibilité d'utiliser le SDK de microsoft, pc sous vista et Visual studio 2008) ainsi que l'installation et compilation d'OpenCV2.4 pour mon projet Visual Studio.

    Je cherche à faire la chose toute bête : récupérer l'image "depth" du capteur Kinect et l'afficher.

    Voici le code que j'utilise :
    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
    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
     
    #include <iostream>
     
    using namespace cv;
    using namespace std;
     
     
    int main( int argc, char* argv[] )
    {
    	VideoCapture capture( CV_CAP_OPENNI );
    	for(;;){
    		Mat depthMap;
    		Mat show;
    		const float scaleFactor = 0.05f;
     
    		capture >> depthMap;
     
    		depthMap.convertTo( show, CV_8UC1, scaleFactor );	
     
    		imshow( "depth map", show );
     
    		waitKey( 30 ) >= 0; 
    	}
     
    	return 0;
    }
    Tout se passe pour le mieux mais pour seulement une seule frame. Des qu'il sagit de passer à la deuxième frame pour un affichage dynamique avec la boucle for : Point d'arrêt avec le message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception de première chance à 0x7782fc56 dans Test_OpenCV.exe*: Exception Microsoft C++*: std::bad_alloc à l'emplacement mémoire 0x0015f4a8..
    et ouverture du fichier "Window.cpp" à la ligne dans la fonction "imshow"

    Le code est pourtant basic et sur ce que j'ai vu, assez classique avec OpenCV+OpenNI. Seulement voilà, je coince la dessus.

    Si quelqu'un à une idée ou a déjà été confronté a ce problème, c'est avec plaisir que j'écouterais ses lumières!
    D'avance, merci
    Bonne fin de soirée.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    Bonjour!

    Personne de motivé pour ce petit problème? Ou, surtout, ayant eu le même souci?

    Pour l'instant, j'ai réussi à contourner le problème. En faite, c'est "imshow" qui pose problème pour afficher mon image (Mat) de sortie. Du coup, après avoir executé tous mes calculs avec des Mat je repasse en IplImage juste avant l'affichage temps réel avec "cvShowImage" (précédent type d'image avec OpenCV).

    Mais bon, c'est de la bidouille et vu que c'est pour l'instant la base de mon projet j'aimerais pouvoir éviter d'introduire deux différents types pour mes images et donc travailler uniquement avec des Mat.

    Si quelqu'un a une autre solution plus efficace, qu'il n'hésite surtout pas!
    Merci d'avance pour votre aide.

    A.

  3. #3
    Membre actif

    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 170
    Points : 202
    Points
    202
    Par défaut
    Salut,

    tu devrais aller sur le forum d'OpenNi, tu y trouveras directement les ingénieurs qui ont développé la kinect et OpenNi

    http://arena.openni.org/

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    Bonjour et merci pour ta réponse.

    Je suis en effet déjà allez voir sur ces forums et j'ai également modifié mon programme pour faire l'acquisition de l'image depth sans passer par les fonctions toutes faites d'OpenNI.
    Le problème reste le même, la récupération de la depth map se fait parfaitement, son affichage (objet Mat) avec la fonction imshow aussi. Seulement, une seule itération est possible. Dès que je place mon affichage dans une boucle (cf exemple du premier message) la fonction imshow déclenche un throw.

    Je voulais donc savoir si des difficultés avaient été rencontrées auparavant en utilisant l'objet Mat avec imshow (OpenCV) pour afficher une depth map provenant de la kinect?

    Merci pour votre aide. Si quelqu'un a déjà rencontré le problème ou aurait une idée possible de cause pour cette erreure, je suis prenneur

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    J'ai trouvé la réponse à mes interrogations. En faite, le throw était du à un redimmensionnement de l'image avant l'affichage avec imshow. Tout bête mais étant novice avec OpenCv, il fallait y penser

    Voici ce qui m'a permis de trouver la solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    The function imshow displays an image in the specified window. If the window was created with the CV_WINDOW_AUTOSIZE flag, the image is shown with its original size. Otherwise, the image is scaled to fit the window. The function may scale the image, depending on its depth:
     
            If the image is 8-bit unsigned, it is displayed as is.
            If the image is 16-bit unsigned or 32-bit integer, the pixels are divided by 256. That is, the value range [0,255*256] is mapped to [0,255].
            If the image is 32-bit floating-point, the pixel values are multiplied by 255. That is, the value range [0,1] is mapped to [0,255].
    Source : http://opencv.itseez.com/modules/hig...how#cv2.imshow

    Je vais travailler avec OpenCV pendant encore pas mal de temps donc je serais surement de retour ici pour partager mes problèmes et apporter ma modeste aide comme contribution.

    Merci.
    A.

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 217
    Points : 113
    Points
    113
    Par défaut probleme debuter en OpenNi
    Bonjour,

    Je suis un grand debutant avec OpenNi et Kinect.je viens d'installer tout OpenNI, Nite,Sensor, SensorKinect.
    Je viens tout juste de brancher ma kinect dans l'ordi j'ai regarder les programme de test dans le repertoire Sample de OpenNI et tout est nickel.

    je voudrais modifier quelques fichier de test pour ajouter de nouvelles fonctionnalité :
    par exemple savoir si la personne est couché, oubien assise etc...

    Mon probleme actuellement est tout bete : je ne sais pas comment compiler: par exemple j'ai commencer à modifier le code de Sample-NiHandTracker mais apres modification je ne saurai pas comment le tester car meme quand je fais un make a partir du repertoir NiHandTracker je n'obtien pas d'executable labà!

    Dois je utiliser un autre editeur pour C++ ??? Breff comment faire pour pouvoir tester les effets des modifications que j'ai effectué?


    Merci beaucoup de votre aide.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    Bonsoir et désolé pour la lenteur de la réponse.

    Pour ton problème, je ne sais pas si j'ai tout bien saisi mais tu dois tout simplement lancer le sample code dans un IDE C++ pour le modifier et le compiler par la suite.

    A noter que la version build/release en .exe est non modifiable et servira uniquement à voir si ta Kinect est opérationnelle sur ton pc.
    Tu dois juste ouvrir la version debuggable dans ton IDE (j'utilise Visual Studio 08) modifier ce que tu veux et Build and compile
    (A noter également que tous les includes et links doivent être fait correctement)

    Si jamais tu as des doutes, n'hésite pas à googler "Kinect with Visual Studio" sur google ou à reposer une question ici. Bon courage.
    A.

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

Discussions similaires

  1. Détection de visages dans une vidéo
    Par sialamed dans le forum OpenCV
    Réponses: 1
    Dernier message: 17/04/2008, 15h22
  2. Détection de visages
    Par sialamed dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 07/01/2008, 14h47
  3. Détection de visages d'une vidéo
    Par bustaja dans le forum OpenCV
    Réponses: 5
    Dernier message: 25/06/2007, 17h50
  4. Détection de visages dans une image en niveaux de gris
    Par bert_ dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 04/04/2007, 18h04

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