示例#1
0
        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);
            }
        }
示例#2
0
        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();
                            }
                        }
                    }
        }
示例#3
0
        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);
        }