Exemple #1
0
        // ustawianie nastepnego punktu kalibracji
        public void SetNextCalibrationPoint(double x, double y, double z = 0)
        {
            if (!calibrated)
            {
                // tu wypada spr sensownosc punktu
                calibrationPoints[nextPointIndex] = new Point3D(x, y, z);
                nextPointIndex++;

                mainEngine.AddTextToLog("Punkt kalibracji: " + x.ToString() + " " + y.ToString() + " " + z.ToString());
            }
            if (nextPointIndex == 6) // tu jeszcze inne rzeczy trzeba sprawdzic (np. sensownosc punktow)
            {
                if (mainEngine.GetAppState() == ApplicationState.Calibration)
                {
                    computeCalibrationCoeffs();
                    mainEngine.SetAppState(ApplicationState.Calibrated);
                    calibrated = true;
                    mainEngine.AddTextToLog("Kalibracja zakonczona!");
                }
                else
                {
                    // cos poszlo zle, skoro apka nie byla w stanie kalibracji a kalibracja sie odbywala...
                }
            }
        }
Exemple #2
0
        public void sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            // nie ma potrzeby odczytywac szkieletu gdy nie jest on potrzebny aplikacji
            if (mainEngine.GetAppState() == ApplicationState.Calibration ||
                mainEngine.GetAppState() == ApplicationState.Working)
            {
                using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
                {
                    if (skeletonFrame != null)
                    {
                        lock (this)
                        {
                            skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                            skeletonFrame.CopySkeletonDataTo(skeletons);

                            if (skeletons.All(s => s.TrackingState == SkeletonTrackingState.NotTracked))
                            {
                                return;
                            }

                            Skeleton firstTrackedSkeleton = skeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked).FirstOrDefault();
                            if (firstTrackedSkeleton != null && firstTrackedSkeleton.Joints[JointType.HandRight].TrackingState == JointTrackingState.Tracked)
                            {
                                rightHand      = firstTrackedSkeleton.Joints[JointType.HandRight];
                                rightHandCoord = new Point3D(rightHand.Position.X, rightHand.Position.Y, rightHand.Position.Z);

                                if (mainEngine.GetAppState() == ApplicationState.Working)
                                {
                                    MainEngine.MoveCursorTo(mainEngine.GetCalibrator().ScaleKinectPositionToScreen(
                                                                rightHand.Position.X, rightHand.Position.Y, rightHand.Position.Z));
                                }

                                //mainEngine.AddTextToLog("SkelControl: hand tracked " + rightHand.Position.X.ToString()
                                // + " " + rightHand.Position.Y.ToString() + " " + rightHand.Position.Z.ToString());
                            }
                        }
                    }
                }
            }
        }
        void speechEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            const double ConfidenceThreshold = 0.3;

            if (e.Result.Confidence >= ConfidenceThreshold)
            {
                if (e.Result.Semantics.Value != null)
                {
                    string semValue = e.Result.Semantics.Value.ToString();

                    switch (semValue)
                    {
                    case "CALIB_CALIBRATE":
                        mainEngine.AddTextToLog("SpeechRec: " + semValue);
                        if (mainEngine.GetAppState() == ApplicationState.Ready)
                        {
                            mainEngine.SetAppState(ApplicationState.Calibration);
                            mainEngine.service.send(Orders.CALIBRATE);
                            // no i komunikat do klienta...
                        }
                        else
                        {
                            // jakies inne przypadki? np. ponowna kalibracja czy cos...
                        }
                        break;

                    case "CALIB_MARK":
                        mainEngine.AddTextToLog("SpeechRec: " + semValue);
                        if (mainEngine.GetAppState() == ApplicationState.Calibration)
                        {
                            mainEngine.GetCalibrator().SetNextCalibrationPoint(
                                mainEngine.GetSkeletonController().GetRightHandCoord());
                            if (mainEngine.GetAppState() == ApplicationState.Calibrated)
                            {
                                mainEngine.AddTextToLog("skalibrowane");
                                mainEngine.service.send(Orders.DONE);
                            }
                            else if (mainEngine.GetAppState() == ApplicationState.Calibration)
                            {
                                mainEngine.service.send(Orders.MARK);
                            }
                        }
                        else
                        {
                            // cos poszlo zle...
                        }
                        break;

                    case "ONN_MOVE":
                        mainEngine.AddTextToLog("SpeechRec: " + semValue);
                        break;

                    case "ONN_THERE":
                        mainEngine.AddTextToLog("SpeechRec: " + semValue);
                        if (mainEngine.GetAppState() == ApplicationState.Working)
                        {
                            mainEngine.GetObjectManager().SelectedMoveTo(mainEngine.GetSkeletonController().GetRightHandCoord());
                            // no i komunikat do klienta...
                        }
                        else
                        {
                            // ...
                        }
                        break;

                    case "ONN_REMOVE":
                        mainEngine.AddTextToLog("SpeechRec: " + semValue);

                        if (mainEngine.GetAppState() == ApplicationState.Working)
                        {
                            if (mainEngine.GetObjectManager().GetSelectedObject() != null)
                            {
                                mainEngine.service.sendRemoveObject(mainEngine.GetObjectManager().GetSelectedObject().GetObjectName());
                                mainEngine.GetObjectManager().RemoveSelectedObject();
                            }
                            // no i komunikat do klienta...
                        }
                        else
                        {
                            // ...
                        }
                        break;
                    }
                }
                else
                {
                    var semVal = e.Result.Semantics;

                    if (semVal.ContainsKey("OWN_MOVE_NAME"))
                    {
                        mainEngine.AddTextToLog("SpeechRec: move " + semVal["OWN_MOVE_NAME"].Value);

                        if (mainEngine.GetAppState() == ApplicationState.Working)
                        {
                            string name = semVal["OWN_MOVE_NAME"].Value.ToString();
                            mainEngine.GetObjectManager().MoveTo(name,
                                                                 mainEngine.GetSkeletonController().GetRightHandCoord());
                            SingleObject so = mainEngine.GetObjectManager().GetUsedObjectByName(name);
                            if (so != null)
                            {
                                mainEngine.service.sendMoveObject(so.GetObjectName(), so.GetScreenCentroidPosition().Y,
                                                                  so.GetScreenCentroidPosition().X);
                            }
                        }
                        else
                        {
                            // ...
                        }
                    }
                    else if (semVal.ContainsKey("OWN_NEW_NAME"))
                    {
                        mainEngine.AddTextToLog("SpeechRec: new " + semVal["OWN_NEW_NAME"].Value);

                        if (mainEngine.GetAppState() == ApplicationState.Working)
                        {
                            mainEngine.GetObjectManager().AddUsedObject(semVal["OWN_NEW_NAME"].Value.ToString(),
                                                                        mainEngine.GetSkeletonController().GetRightHandCoord());

                            SingleObject so = mainEngine.GetObjectManager().GetUsedObjectByName(semVal["OWN_NEW_NAME"].Value.ToString());
                            so.SetScreenPosition(mainEngine.GetCalibrator().ScaleKinectPositionToScreen(so.GetCentroidPosition()));
                            mainEngine.service.sendCreateObject(so.GetObjectName(), so.GetObjectType(), so.GetScreenCentroidPosition().Y, so.GetScreenCentroidPosition().X);
                        }
                        else
                        {
                            // ...
                        }
                    }
                    else if (semVal.ContainsKey("OWN_REMOVE_NAME"))
                    {
                        mainEngine.AddTextToLog("SpeechRec: remove " + semVal["OWN_REMOVE_NAME"].Value);

                        if (mainEngine.GetAppState() == ApplicationState.Working)
                        {
                            mainEngine.GetObjectManager().RemoveUsedObject(semVal["OWN_REMOVE_NAME"].Value.ToString());
                            mainEngine.service.sendRemoveObject(semVal["OWN_REMOVE_NAME"].Value.ToString());
                        }
                        else
                        {
                        }
                    }
                }
            }
        }