Exemplo n.º 1
0
        protected override void Analyze(FrameReadyEventArgs frameReadyEventArgs)
        {
            var frames = _framesCollector.GetFrames(LastFrameTimestamp).ToList();

            if (frames.Count == 0)
            {
                return;
            }

            var torsoPosHistory     = frames.Select(a => a.GetNearestSkeleton().Joints.FirstOrDefault(b => b.JointType == TJointType.Spine)).ToList();
            var LeftHandPosHistory  = frames.Select(a => a.GetNearestSkeleton().Joints.FirstOrDefault(b => b.JointType == TJointType.HandLeft)).ToList();
            var RightHandPosHistory = frames.Select(a => a.GetNearestSkeleton().Joints.FirstOrDefault(b => b.JointType == TJointType.HandRight)).ToList();

            var lastLeftHandFrame  = LeftHandPosHistory.Last();
            var lastRightHandFrame = RightHandPosHistory.Last();
            var lastTorsoFrame     = torsoPosHistory.Last();

            var diffLeft  = lastTorsoFrame.Position.Z - lastLeftHandFrame.Position.Z;
            var diffRight = lastTorsoFrame.Position.Z - lastRightHandFrame.Position.Z;

            if (ignoredCalls > 0)
            {
                ignoreCallsTrigger = true;
                ignoredCalls--;
                return;
            }
            else if (ignoreCallsTrigger == true)
            {
                ignoreCallsTrigger = false;
                LeftLastPosition   = lastLeftHandFrame.Position;
                RightLastPosition  = lastRightHandFrame.Position;
                LastHandsDistance  = CalculateDistance(lastLeftHandFrame, lastRightHandFrame);
            }

            Calibrate(diffLeft, diffRight);

            bool left  = LeftHandActive(diffLeft, lastLeftHandFrame.Position);
            bool right = RightHandActive(diffRight, lastRightHandFrame.Position);

            if (left && right)
            {
                if (!bothHandsActivated)
                {
                    bothHandsActivated = true;
                    LastHandsDistance  = CalculateDistance(lastLeftHandFrame, lastRightHandFrame);
                    LogString.Log("BothHands Activated");
                }

                NavigateByBothHands(lastLeftHandFrame, lastRightHandFrame, frames);
            }
            else if (left)
            {
                NavigateByLeftHand(lastLeftHandFrame, frames);
            }
            else if (right)
            {
                NavigateByRightHand(lastRightHandFrame, frames);
            }
        }
Exemplo n.º 2
0
        public static Vector2 Convert(TSkeletonPoint position)
        {
            float width  = 0;
            float height = 0;
            float x      = 0;
            float y      = 0;

            //if (sensor.ColorStream.IsEnabled)
            //{
            //    var colorPoint = sensor.MapSkeletonPointToColor(position, sensor.ColorStream.Format);
            //    x = colorPoint.X;
            //    y = colorPoint.Y;

            //    switch (sensor.ColorStream.Format)
            //    {
            //        case ColorImageFormat.RawYuvResolution640x480Fps15:
            //        case ColorImageFormat.RgbResolution640x480Fps30:
            //        case ColorImageFormat.YuvResolution640x480Fps15:
            //            width = 640;
            //            height = 480;
            //            break;
            //        case ColorImageFormat.RgbResolution1280x960Fps12:
            //            width = 1280;
            //            height = 960;
            //            break;
            //    }
            //}
            //else if (sensor.DepthStream.IsEnabled)
            //{
            //    var depthPoint = sensor.MapSkeletonPointToDepth(position, sensor.DepthStream.Format);
            //    x = depthPoint.X;
            //    y = depthPoint.Y;

            //    switch (sensor.DepthStream.Format)
            //    {
            //        case DepthImageFormat.Resolution80x60Fps30:
            //            width = 80;
            //            height = 60;
            //            break;
            //        case DepthImageFormat.Resolution320x240Fps30:
            //            width = 320;
            //            height = 240;
            //            break;
            //        case DepthImageFormat.Resolution640x480Fps30:
            //            width = 640;
            //            height = 480;
            //            break;
            //    }
            //}
            //else
            //{
            width  = 640;
            height = 480;
            //}

            return(new Vector2(x / width, y / height));
        }
Exemplo n.º 3
0
        private void NavigateByLeftHand(TJoint lastLeftHandFrame, List <Frame> frames)
        {
            var transitionX = lastLeftHandFrame.Position.X - LeftLastPosition.X;
            var transitionY = lastLeftHandFrame.Position.Y - LeftLastPosition.Y;

            var transitionVector = new Vector3()
            {
                X = transitionX, Y = transitionY
            };

            Raise(() => RaiseEvent(frames, transitionVector, 0, ControlType.LEFT_HAND));

            LeftLastPosition = lastLeftHandFrame.Position;
        }
Exemplo n.º 4
0
        private bool LeftHandActive(double diffLeft, TSkeletonPoint lastLeftHandFrame)
        {
            if (diffLeft > Configuration.activeHandDistance)
            {
                if (!leftHandActivated)
                {
                    LogString.Log("LeftHand Activated");
                    LeftLastPosition  = lastLeftHandFrame;
                    leftHandActivated = true;
                    ignoredCalls      = Configuration.framesSkipped;
                }

                return(true);
            }
            else if (leftHandActivated)
            {
                LogString.Log("LeftHand Deactivated");
                bothHandsActivated = false;
                leftHandActivated  = false;
            }
            return(false);
        }
Exemplo n.º 5
0
 private void CompareSkeletonPoints(TSkeletonPoint skeletonP1, TSkeletonPoint skeletonP2)
 {
     Assert.True(skeletonP1.X == skeletonP2.X);
     Assert.True(skeletonP1.Y == skeletonP2.Y);
     Assert.True(skeletonP1.Z == skeletonP2.Z);
 }
Exemplo n.º 6
0
 /// <summary>
 /// Maps a SkeletonPoint to lie within our render space and converts to Point
 /// </summary>
 /// <param name="skelpoint">point to map</param>
 /// <returns>mapped point</returns>
 public static Point SkeletonPointToScreen(TSkeletonPoint skelpoint)
 {
     return(new Point(((skelpoint.X + 1) * 320), (480 - (skelpoint.Y + 1) * 240)));
 }
Exemplo n.º 7
0
 public static Vector2 ToVector2(this TSkeletonPoint vector)
 {
     return(new Vector2(vector.X, vector.Y));
 }
Exemplo n.º 8
0
 public static Vector3 ToVector3(this TSkeletonPoint vector)
 {
     return(new Vector3(vector.X, vector.Y, vector.Z));
 }