private static extern int GetBodyData(int bodyIndex, ref ObtBody pbodyData);
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); }