void ReplayFrame(ReplayDepthImageFrame df, ReplayColorImageFrame cf, ReplaySkeletonFrame sf) { if (df != null) { labelFrameNumber.Content = df.FrameNumber.ToString(); if (gtReplayer != null) { var data = gtReplayer.GetDataFrame(df.FrameNumber); if (data != null) { UpdateGroundTruthDisplay(data); } } } colorManager.Update(cf, !displayDebug); depthManager.Update(df); UpdateSkeletonDisplay(sf); if (handTracker != null && recogEngine != null) { var result = handTracker.Update(depthManager.PixelData, colorManager.PixelData, SkeletonUtil.FirstTrackedSkeleton(sf.Skeletons)); var gesture = recogEngine.Update(result, viewHog); lock (inputServer) inputServer.Send(gesture); textGestureEvent.Text = gesture; fpsCounter.LogFPS(); UpdateDisplay(result); } }
void kinectRuntime_AllFrameReady(object sender, AllFramesReadyEventArgs e) { // If replaying, bypass this. if (replay != null && !replay.IsFinished) { return; } using (var cf = e.OpenColorImageFrame()) using (var df = e.OpenDepthImageFrame()) using (var sf = e.OpenSkeletonFrame()) { try { if (recorder != null && sf != null && df != null && cf != null) { recorder.Record(sf, df, cf); } } catch (ObjectDisposedException) { } if (cf != null) { colorManager.Update(cf, !displayDebug); } if (df != null) { depthFrameNumber = df.FrameNumber; depthManager.Update(df); } if (sf != null) { UpdateSkeletonDisplay(sf); if (handTracker != null && recogEngine != null) { var result = handTracker.Update(depthManager.PixelData, colorManager.PixelData, SkeletonUtil.FirstTrackedSkeleton(sf.GetSkeletons())); var gesture = recogEngine.Update(result); lock (inputServer) inputServer.Send(gesture); UpdateDisplay(result); textGestureEvent.Text = gesture; fpsCounter.LogFPS(); } } } }
void ProcessFeature() { IHandTracker handTracker = null; Int16[] depthPixelData = null; Byte[] colorPixelData = null; Log.DebugFormat("Start processing {0}...", inputFile); int frameCount = replayer.GetFramesCount(); for (float i = 0; i < frameCount; i += sampleRate) { int index = (int)Math.Round(i); if (index >= frameCount) { break; } var skeletonFrame = replayer.GetSkeletonFrame(index); var depthFrame = replayer.GetDepthFrame(index); var colorFrame = replayer.GetColorFrame(index); if (handTracker == null) { handTracker = (IHandTracker)Activator.CreateInstance(handTrackerType, new Object[] { depthFrame.Width, depthFrame.Height, GetKinectParams(), bufferSize }); } if (featureProcessor == null) { featureProcessor = (IFeatureProcessor)Activator.CreateInstance( featureProcessorType, new Object[] { sampleRate }); } if (depthPixelData == null) { depthPixelData = new Int16[depthFrame.PixelDataLength]; } if (colorPixelData == null) { colorPixelData = new Byte[colorFrame.PixelDataLength]; } depthFrame.CopyPixelDataTo(depthPixelData); colorFrame.CopyPixelDataTo(colorPixelData); var skeleton = SkeletonUtil.FirstTrackedSkeleton(skeletonFrame.Skeletons); var result = handTracker.Update(depthPixelData, colorPixelData, skeleton); Option <Array> feature = featureProcessor.Compute(result); if (feature.IsSome) { if (replayerType == typeof(KinectAllFramesReplay)) { frameList.Add(depthFrame.GetFrameNumber()); } else { int curIndex = (int)Math.Round(i - sampleRate * (bufferSize - 1)); frameList.Add(curIndex); } featureList.Add(feature.Value); } } Log.DebugFormat("Finished processing {0}.", inputFile); }