Paso 4: El C#
Asegúrese de que haya importado el Microsoft Kinect y kit de herramientas de bibliotecas.
En MainWindow() activamos el Kinect:
sensor de KinectSensor privada;
Luego cuando se carga la ventana que vamos a iniciar el selector de Kinect para conseguir el estado del kinect.
privado MainWindowLoaded void (remitente de objeto, RoutedEventArgs e)
{
var sensorStatus = new KinectSensorChooser();
sensorStatus.KinectChanged += KinectSensorChooserKinectChanged;
kinectChooser.KinectSensorChooser = sensorStatus; sensorStatus.Start();
}
La KinectSensorChooserKinectChanged actualiza la etiqueta, debido al interruptor creamos en esta función. Aquí también el esqueleto está inicializado.
privado KinectSensorChooserKinectChanged void (remitente de objeto, e KinectChangedEventArgs)
{
Si (sensor! = null) sensor. SkeletonFrameReady-= KinectSkeletonFrameReady;
sensor = e.NewSensor;
Si (sensor == null) volver;
interruptor (Convert.ToString(e.NewSensor.Status))
{
"Conectado" del caso: KinectStatus.Content = "Conectado"; rotura;
"Desconectado" del caso: KinectStatus.Content = "Desconectado"; rotura;
"Error" del caso: KinectStatus.Content = "Error"; rotura;
caso "NotReady": KinectStatus.Content = "No listo"; rotura;
caso "NotPowered": KinectStatus.Content = "No funciona"; rotura;
"Inicialización" del caso: KinectStatus.Content = "Initialising"; rotura;
por defecto: KinectStatus.Content = "Undefined"; rotura;
}
sensor. SkeletonStream.Enable(); sensor. SkeletonFrameReady += KinectSkeletonFrameReady;
}
Una vez que un seguimiento el esqueleto para el X, Y y Z buscar coordenadas de puntos específicos en el esqueleto. En este ejemplo estamos después las coordenadas de las manos del usuario. Mostramos los valores como texto en la ventana en nuestro textblocks. Entonces comparamos la posición Z de la cadera de los usuarios en la posición Z de su mano. Si está sobre cierto umbral vamos a tratar el brazo de los usuarios como ser 'levantado' y, por tanto, impresión de la ventana depende de que brazo.
privado KinectSkeletonFrameReady void (remitente de objeto, e SkeletonFrameReadyEventArgs)
{
esqueletos de var = nuevo esqueleto [0];
usando (var skeletonFrame = e.OpenSkeletonFrame())
{
Si (skeletonFrame! = null)
{
esqueletos = nueva Skeleton[skeletonFrame.SkeletonArrayLength]; skeletonFrame.CopySkeletonDataTo(skeletons);
}
}
Si (esqueletos. Longitud == 0) {vuelta;}
skel var = esqueletos. FirstOrDefault (x = > x.TrackingState == SkeletonTrackingState.Tracked);
Si (skel == null) {vuelta;}
var derecha = 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 izquierda = 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 = "Levantado";
}
else if (centreHip.Position.Z - leftHand.Position.Z > 0.35)
{
LeftRaised.Text = "Levantado";
}
otra cosa
{
LeftRaised.Text = "Baja"; RightRaised.Text = "Baja";
}
}
Puede cambiar el valor 0.35 dependiendo de la longitud del brazo y hasta dónde quiere llegar antes de que piensa que su brazo se levanta.