Пример #1
0
        public ClosestBodyFrame(Windows.Kinect.BodyFrame bf, double engageMin, double engageMax)
        {
            Type = FrameType.ClosestBody;

            engageBeginBoundZ = engageMin;
            engageEndBoundZ   = engageMax;

            Body[] bodies = new Body[bf.BodyCount];
            bf.GetAndRefreshBodyData(bodies);

            double closestDistance = Double.MaxValue;

            for (int i = 0; i < bodies.Length; i++)
            {
                var body = bodies[i];

                if (body.IsTracked)
                {
                    TrackedCount++;
                }

                double distance = DistanceFromKinect(body);

                if (IsEngaged(distance))
                {
                    if (body.TrackingId == lastEngagedTrackingId)
                    {
                        closestBody  = body;
                        closestIndex = i;
                        break;
                    }
                    else if (distance < closestDistance)
                    {
                        closestBody     = body;
                        closestDistance = distance;
                        closestIndex    = i;
                    }
                }
            }

            // Enagaged implies BodyFound
            Debug.Assert(!Engaged || BodyFound);

            if (!BodyFound)
            {
                lastEngagedTrackingId = 0;
            }
            else if (TrackingId != lastEngagedTrackingId)
            {
                lastEngagedTrackingId = TrackingId;
            }

            //Debug.WriteLine("Number of tracked bodies: {0}", trackedCount);
        }
Пример #2
0
    void _floorPlaneNewFrame(object sender, BodyFrame frame)
    {
        if (_bodySourceManager.getReader () != null) {
            if (frame != null) {

                _vec4 = frame.FloorClipPlane;
                //Debug.Log(_vec4.W);
                _plane.transform.position = new Vector3 (-4, _vec4.W * (-1), 1);
                //_plane.transform.Translate(new Vector3(0.1f,0.1f,0.1f));
            }
        }
    }
Пример #3
0
    void _floorPlaneNewFrame(object sender, BodyFrame frame)
    {
        if (_bodySourceManager.getReader () != null) {
            if (frame != null) {

                _vec4 = frame.FloorClipPlane;
                //Debug.Log(_vec4.W);
                _plane.transform.position = new Vector3 (-4, _vec4.W * (-1), 5);

                Probe.transform.position =_plane.transform.position +adjustment;
                Room.transform.position = _plane.transform.position + adjustment;
            }
        }
    }
Пример #4
0
    public Status Update()
    {
        Kinect.MultiSourceFrame frame = _Reader.AcquireLatestFrame();
        if (frame == null)
        {
            //Debug.LogWarning("Frame not arrived");
            return(Status.ZeroBody);
        }

        Kinect.DepthFrame depthFrame = frame.DepthFrameReference.AcquireFrame();

        if (depthFrame == null)
        {
            return(Status.ZeroBody);
        }

        depthFrame.CopyFrameDataToArray(DepthData);
        depthFrame.Dispose();
        depthFrame = null;

        Kinect.BodyFrame bodyFrame = frame.BodyFrameReference.AcquireFrame();

        if (bodyFrame == null)
        {
            return(Status.ZeroBody);
        }

        bodyFrame.GetAndRefreshBodyData(_BodyData);
        bodyFrame.Dispose();
        bodyFrame = null;

        int    bodyIdx;
        Status status;

        checkTrackedBody(out bodyIdx, out status);
        if (status != Status.ZeroBody)
        {
            JointData            = _BodyData[bodyIdx].Joints;
            JointOriendationData = _BodyData[bodyIdx].JointOrientations;
        }

        return(status);
    }
    public bool GetMultiSourceFrame(KinectInterop.SensorData sensorData)
    {
        if(multiSourceFrameReader != null)
        {
            multiSourceFrame = multiSourceFrameReader.AcquireLatestFrame();

            if(multiSourceFrame != null)
            {
                // try to get all frames at once
                msBodyFrame = (sensorFlags & KinectInterop.FrameSource.TypeBody) != 0 ? multiSourceFrame.BodyFrameReference.AcquireFrame() : null;
                msBodyIndexFrame = (sensorFlags & KinectInterop.FrameSource.TypeBodyIndex) != 0 ? multiSourceFrame.BodyIndexFrameReference.AcquireFrame() : null;
                msColorFrame = (sensorFlags & KinectInterop.FrameSource.TypeColor) != 0 ? multiSourceFrame.ColorFrameReference.AcquireFrame() : null;
                msDepthFrame = (sensorFlags & KinectInterop.FrameSource.TypeDepth) != 0 ? multiSourceFrame.DepthFrameReference.AcquireFrame() : null;
                msInfraredFrame = (sensorFlags & KinectInterop.FrameSource.TypeInfrared) != 0 ? multiSourceFrame.InfraredFrameReference.AcquireFrame() : null;

                bool bAllSet =
                    ((sensorFlags & KinectInterop.FrameSource.TypeBody) == 0 || msBodyFrame != null) &&
                    ((sensorFlags & KinectInterop.FrameSource.TypeBodyIndex) == 0 || msBodyIndexFrame != null) &&
                    ((sensorFlags & KinectInterop.FrameSource.TypeColor) == 0 || msColorFrame != null) &&
                    ((sensorFlags & KinectInterop.FrameSource.TypeDepth) == 0 || msDepthFrame != null) &&
                    ((sensorFlags & KinectInterop.FrameSource.TypeInfrared) == 0 || msInfraredFrame != null);

                if(!bAllSet)
                {
                    // release all frames
                    if(msBodyFrame != null)
                    {
                        msBodyFrame.Dispose();
                        msBodyFrame = null;
                    }

                    if(msBodyIndexFrame != null)
                    {
                        msBodyIndexFrame.Dispose();
                        msBodyIndexFrame = null;
                    }

                    if(msColorFrame != null)
                    {
                        msColorFrame.Dispose();
                        msColorFrame = null;
                    }

                    if(msDepthFrame != null)
                    {
                        msDepthFrame.Dispose();
                        msDepthFrame = null;
                    }

                    if(msInfraredFrame != null)
                    {
                        msInfraredFrame.Dispose();
                        msInfraredFrame = null;
                    }
                }
        //				else
        //				{
        //					bool bNeedBody = (sensorFlags & KinectInterop.FrameSource.TypeBody) != 0;
        //					bool bNeedBodyIndex = (sensorFlags & KinectInterop.FrameSource.TypeBodyIndex) != 0;
        //					bool bNeedColor = (sensorFlags & KinectInterop.FrameSource.TypeColor) != 0;
        //					bool bNeedDepth = (sensorFlags & KinectInterop.FrameSource.TypeDepth) != 0;
        //					bool bNeedInfrared = (sensorFlags & KinectInterop.FrameSource.TypeInfrared) != 0;
        //
        //					bAllSet = true;
        //				}
            }

            return (multiSourceFrame != null);
        }

        return false;
    }
    public void FreeMultiSourceFrame(KinectInterop.SensorData sensorData)
    {
        // release all frames
        if(msBodyFrame != null)
        {
            msBodyFrame.Dispose();
            msBodyFrame = null;
        }

        if(msBodyIndexFrame != null)
        {
            msBodyIndexFrame.Dispose();
            msBodyIndexFrame = null;
        }

        if(msColorFrame != null)
        {
            msColorFrame.Dispose();
            msColorFrame = null;
        }

        if(msDepthFrame != null)
        {
            msDepthFrame.Dispose();
            msDepthFrame = null;
        }

        if(msInfraredFrame != null)
        {
            msInfraredFrame.Dispose();
            msInfraredFrame = null;
        }

        if(multiSourceFrame != null)
        {
            multiSourceFrame = null;
        }
    }
