Exemple #1
0
 private static extern int GetBodyData(int bodyIndex, ref ObtBody pbodyData);
Exemple #2
0
    public KinectInterop.SensorData OpenDefaultSensor(KinectInterop.FrameSource dwFlags, float sensorAngle, bool bUseMultiSource)
    {
        // init interface
        int hr = InitAstraInterface();

        if (hr != 0)
        {
            return(null);
        }

        bMultiSource = bUseMultiSource;

        KinectInterop.SensorData sensorData = new KinectInterop.SensorData();

        if ((dwFlags & KinectInterop.FrameSource.TypeColor) != 0)
        {
            hr = OpenAstraColorStream();

            // try to get a color frame
            hr = PollColorFrame(500);
            if (hr == 0)
            {
                ReleaseColorFrame();
            }

            if (hr != 0)
            {
                bWebColorStream = true;

                for (int i = 0; i < WebCamTexture.devices.Length; i++)
                {
                    if (WebCamTexture.devices[i].name.IndexOf("astra", StringComparison.CurrentCultureIgnoreCase) >= 0)
                    {
                        colorWebCam = new WebCamTexture(WebCamTexture.devices[i].name);
                        break;
                    }
                }

                if (colorWebCam)
                {
                    colorWebCam.Play();

                    sensorData.colorImageWidth   = colorWebCam.width;
                    sensorData.colorImageHeight  = colorWebCam.height;
                    sensorData.colorImageTexture = colorWebCam;

                    Debug.Log("Webcam - vMirrored: " + colorWebCam.videoVerticallyMirrored + ", rotAngle: " + colorWebCam.videoRotationAngle);
                }
            }
        }

        if ((dwFlags & KinectInterop.FrameSource.TypeDepth) != 0)
        {
            hr = OpenAstraDepthStream();

            // try to get a depth frame
            hr = PollDepthFrame(500);
            if (hr == 0)
            {
                ReleaseDepthFrame();
            }
        }

        if (((dwFlags & KinectInterop.FrameSource.TypeBodyIndex) != 0) ||
            ((dwFlags & KinectInterop.FrameSource.TypeBody) != 0))
        {
            hr = OpenAstraBodyStream();

            if (hr == 0)
            {
                obtBody        = new ObtBody();
                obtBody.joints = new ObtJoint[OBT_MAX_JOINTS];

                obtBodyInited = true;
            }
        }

//		if((dwFlags & KinectInterop.FrameSource.TypeInfrared) != 0)
//		{
//		}

        sensorData.bodyCount  = Constants.SkeletonCount;
        sensorData.jointCount = Constants.JointCount;

        sensorData.depthCameraFOV    = 49.5f;
        sensorData.colorCameraFOV    = 48.6f;
        sensorData.depthCameraOffset = 0f;
        sensorData.faceOverlayOffset = 0f;

        if (!bWebColorStream)
        {
            sensorData.colorImageWidth  = GetColorWidth();
            sensorData.colorImageHeight = GetColorHeight();
        }

        // flip color image horizontally
        sensorData.colorImageScale = new Vector3(-1f, 1f, 1f);

        sensorData.depthImageWidth  = GetDepthWidth();
        sensorData.depthImageHeight = GetDepthHeight();

        if ((dwFlags & KinectInterop.FrameSource.TypeColor) != 0)
        {
            int colorImageSize = GetColorDataSize();
            sensorData.colorImage = new byte[colorImageSize];
        }

        if ((dwFlags & KinectInterop.FrameSource.TypeDepth) != 0)
        {
            int depthImageSize = GetDepthDataSize() / sizeof(ushort);
            sensorData.depthImage = new ushort[depthImageSize];
        }

        if ((dwFlags & KinectInterop.FrameSource.TypeBodyIndex) != 0)
        {
            int bodyIndexImageSize = GetBodyIndexDataSize();
            sensorData.bodyIndexImage = new byte[bodyIndexImageSize];
        }

        if ((dwFlags & KinectInterop.FrameSource.TypeInfrared) != 0)
        {
            int depthImageSize = GetDepthDataSize() / sizeof(ushort);
            sensorData.infraredImage = new ushort[depthImageSize];
        }

        Debug.Log("Orbbec Astra sensor opened");

        return(sensorData);
    }
    public KinectInterop.SensorData OpenDefaultSensor(KinectInterop.FrameSource dwFlags, float sensorAngle, bool bUseMultiSource)
    {
        // init interface
        int hr = InitAstraInterface();

        if (hr != 0)
        {
            return(null);
        }

        sensorFlags  = dwFlags;
        bMultiSource = bUseMultiSource;

        KinectInterop.SensorData sensorData = new KinectInterop.SensorData();

        if ((dwFlags & KinectInterop.FrameSource.TypeColor) != 0)
        {
            hr = OpenAstraColorStream();

            // try to get a color frame
            hr = PollColorFrame(500);
            if (hr == 0)
            {
                ReleaseColorFrame();
                Debug.Log("Astra-sensor detected");
            }

            if (hr != 0)
            {
                bWebColorStream = true;
                isAstraPro      = true;
                Debug.Log("AstraPro camera detected.");

                for (int i = 0; i < WebCamTexture.devices.Length; i++)
                {
                    Debug.Log(WebCamTexture.devices [i].name);
                    if (WebCamTexture.devices[i].name.IndexOf("astra", StringComparison.CurrentCultureIgnoreCase) >= 0)
                    {
                        colorWebCam = new WebCamTexture(WebCamTexture.devices[i].name, 640, 480, 30);
                        break;
                    }
                }

                if (colorWebCam)
                {
                    colorWebCam.Play();

                    sensorData.colorImageWidth   = colorWebCam.width;
                    sensorData.colorImageHeight  = colorWebCam.height;
                    sensorData.colorImageTexture = colorWebCam;

                    //Debug.Log("Webcam - vMirrored: " + colorWebCam.videoVerticallyMirrored + ", rotAngle: " + colorWebCam.videoRotationAngle);
                }
            }
        }

        if ((dwFlags & KinectInterop.FrameSource.TypeDepth) != 0)
        {
            hr = OpenAstraDepthStream();

            // try to get a depth frame
            hr = PollDepthFrame(500);
            if (hr == 0)
            {
                ReleaseDepthFrame();
            }
        }

        if (((dwFlags & KinectInterop.FrameSource.TypeBodyIndex) != 0) ||
            ((dwFlags & KinectInterop.FrameSource.TypeBody) != 0))
        {
            hr = OpenAstraBodyStream();

            if (hr == 0)
            {
                obtBody        = new ObtBody();
                obtBody.joints = new ObtJoint[OBT_MAX_JOINTS];

                obtBodyInited = true;
            }
        }

//		if((dwFlags & KinectInterop.FrameSource.TypeInfrared) != 0)
//		{
//		}

        sensorData.bodyCount  = Constants.SkeletonCount;
        sensorData.jointCount = Constants.JointCount;

        sensorData.depthCameraFOV    = 45.64f;
        sensorData.colorCameraFOV    = 45.64f;
        sensorData.depthCameraOffset = 0f;
        sensorData.faceOverlayOffset = 0f;

        if (!bWebColorStream)
        {
            sensorData.colorImageWidth  = GetColorWidth();
            sensorData.colorImageHeight = GetColorHeight();

            // flip color image vertically
            sensorData.colorImageScale = new Vector3(1f, -1f, 1f);
        }
        else
        {
            // flip color image horizontally
            sensorData.colorImageScale = new Vector3(-1f, 1f, 1f);
        }

        sensorData.depthImageWidth  = GetDepthWidth();
        sensorData.depthImageHeight = GetDepthHeight();

        if ((dwFlags & KinectInterop.FrameSource.TypeColor) != 0)
        {
            int colorImageSize = !colorWebCam ? (GetColorDataSize() * 4 / 3) : 0;
            sensorData.colorImage = new byte[colorImageSize];
        }

        if ((dwFlags & KinectInterop.FrameSource.TypeDepth) != 0)
        {
            int depthImageSize = GetDepthDataSize() / sizeof(ushort);
            sensorData.depthImage = new ushort[depthImageSize];
        }

        if ((dwFlags & KinectInterop.FrameSource.TypeBodyIndex) != 0)
        {
            int bodyIndexImageSize = GetBodyIndexDataSize();
            sensorData.bodyIndexImage = new byte[bodyIndexImageSize];
        }

        if ((dwFlags & KinectInterop.FrameSource.TypeInfrared) != 0)
        {
            int depthImageSize = GetDepthDataSize() / sizeof(ushort);
            sensorData.infraredImage = new ushort[depthImageSize];
        }

        // setup coordinate mapper
        coordMapper = new OrbbecAstraMapper();
        coordMapper.SetupSpaceMapping(sensorData.depthImageWidth, sensorData.depthImageHeight, 1.0226f, 0.7966157f);          // hfov, vfov in rad
        coordMapper.SetupCalibrationData(isAstraPro);

        // set lost-user time tolerance equal to KM
        if (KinectManager.Instance != null)
        {
            waitTimeBeforeRemove = KinectManager.Instance.waitTimeBeforeRemove;
        }

        // enable depth-to-color sync, if needed
        if (bMultiSource && ((dwFlags & KinectInterop.FrameSource.TypeColor) != 0) && ((dwFlags & KinectInterop.FrameSource.TypeDepth) != 0))
        {
            //hr = EnableDepthColorSync(1);
        }

        Debug.Log("OrbbecAstra sensor opened");

        return(sensorData);
    }