如何从 Kinect 一次检测 1 个骨架

本文关键字:检测 一次 Kinect | 更新日期: 2023-09-27 17:56:09

我正在使用 Kinect 创建一个应用程序,我一次只想跟踪 1 个人,现在 Kinect 开始检测另一个人在 Kinect 范围内。我编写了以下代码,它可以检测 Kinect 范围内的任何人。请告诉我如何限制它一次只能检测 1 个人。

        /*------------------------------------------
         * SKELETON JOINTS
        --------------------------------------------
         */
        Skeleton[] _skeletons = new Skeleton[0];

        using (SkeletonFrame usingSkeletonFrame = e.OpenSkeletonFrame())
        {
            if (usingSkeletonFrame != null)
            {
               _skeletons = new Skeleton[usingSkeletonFrame.SkeletonArrayLength];
               usingSkeletonFrame.CopySkeletonDataTo(_skeletons);

            }                
        }

        if(_skeletons.Length >0)            
        //  if (_skeletons.Length == SkeletonTrackingState.Tracked)
        {

            isSkeleton = true;
            foreach (Skeleton skl in _skeletons)
            {
                if (skl.TrackingState == SkeletonTrackingState.Tracked)
                {
                    // string str = "";
                    Joint shoulderCenter = skl.Joints[JointType.ShoulderCenter];
                    Joint rightShoulder = skl.Joints[JointType.ShoulderRight];
                    leftShoulder = skl.Joints[JointType.ShoulderLeft];
                    Joint Head = skl.Joints[JointType.Head];

如何从 Kinect 一次检测 1 个骨架

我会看到我在另一个问题上写的答案。

int trackingID;
skeletonTracked = new Skeleton();
bool first = true;
Skeleton skeleton;
Skeleton[] skeletons = new Skeleton[6];
...
public void AllFramesReady(object sender, AllFramesReadyEventArgs e)
{
    using (SkeletonFrame sFrame = e.OpenSkeletonFrame())
    {
        sFrame.CopySkeletonDataTo(skeletons);
        skeleton = (from s in skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s).FirstOrDefault();
        if (skeleton == null)
            return;
        if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
        {
            if (first)
            {
                skeletonTracked = skeleton;
                trackingId = skeleton.TrackingID;
                ...
                first = false;
            }
            if (skeleton.TrackingID == trackingId)
            {
                ...
            }
        }
    }