Пример #7
0
    // Update is called once per frame
    void Update()
    {
        // process bodies
        bool newBodyData = false;

        using (Kinect.BodyFrame bodyFrame = this.bodyFrameReader.AcquireLatestFrame()) {
            if (bodyFrame != null)
            {
                bodyFrame.GetAndRefreshBodyData(this.bodies);
                newBodyData = true;
            }
        }


        if (newBodyData)
        {
            List <ulong> trackedIds = new List <ulong>();
            foreach (var body in bodies)
            {
                if (body == null)
                {
                    continue;
                }

                if (body.IsTracked)
                {
                    trackedIds.Add(body.TrackingId);
                }
            }

            List <ulong> knownIds = new List <ulong>(_Bodies.Keys);

            // First delete untracked bodies
            foreach (ulong trackingId in knownIds)
            {
                if (!trackedIds.Contains(trackingId))
                {
                    Destroy(_Bodies[trackingId]);
                    _Bodies.Remove(trackingId);
                }
            }
            // update gesture detectors with the correct tracking id
            for (int bodyIndex = 0; bodyIndex < this.bodyCount; bodyIndex++)
            {
                var body = this.bodies [bodyIndex];

                if (body != null)
                {
                    var trackingId = body.TrackingId;
                    if (body.IsTracked == true)
                    {
                        thisbody = bodyIndex;
                        handasmouse(body);

                        if (!_Bodies.ContainsKey(body.TrackingId))
                        {
                            Debug.Log("Create");
                            _Bodies [body.TrackingId] = CreateBodyObject(body.TrackingId);
                        }
                        Debug.Log("RE");
                        RefreshBodyObject(body, _Bodies [body.TrackingId]);

                        //	real_time_real_time_skeleton_detect (body);
                    }
                    // if the current body TrackingId changed, update the corresponding gesture detector with the new value

                    /*
                     * if (trackingId != this.gestureDetectorList [bodyIndex].TrackingId) {
                     *      //GestureTextGameObject.text = "none";
                     *
                     *      //this.bodyText[bodyIndex] = "none";
                     *      this.gestureDetectorList [bodyIndex].TrackingId = trackingId;
                     *
                     *      // if the current body is tracked, unpause its detector to get VisualGestureBuilderFrameArrived events
                     *      // if the current body is not tracked, pause its detector so we don't waste resources trying to get invalid gesture results
                     *      this.gestureDetectorList [bodyIndex].IsPaused = (trackingId == 0);
                     *      this.gestureDetectorList [bodyIndex].OnGestureDetected += CreateOnGestureHandler (bodyIndex);
                     * }*/
                }
            }
        }
    }
    void Update()
    {
        if (_Reader != null)
        {

            _Frame = _Reader.AcquireLatestFrame();
            if (_Frame != null)
            {
                //_vec4 = _Frame.FloorClipPlane;
                //Vector3 normalVector = new Vector3 (_vec4.X, _vec4.Y, _vec4.Z);

                if (_Data == null)
                {
                    _Data = new Body[_Sensor.BodyFrameSource.BodyCount];

                }
                _Frame.GetAndRefreshBodyData(_Data);

                NewFrame(this, _Frame);

                _Frame.Dispose();
                _Frame = null;
            }
        }
    }