Étape 4: Le langage c#.
Assurez-vous d’abord que vous avez importé le Microsoft Kinect et bibliothèques trousse à outils.
Dans MainWindow(), nous activons le Kinect :
capteur de KinectSensor privé ;
Puis lors du chargement de la fenêtre nous allons commencer le sélecteur de Kinect pour obtenir le statut de la kinect.
' private void MainWindowLoaded (object sender, RoutedEventArgs e)
{
var sensorStatus = new KinectSensorChooser() ;
sensorStatus.KinectChanged += KinectSensorChooserKinectChanged ;
kinectChooser.KinectSensorChooser = sensorStatus ; sensorStatus.Start() ;
}
Le l’étiquette est mis à jour par KinectSensorChooserKinectChanged, en raison de l’interrupteur, nous créons dans cette fonction. Ici aussi le squelette est initialisé.
' Private Sub KinectSensorChooserKinectChanged (object sender, KinectChangedEventArgs e)
{
Si (capteur! = null) capteur. SkeletonFrameReady-= KinectSkeletonFrameReady ;
capteur = e.NewSensor ;
Si (capteur == null) return ;
commutateur (Convert.ToString(e.NewSensor.Status))
{
affaire « Connecté »: KinectStatus.Content = « Connecté » ; rupture ;
affaire « Déconnecté »: KinectStatus.Content = « Déconnecté » ; rupture ;
affaire « Error »: KinectStatus.Content = « Erreur » ; rupture ;
affaire « NotReady »: KinectStatus.Content = « Ne pas prêt » ; rupture ;
affaire « NotPowered »: KinectStatus.Content = « Non géré » ; rupture ;
affaire « Initialisation »: KinectStatus.Content = « Initialising » ; rupture ;
par défaut : KinectStatus.Content = « Non défini » ; rupture ;
}
capteur. SkeletonStream.Enable() ; capteur. SkeletonFrameReady += KinectSkeletonFrameReady ;
}
Une fois que nous a suivi le squelette nous pouvons chercher de X, Y et Z les coordonnées pour des points spécifiques sur le squelette. Dans cet exemple, nous sommes après les coordonnées des mains de l’utilisateur. Nous montrons les valeurs sous forme de texte dans la fenêtre à notre textblocks. On compare ensuite la position de Z de la hanche utilisateurs sur Z de leur main. Si elle dépasse un certain seuil, nous allons traiter le bras d’utilisateurs comme étant « relief » et donc imprimée vers la fenêtre dont le bras est vers le haut.
' Private Sub KinectSkeletonFrameReady (object sender, SkeletonFrameReadyEventArgs e)
{
squelettes de var = nouveau squelette [0] ;
en utilisant (var skeletonFrame = e.OpenSkeletonFrame())
{
Si (skeletonFrame! = null)
{
squelettes = nouveau Skeleton[skeletonFrame.SkeletonArrayLength] ; skeletonFrame.CopySkeletonDataTo(skeletons) ;
}
}
Si (squelettes. Longueur == 0) {return;}
skel var = squelettes. FirstOrDefault (x = > x.TrackingState == SkeletonTrackingState.Tracked) ;
Si (skel == null) {return;}
var droite = skel. Joints[JointType.WristRight] ; XValueRight.Text = rightHand.Position.X.ToString(CultureInfo.InvariantCulture) ; YValueRight.Text = rightHand.Position.Y.ToString(CultureInfo.InvariantCulture) ; ZValueRight.Text = rightHand.Position.Z.ToString(CultureInfo.InvariantCulture) ;
leftHand var = skel. Joints[JointType.WristLeft] ; XValueLeft.Text = leftHand.Position.X.ToString(CultureInfo.InvariantCulture) ; YValueLeft.Text = leftHand.Position.Y.ToString(CultureInfo.InvariantCulture) ; ZValueLeft.Text = leftHand.Position.Z.ToString(CultureInfo.InvariantCulture) ;
var centreHip = skel. Joints[JointType.HipCenter] ;
Si (centreHip.Position.Z - rightHand.Position.Z > 0,35)
{
RightRaised.Text = « Raised » ;
}
ElseIf (centreHip.Position.Z - leftHand.Position.Z > 0,35)
{
LeftRaised.Text = « Raised » ;
}
d’autre
{
LeftRaised.Text = « Abaissé » ; RightRaised.Text = « Abaissé » ;
}
}
Vous pouvez modifier la valeur de 0,35 selon votre longueur de bras et dans quelle mesure vous voulez tendre la main avant qu’elle estime votre bras est déclenché.