public void AllFramesReady(object sender, AllFramesReadyEventArgs e) { currentFrame++; using (DepthImageFrame depth = e.OpenDepthImageFrame()) { #region Regular checks #region First if (kinectSensor == null) { return; } GC.Collect(); #endregion Skeleton first = Utility.GetFirstSkeleton.Get(e, allSkeletons); #region Second if (first == null) { return; } #endregion #endregion if (CurrentMode == Mode.FillingWindow) { window.Add(new ImportedSkeleton(first), ACCEPTABLE_WINDOW_SIZE); if (window.Size >= ACCEPTABLE_WINDOW_SIZE) { CurrentMode = Mode.AlgorithmRunning; } } if (CurrentMode == Mode.AlgorithmRunning) { if (currentFrame % 2 == 0) { foreach (var activity in Activities) { double overallResult = 0.0; foreach (var activityRecord in activity.Recordings) { var activityRecordResult = 0.0; if (AlgorithmType == AlgorithmTypes.DTW) { activityRecordResult = DTW(activityRecord, window, DynamicTimeWarpingCalculationType.Standart, StepPattern, true); } else if (AlgorithmType == AlgorithmTypes.DLM) { activityRecordResult = ElasticMatchingWithFreedomDegree.CompareActivities(activityRecord, window); } overallResult += activityRecordResult; } overallResult /= activity.Recordings.Count; var currentAlgorithmAcceptableActionSimilarity = 0; if (AlgorithmType == AlgorithmTypes.DTW) { currentAlgorithmAcceptableActionSimilarity = AcceptableActionSimilarity.DTW; } else if (AlgorithmType == AlgorithmTypes.DLM) { currentAlgorithmAcceptableActionSimilarity = AcceptableActionSimilarity.DLM; } if (overallResult <= currentAlgorithmAcceptableActionSimilarity && !activityRecognizingStartedTriggered) { activityRecognizingStartedTriggered = true; activityRecognizingEndedTriggered = false; ActivityRecognizingStarted.Invoke(this, new ActivityRecognizingEventArgs(activity, overallResult)); recognizedActivityName = activity.Name; } else if (overallResult > currentAlgorithmAcceptableActionSimilarity && !activityRecognizingEndedTriggered && recognizedActivityName == activity.Name) { activityRecognizingEndedTriggered = true; activityRecognizingStartedTriggered = false; ActivityRecognizingEnded.Invoke(this, new ActivityRecognizingEventArgs(activity, overallResult)); } Console.WriteLine(overallResult); } Console.WriteLine(); } CurrentMode = Mode.FillingWindow; } if (CurrentMode == Mode.ToSelectMainSkeleton) { CurrentMode = Mode.None; mainSkeleton = first; JointAnglesManager jointManager = new JointAnglesManager(first); mainSkeletonWithAngles = jointManager.GetComputedAngles(mainSkeleton); } if (CurrentMode == Mode.ComparingSkeletons) { ///Debug data - Most informative joints List <JointType> joints = new List <JointType>(); joints.Add(JointType.ShoulderLeft); joints.Add(JointType.ShoulderRight); joints.Add(JointType.Head); joints.Add(JointType.ElbowLeft); joints.Add(JointType.ElbowRight); /// Skeleton secondarySkeleton = first; var jointManager = new JointAnglesManager(secondarySkeleton); var secondarySkeletonWithAngles = jointManager.GetComputedAngles(secondarySkeleton); var result = SkeletonComparer.CompareWithSMIJ(mainSkeletonWithAngles, secondarySkeletonWithAngles, joints); Console.WriteLine("Skeleton comparison: {0}", result); if (result < ACCEPTABLE_SKELETON_SIMILARITY) { PoseRecognizedEventArgs args = new PoseRecognizedEventArgs(result); PoseReconized.Invoke(this, args); } } } }
public void AllFramesReady(object sender, AllFramesReadyEventArgs e) { currentFrame++; using (DepthImageFrame depth = e.OpenDepthImageFrame()) { #region Regular checks #region First if (kinectSensor == null) { return; } GC.Collect(); #endregion Skeleton first = Utility.GetFirstSkeleton.Get(e, allSkeletons); #region Second if (first == null) { return; } #endregion #endregion if (CurrentMode == Mode.FillingWindow) { window.Add(new ImportedSkeleton(first), ACCEPTABLE_WINDOW_SIZE); if (window.Size >= ACCEPTABLE_WINDOW_SIZE) { CurrentMode = Mode.AlgorithmRunning; } } if (CurrentMode == Mode.AlgorithmRunning) { if (currentFrame % 2 == 0) { foreach (var activity in Activities) { double overallResult = 0.0; foreach (var activityRecord in activity.Recordings) { var activityRecordResult = 0.0; if (AlgorithmType == AlgorithmTypes.DTW) { activityRecordResult = DTW(activityRecord, window, DynamicTimeWarpingCalculationType.Standart, StepPattern, true); } else if (AlgorithmType == AlgorithmTypes.DLM) { activityRecordResult = ElasticMatchingWithFreedomDegree.CompareActivities(activityRecord, window); } overallResult += activityRecordResult; } overallResult /= activity.Recordings.Count; var currentAlgorithmAcceptableActionSimilarity = 0; if (AlgorithmType == AlgorithmTypes.DTW) { currentAlgorithmAcceptableActionSimilarity = AcceptableActionSimilarity.DTW; } else if(AlgorithmType == AlgorithmTypes.DLM){ currentAlgorithmAcceptableActionSimilarity = AcceptableActionSimilarity.DLM; } if (overallResult <= currentAlgorithmAcceptableActionSimilarity && !activityRecognizingStartedTriggered) { activityRecognizingStartedTriggered = true; activityRecognizingEndedTriggered = false; ActivityRecognizingStarted.Invoke(this, new ActivityRecognizingEventArgs(activity, overallResult)); recognizedActivityName = activity.Name; } else if (overallResult > currentAlgorithmAcceptableActionSimilarity && !activityRecognizingEndedTriggered && recognizedActivityName == activity.Name) { activityRecognizingEndedTriggered = true; activityRecognizingStartedTriggered = false; ActivityRecognizingEnded.Invoke(this, new ActivityRecognizingEventArgs(activity, overallResult)); } Console.WriteLine(overallResult); } Console.WriteLine(); } CurrentMode = Mode.FillingWindow; } if (CurrentMode == Mode.ToSelectMainSkeleton) { CurrentMode = Mode.None; mainSkeleton = first; JointAnglesManager jointManager = new JointAnglesManager(first); mainSkeletonWithAngles = jointManager.GetComputedAngles(mainSkeleton); } if (CurrentMode == Mode.ComparingSkeletons) { ///Debug data - Most informative joints List<JointType> joints = new List<JointType>(); joints.Add(JointType.ShoulderLeft); joints.Add(JointType.ShoulderRight); joints.Add(JointType.Head); joints.Add(JointType.ElbowLeft); joints.Add(JointType.ElbowRight); /// Skeleton secondarySkeleton = first; var jointManager = new JointAnglesManager(secondarySkeleton); var secondarySkeletonWithAngles = jointManager.GetComputedAngles(secondarySkeleton); var result = SkeletonComparer.CompareWithSMIJ(mainSkeletonWithAngles, secondarySkeletonWithAngles, joints); Console.WriteLine("Skeleton comparison: {0}", result); if (result < ACCEPTABLE_SKELETON_SIMILARITY) { PoseRecognizedEventArgs args = new PoseRecognizedEventArgs(result); PoseReconized.Invoke(this, args); } } } }
void recognitionCore_PoseReconized(object sender, PoseRecognizedEventArgs e) { poseRecognitionResult = e.Result; toDrawSuccessText = true; }