Kinect Development

Développement sur Kinect SDK en C#

Comment afficher la vidéo de Kinect

Logiciels utilisés : Microsoft Visual Studio 10, Kinect SDK 1.0

Cette article vous permettra d’afficher la vidéo filmée par Kinect. Il faut savoir que Kinect envoie une suite d’images par seconde formant une vidéo. Le nombre d’images par seconde dépend de la résolution, il existe plusieurs types de résolution :

  1. 640 x 480 à 30 images par seconde en RGB
  2. 1280 x 960 à 12 images par seconde en RGB
  3. 640 x 480 à 15 images par seconde en YUV, RAW (RAW étant une image non compressé et YUV un espace colorimétrique)
  4. 640 x 480 à 15 images par seconde en YUV

Premièrement, vous devez créer un nouveau projet WPF.

Dans un premier temps, il faut ajouter la DLL du Kinect SDK (clique gauche sur le répertoire référence en haut à gauche, ensuite ajouter une référence, dans l’onglet Parcourir allez dans le répertoire C:/Programme/Microsoft SDK’s/Kinect/v1.0/Assemblies/Microsoft.Kinect.dll)

Maintenant, dans le fichier votreNomDeProjet.xaml.cs, vous devez ajouter l’assembly : using Microsoft.Kinect;

Ensuite, il faut ajouter la zone d’affichage de la vidéo, il existe deux façons de faire :

  • Afficher le menu « outils » (Si le menu n’est pas afficher à gauche, allez dans affichage, ensuite cliquez sur outils ou ctrl+W, X),  ensuite vous sélectionnez l’outil Image et vous faites un drag & drop.
  • Dans le xaml, insérer cette ligne dans les balises <grid> :

    <Image Height= »287″ HorizontalAlignment= »Left » Margin= »12,12,0,0″ Name= »video » Stretch= »Fill » VerticalAlignment= »Top » Width= »479″ />

Maintenant que vous avez la zone d’affichage pour votre vidéo, ouvrez le fichier nomDeVotreProjet.xaml.cs

Voici les variables a déclarées dans la classe :

KinectSensor est la classe représentant votre Kinect

ColorImageFormat  est la classe représentant le format (résolution) d’une image

Bytes[] représente un tableau de Bytes, il sera utilisé pour stocker les bits des images reçus par Kinect

WriteableBitmap est la classe permettant de créer une image Bitmap

Dans l’exemple pour afficher une vidéo, j’utilise deux méthodes :

  • Window_loaded : cette méthode est appelée quand la fenêtre s’affiche
  • ColorFrameReady : cette méthode sera appelée à chaque image envoyé par la Kinect

Voici la méthode Window_Loaded :

Tout d’abord, il faut initialiser la variable sensor (KinecSensor) en lui indiquant le périphérique Kinect, il peut en avoir jusqu’à 4 connectées simultanément, le nombre entre crochet détermine l’id de la Kinect.

Ensuite, il faut « ouvrir » le flux vidéo qu’on désire afficher, dans l’exemple, c’est le ColorStream qui nous intéresse mais il en existe deux autres qui sont le flux de la profondeur (DepthStream) et le flux du squelette (SkeletonStream).

On peut donc lu indique la résolution que l’on veut en sachant que plus la résolution est grande plus on perd en performance et fluidité.

Il est important d’indiquer la méthode qui sera appelé à chaque image reçu par le programme grâce à la méthode : ColorFrameReady

Finalement, il faut lancer la kinect par la méthode Start()

Comme dis précédemment la méthode appelée à chaque image est définie par la méthode ColorFrameReady, notre deuxième méthode sera donc dans l’exemple : sensor_ColorFrameReady

Important :   Pour que la méthode Window_loaded soit appelée, il faut se rendre dans le votreNomDeProjet.xaml, ensuite cliquez sur évènement dans les propriétés de votre fenêtre, à la ligne Loaded, ajouter le nom de la méthode c’est à dire Window_Loaded.

Voici la méthode sensor_ColorFrameReady :

Pour récupérer l’image envoyée par Kinect, il faut utilisé la méthode OpenColorImageFrame(), dans l’exemple elle sera stockée dans la variable imageFrame.

La variable newFormat permet d’optimiser le code car il ne faut pas oublier que la méthode sera appelé plusieurs fois par seconde donc ce n’est seulement si on modifie le format qu’il faudra initialiser le tableau pixelData et l’image ouputImage.

La variable pixelData comme préciser plus haut est un tableau qui contiendra tous les bits de l’image reçue, ouputImage sera une image bitmap qui reconstruira par rapport au tableau pixelData une image. Pour recrée cette image, il faut utiliser la méthode WritePixels()

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

%d blogueurs aiment cette page :