private bool IsValid(GesturePosition gesturePosition) { bool isValid = gesturePosition.RightHand.Y > gesturePosition.RightShoulder.Y && gesturePosition.LeftHand.Y > gesturePosition.LeftShoulder.Y; return isValid; }
private void ValidateTime(object value) { if ((DateTime.Now - LastUpdate()).TotalSeconds > 1) { _initialGesture = null; } }
private void Initialize(GesturePosition gesturePosition) { if (IsStart(gesturePosition)) { System.Diagnostics.Debug.WriteLine("Got initial gesture!"); if(_initialGesture == null) _initialGesture = gesturePosition; else if (GetDistance(gesturePosition) < GetDistance(_initialGesture)) _initialGesture = gesturePosition; } }
private bool IsStart(GesturePosition gesturePosition) { return .06 > Math.Abs((gesturePosition.RightHand - gesturePosition.LeftHand).Length); }
private double GetRatio(GesturePosition gesturePosition) { double handDist = GetDistance(gesturePosition) - GetDistance(_initialGesture); double shoulderDist = Math.Abs((gesturePosition.RightShoulder - gesturePosition.LeftShoulder).Length); double ratio = (handDist/3)/shoulderDist; return Math.Max(0, Math.Min(1, ratio)); }
private double GetDistance(GesturePosition gesturePosition) { return Math.Abs((gesturePosition.RightHand - gesturePosition.LeftHand).Length); }
public void UpdatePosition(GesturePosition gesturePostition) { if((DateTime.Now - LastUpdate()).TotalSeconds > 1) UpdateTime(); gesturePostition.PrintGesture(); // if (!IsValid(gesturePostition)) // { // _initialGesture = null; // return; // } // Initialize(gesturePostition); // if(_initialGesture != null) // CurrentPortion = GetRatio(gesturePostition); // if (DateTime.Now - new TimeSpan(0, 0, 1) > _lastPrint) // { // gesturePostition.PrintGesture(); // double handDistance = Math.Abs((gesturePostition.RightHand - gesturePostition.LeftHand).Length); // double shoulderDistance = // Math.Abs((gesturePostition.RightShoulder - gesturePostition.LeftShoulder).Length); // System.Diagnostics.Debug.WriteLine("Hand Distance: {0}", handDistance); // System.Diagnostics.Debug.WriteLine("Shoulder Distance: {0}", shoulderDistance); // _lastPrint = DateTime.Now; // } }
// public double GesturePortion { get { return _gestureState.CurrentPortion; } } private void SkeletonFrameReady(object sender, BodyFrameArrivedEventArgs e) { using (BodyFrame bodyFrame = e.FrameReference.AcquireFrame()) // Open the Skeleton frame { if (bodyFrame != null) { if (_bodies == null) { _bodies = new Body[bodyFrame.BodyCount]; _gesturePositions = new GesturePosition[bodyFrame.BodyCount]; for (int i = 0; i < _gesturePositions.Length; i++) { _gesturePositions[i] = new GesturePosition() {IsTracked = false}; } } bodyFrame.GetAndRefreshBodyData(this._bodies); HandleSkeletonUpdate(_bodies); } } }
private void HandleGestureUpdate(GesturePosition[] gesturePositions, int lastBodyIndex) { lock (_taskLock) { if (_currentTask != null) { return; } _currentTask = Task.Factory.StartNew(() => { try { GesturePosition gesturePosition = gesturePositions[_bodyIndex]; IOrdering ordering = null; if (gesturePosition.IsTracked) { ordering = GetOrdering(Scene, gesturePosition.Head); } lock (_gestureLock) { if (ordering != null) _ordering = ordering; if (!_tracked && gesturePosition.IsTracked) _restart = true; _tracked = gesturePosition.IsTracked; _isLast = _bodyIndex == lastBodyIndex; } } finally { lock (_taskLock) { _currentTask = null; } } }); } }