Kinect SDK Hej världen (4 / 5 steg)
Steg 4: I C#
Kontrollera först att du har importerat Microsoft Kinect och verktygslåda bibliotek.
I MainWindow() aktivera vi Kinect:
privat KinectSensor sensor;
Sedan när fönstret laddar kommer vi att starta Kinect väljaren för att få Status för kinect.
privata void MainWindowLoaded (objekt avsändare, RoutedEventArgs e)
{
var sensorStatus = ny KinectSensorChooser();
sensorStatus.KinectChanged += KinectSensorChooserKinectChanged;
kinectChooser.KinectSensorChooser = sensorStatus; sensorStatus.Start();
}
Den etiketten uppdateras av KinectSensorChooserKinectChanged, på grund av växeln skapar vi i denna funktion. Också är här skelettet påbörjas.
privata void KinectSensorChooserKinectChanged (objekt avsändare, KinectChangedEventArgs e)
{
om (sensorn! = null) sensor. SkeletonFrameReady-= KinectSkeletonFrameReady;
sensor = e.NewSensor;
om (sensorn == null) återvända;
Switch (Convert.ToString(e.NewSensor.Status))
{
"Ansluten" i mål: KinectStatus.Content = "Ansluten"; bryta;
fallet "Frånkopplad": KinectStatus.Content = "Frånkopplad"; bryta;
"Fel" i mål: KinectStatus.Content = "Fel"; bryta;
fall "NotReady": KinectStatus.Content = "Inte redo"; bryta;
fall "NotPowered": KinectStatus.Content = "Inte Powered"; bryta;
"Initierar" i mål: KinectStatus.Content = "Initierar"; bryta;
standard: KinectStatus.Content = "Undefined"; bryta;
}
sensorn. SkeletonStream.Enable(); sensorn. SkeletonFrameReady += KinectSkeletonFrameReady;
}
En gång vi en spårning i skelettet som vi kan se för X, Y och Z koordinater för specifika punkter på skelettet. I detta exempel är vi efter koordinaterna för händerna på användaren. Vi visar värdena som text i fönstret i vårt textblocks. Vi jämför sedan Z position användare höften till Z position för handen. Om det är över en viss tröskel kommer vi att behandla användare armen som "upphöjd" och därför ut till fönstret som arm är upp.
privata void KinectSkeletonFrameReady (objekt avsändare, SkeletonFrameReadyEventArgs e)
{
var skelett = nya skelett [0];
med hjälp av (var skeletonFrame = e.OpenSkeletonFrame())
{
om (skeletonFrame! = null)
{
skelett = nya Skeleton[skeletonFrame.SkeletonArrayLength]; skeletonFrame.CopySkeletonDataTo(skeletons);
}
}
om (skeletons. Längd == 0) {return;}
var skel = skelett. FirstOrDefault (x = > x.TrackingState == SkeletonTrackingState.Tracked);
om (skel == null) {return;}
var högra = 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);
var vänstra = 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];
om (centreHip.Position.Z - rightHand.Position.Z > 0,35)
{
RightRaised.Text = "Upp";
}
annars om (centreHip.Position.Z - leftHand.Position.Z > 0,35)
{
LeftRaised.Text = "Upp";
}
annat
{
LeftRaised.Text = "Sänkte"; RightRaised.Text = "Sänkte";
}
}
Du kan ändra värdet 0,35 beroende på din armlängd och hur långt du vill nå ut innan den tror att armen lyfts.