t1 / TFDContents / Assets / KinectScripts / Interfaces / OpenNI2Interface.cs @ 3
이력 | 보기 | 이력해설 | 다운로드 (32.1 KB)
| 1 |
using UnityEngine; |
|---|---|
| 2 |
using System.Collections; |
| 3 |
using System.Collections.Generic; |
| 4 |
using System.Runtime.InteropServices; |
| 5 |
using System; |
| 6 |
using System.IO; |
| 7 |
|
| 8 |
|
| 9 |
public class OpenNI2Interface : DepthSensorInterface |
| 10 |
{
|
| 11 |
|
| 12 |
private static class Constants |
| 13 |
{
|
| 14 |
public const int SkeletonCount = 6; |
| 15 |
public const int JointCount = 20; |
| 16 |
public const float SmoothingFactor = 0.7f; |
| 17 |
|
| 18 |
|
| 19 |
public static readonly int[] BodyJoint2OniJoint = {
|
| 20 |
(int)SkeletonJoint.HIPS, //SpineBase |
| 21 |
-1, //SpineMid |
| 22 |
(int)SkeletonJoint.NECK, //Neck |
| 23 |
(int)SkeletonJoint.HEAD, //Head |
| 24 |
(int)SkeletonJoint.LEFT_SHOULDER, //ShoulderLeft |
| 25 |
(int)SkeletonJoint.LEFT_ELBOW, //ElbowLeft |
| 26 |
-1, //WristLeft |
| 27 |
(int)SkeletonJoint.LEFT_HAND, //HandLeft |
| 28 |
(int)SkeletonJoint.RIGHT_SHOULDER, //ShoulderRight |
| 29 |
(int)SkeletonJoint.RIGHT_ELBOW, //ElbowRight |
| 30 |
-1, //WristRight |
| 31 |
(int)SkeletonJoint.RIGHT_HAND, //HandRight |
| 32 |
(int)SkeletonJoint.LEFT_HIP, //HipLeft |
| 33 |
(int)SkeletonJoint.LEFT_KNEE, //KneeLeft |
| 34 |
(int)SkeletonJoint.LEFT_FOOT, //AnkleLeft |
| 35 |
-1, //FootLeft |
| 36 |
(int)SkeletonJoint.RIGHT_HIP, //HipRight |
| 37 |
(int)SkeletonJoint.RIGHT_KNEE, //KneeRight |
| 38 |
(int)SkeletonJoint.RIGHT_FOOT, //AnkleRight |
| 39 |
-1 //FootRight |
| 40 |
}; |
| 41 |
} |
| 42 |
|
| 43 |
public enum SkeletonJoint |
| 44 |
{
|
| 45 |
HEAD = 0, |
| 46 |
NECK = 1, |
| 47 |
|
| 48 |
LEFT_SHOULDER = 2, |
| 49 |
RIGHT_SHOULDER = 3, |
| 50 |
LEFT_ELBOW = 4, |
| 51 |
RIGHT_ELBOW = 5, |
| 52 |
LEFT_HAND = 6, |
| 53 |
RIGHT_HAND = 7, |
| 54 |
|
| 55 |
HIPS = 8, |
| 56 |
|
| 57 |
LEFT_HIP = 9, |
| 58 |
RIGHT_HIP = 10, |
| 59 |
LEFT_KNEE = 11, |
| 60 |
RIGHT_KNEE = 12, |
| 61 |
LEFT_FOOT = 13, |
| 62 |
RIGHT_FOOT = 14 |
| 63 |
}; |
| 64 |
|
| 65 |
// Struct to store the joint's poision. |
| 66 |
public struct SkeletonJointPosition |
| 67 |
{
|
| 68 |
public float x, y, z; |
| 69 |
} |
| 70 |
|
| 71 |
// Struct that will hold the joints orientation. |
| 72 |
public struct SkeletonJointOrientation |
| 73 |
{
|
| 74 |
public float x, y, z, w; |
| 75 |
} |
| 76 |
|
| 77 |
// Struct that combines the previous two and makes the transform. |
| 78 |
public struct SkeletonJointTransformation |
| 79 |
{
|
| 80 |
public SkeletonJoint jointType; |
| 81 |
public SkeletonJointPosition position; |
| 82 |
public float positionConfidence; |
| 83 |
public SkeletonJointOrientation orientation; |
| 84 |
public float orientationConfidence; |
| 85 |
} |
| 86 |
|
| 87 |
private short[] oniUsers = new short[Constants.SkeletonCount]; |
| 88 |
private short[] oniStates = new short[Constants.SkeletonCount]; |
| 89 |
private Int32 oniUsersCount = 0; |
| 90 |
|
| 91 |
private List<uint> allUsers = new List<uint>(); |
| 92 |
private SkeletonJointPosition jointPosition = new SkeletonJointPosition(); |
| 93 |
|
| 94 |
private int usersMapSize = 0; |
| 95 |
private short[] usersLabelMap; |
| 96 |
private short[] usersDepthMap; |
| 97 |
|
| 98 |
private int usersClrSize = 0; |
| 99 |
private byte[] usersColorMap; |
| 100 |
|
| 101 |
private bool bBackgroundRemovalInited = false; |
| 102 |
|
| 103 |
[DllImport("UnityInterface2")]
|
| 104 |
private static extern int GetDeviceCount(out int pCount); |
| 105 |
[DllImport("UnityInterface2", EntryPoint = "Init", SetLastError = true)]
|
| 106 |
private static extern int InitNative(bool isInitDepthStream, bool isInitColorStream, bool isInitInfraredStream); |
| 107 |
[DllImport("UnityInterface2", EntryPoint = "Shutdown", SetLastError = true)]
|
| 108 |
private static extern void ShutdownNative(); |
| 109 |
[DllImport("UnityInterface2", EntryPoint = "Update", SetLastError = true)]
|
| 110 |
private static extern int UpdateNative([MarshalAs(UnmanagedType.LPArray, SizeParamIndex = Constants.SkeletonCount, ArraySubType = UnmanagedType.U2)] short[] pUsers, |
| 111 |
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex = Constants.SkeletonCount, ArraySubType = UnmanagedType.U2)] short[] pStates, ref int pUsersCount); |
| 112 |
|
| 113 |
[DllImport("UnityInterface2")]
|
| 114 |
private static extern IntPtr GetLastErrorString(); |
| 115 |
[DllImport("UnityInterface2", SetLastError = true)]
|
| 116 |
private static extern int GetDepthWidth(); |
| 117 |
[DllImport("UnityInterface2", SetLastError = true)]
|
| 118 |
private static extern int GetDepthHeight(); |
| 119 |
[DllImport("UnityInterface2", SetLastError = true)]
|
| 120 |
private static extern int GetInfraredWidth(); |
| 121 |
[DllImport("UnityInterface2", SetLastError = true)]
|
| 122 |
private static extern int GetInfraredHeight(); |
| 123 |
[DllImport("UnityInterface2", SetLastError = true)]
|
| 124 |
private static extern int GetColorWidth(); |
| 125 |
[DllImport("UnityInterface2", SetLastError = true)]
|
| 126 |
private static extern int GetColorHeight(); |
| 127 |
[DllImport("UnityInterface2", SetLastError = true)]
|
| 128 |
private static extern IntPtr GetUsersLabelMap(); |
| 129 |
[DllImport("UnityInterface2", SetLastError = true)]
|
| 130 |
private static extern IntPtr GetUsersDepthMap(); |
| 131 |
[DllImport("UnityInterface2", SetLastError = true)]
|
| 132 |
private static extern IntPtr GetUsersInfraredMap(); |
| 133 |
[DllImport("UnityInterface2", SetLastError = true)]
|
| 134 |
private static extern IntPtr GetUsersColorMap(); |
| 135 |
|
| 136 |
[DllImport("UnityInterface2", SetLastError = true)]
|
| 137 |
private static extern bool ConvertDepthToColor(int depthX, int depthY, ushort depthZ, out int pColorX, out int pColorY); |
| 138 |
|
| 139 |
[DllImport("UnityInterface2", SetLastError = true)]
|
| 140 |
private static extern bool ConvertDepthToWorld(float depthX, float depthY, float depthZ, out float pWorldX, out float pWorldY, out float pWorldZ); |
| 141 |
|
| 142 |
[DllImport("UnityInterface2", SetLastError = true)]
|
| 143 |
private static extern bool ConvertWorldToDepth(float worldX, float worldY, float worldZ, out int pDepthX, out int pDepthY, out ushort pDepthZ); |
| 144 |
|
| 145 |
[DllImport("UnityInterface2", SetLastError = true)]
|
| 146 |
private static extern void SetSkeletonSmoothing(float factor); |
| 147 |
|
| 148 |
[DllImport("UnityInterface2", SetLastError = true)]
|
| 149 |
private static extern bool GetJointPosition(uint userID, int joint, ref SkeletonJointPosition pTransformation); |
| 150 |
// [DllImport("UnityInterface2", SetLastError = true)]
|
| 151 |
// private static extern bool GetJointOrientation(uint userID, int joint, ref SkeletonJointOrientation pTransformation); |
| 152 |
[DllImport("UnityInterface2", SetLastError = true)]
|
| 153 |
private static extern float GetJointPositionConfidence(uint userID, int joint); |
| 154 |
// [DllImport("UnityInterface2", SetLastError = true)]
|
| 155 |
// private static extern float GetJointOrientationConfidence(uint userID, int joint); |
| 156 |
|
| 157 |
[DllImport("UnityInterface2", SetLastError = true)]
|
| 158 |
private static extern void StartLookingForUsers(IntPtr NewUser, IntPtr CalibrationStarted, IntPtr CalibrationFailed, IntPtr CalibrationSuccess, IntPtr UserLost); |
| 159 |
[DllImport("UnityInterface2", SetLastError = true)]
|
| 160 |
private static extern void StopLookingForUsers(); |
| 161 |
|
| 162 |
public delegate void UserDelegate(uint userId); |
| 163 |
|
| 164 |
private static void StartLookingForUsers(UserDelegate NewUser, UserDelegate CalibrationStarted, UserDelegate CalibrationFailed, UserDelegate CalibrationSuccess, UserDelegate UserLost) |
| 165 |
{
|
| 166 |
StartLookingForUsers( |
| 167 |
Marshal.GetFunctionPointerForDelegate(NewUser), |
| 168 |
Marshal.GetFunctionPointerForDelegate(CalibrationStarted), |
| 169 |
Marshal.GetFunctionPointerForDelegate(CalibrationFailed), |
| 170 |
Marshal.GetFunctionPointerForDelegate(CalibrationSuccess), |
| 171 |
Marshal.GetFunctionPointerForDelegate(UserLost)); |
| 172 |
} |
| 173 |
|
| 174 |
|
| 175 |
public KinectInterop.DepthSensorPlatform GetSensorPlatform () |
| 176 |
{
|
| 177 |
return KinectInterop.DepthSensorPlatform.OpenNIv2; |
| 178 |
} |
| 179 |
|
| 180 |
public bool InitSensorInterface (bool bCopyLibs, ref bool bNeedRestart) |
| 181 |
{
|
| 182 |
bool bOneCopied = false, bAllCopied = true; |
| 183 |
bool bArchX64 = KinectInterop.Is64bitArchitecture(); |
| 184 |
|
| 185 |
string sTargetPath = KinectInterop.GetTargetDllPath(".", bArchX64) + "/";
|
| 186 |
//string sTargetPath = "./"; |
| 187 |
|
| 188 |
if(!bCopyLibs) |
| 189 |
{
|
| 190 |
// check if the native library is there |
| 191 |
string sTargetLib = sTargetPath + "UnityInterface2.dll"; |
| 192 |
bNeedRestart = false; |
| 193 |
|
| 194 |
string sZipFileName = !bArchX64 ? "OpenNI2UnityInterface.x86.zip" : "OpenNI2UnityInterface.x64.zip"; |
| 195 |
long iTargetSize = KinectInterop.GetUnzippedEntrySize(sZipFileName, "UnityInterface2.dll"); |
| 196 |
|
| 197 |
// FileInfo targetFile = new FileInfo(sTargetLib); |
| 198 |
// return targetFile.Exists && targetFile.Length == iTargetSize; |
| 199 |
return KinectInterop.IsFileExists(sTargetLib, iTargetSize); |
| 200 |
} |
| 201 |
|
| 202 |
// check openni directory and resources |
| 203 |
string sOpenNIPath = KinectInterop.GetEnvironmentVariable(!bArchX64 ? "OPENNI2_REDIST" : "OPENNI2_REDIST64"); |
| 204 |
if(sOpenNIPath == String.Empty || !Directory.Exists(sOpenNIPath)) |
| 205 |
{
|
| 206 |
Debug.LogWarning("OpenNI2-folder not found (check OPENNI2_REDIST).");
|
| 207 |
return false; |
| 208 |
} |
| 209 |
|
| 210 |
sOpenNIPath = sOpenNIPath.Replace('\\', '/');
|
| 211 |
if(sOpenNIPath.EndsWith("/"))
|
| 212 |
{
|
| 213 |
sOpenNIPath = sOpenNIPath.Substring(0, sOpenNIPath.Length - 1); |
| 214 |
} |
| 215 |
|
| 216 |
// check nite directory and resources |
| 217 |
string sNiTEPath = KinectInterop.GetEnvironmentVariable(!bArchX64 ? "NITE2_REDIST" : "NITE2_REDIST64"); |
| 218 |
if(sNiTEPath == String.Empty || !Directory.Exists(sNiTEPath)) |
| 219 |
{
|
| 220 |
Debug.LogWarning("NiTE2-folder not found (check NITE2_REDIST).");
|
| 221 |
return false; |
| 222 |
} |
| 223 |
|
| 224 |
sNiTEPath = sNiTEPath.Replace('\\', '/');
|
| 225 |
if(sNiTEPath.EndsWith("/"))
|
| 226 |
{
|
| 227 |
sNiTEPath = sNiTEPath.Substring(0, sNiTEPath.Length - 1); |
| 228 |
} |
| 229 |
|
| 230 |
string sUnityInterfaceLib = "UnityInterface2.dll"; |
| 231 |
string sOpenNI2Lib = "OpenNI2.dll"; |
| 232 |
string sNiTE22Lib = "NiTE2.dll"; |
| 233 |
#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX |
| 234 |
sUnityInterfaceLib = "UnityInterface2.dll"; |
| 235 |
sOpenNI2Lib = "libOpenNI2.dylib"; |
| 236 |
sNiTE22Lib = "libNiTE2.dylib"; |
| 237 |
#endif |
| 238 |
|
| 239 |
KinectInterop.CopyFile(sOpenNIPath + "/" + sOpenNI2Lib, sTargetPath + sOpenNI2Lib, ref bOneCopied, ref bAllCopied); |
| 240 |
KinectInterop.CopyFile(sNiTEPath + "/" + sNiTE22Lib, sTargetPath + sNiTE22Lib, ref bOneCopied, ref bAllCopied); |
| 241 |
|
| 242 |
if(!bArchX64) |
| 243 |
{
|
| 244 |
Dictionary<string, string> dictFilesToUnzip = new Dictionary<string, string>(); |
| 245 |
|
| 246 |
dictFilesToUnzip[sUnityInterfaceLib] = sTargetPath + sUnityInterfaceLib; |
| 247 |
//dictFilesToUnzip["OpenNI2.dll"] = sTargetPath + "OpenNI2.dll"; |
| 248 |
//dictFilesToUnzip["NiTE2.dll"] = sTargetPath + "NiTE2.dll"; |
| 249 |
dictFilesToUnzip["OpenNI.ini"] = sTargetPath + "OpenNI.ini"; |
| 250 |
dictFilesToUnzip["NiTE.ini"] = sTargetPath + "NiTE.ini"; |
| 251 |
|
| 252 |
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN |
| 253 |
dictFilesToUnzip["msvcp100.dll"] = sTargetPath + "msvcp100.dll"; |
| 254 |
dictFilesToUnzip["msvcr100.dll"] = sTargetPath + "msvcr100.dll"; |
| 255 |
#endif |
| 256 |
|
| 257 |
KinectInterop.UnzipResourceFiles(dictFilesToUnzip, "OpenNI2UnityInterface.x86.zip", ref bOneCopied, ref bAllCopied); |
| 258 |
} |
| 259 |
else |
| 260 |
{
|
| 261 |
Dictionary<string, string> dictFilesToUnzip = new Dictionary<string, string>(); |
| 262 |
|
| 263 |
dictFilesToUnzip[sUnityInterfaceLib] = sTargetPath + sUnityInterfaceLib; |
| 264 |
//dictFilesToUnzip["OpenNI2.dll"] = sTargetPath + "OpenNI2.dll"; |
| 265 |
//dictFilesToUnzip["NiTE2.dll"] = sTargetPath + "NiTE2.dll"; |
| 266 |
dictFilesToUnzip["OpenNI.ini"] = sTargetPath + "OpenNI.ini"; |
| 267 |
dictFilesToUnzip["NiTE.ini"] = sTargetPath + "NiTE.ini"; |
| 268 |
|
| 269 |
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN |
| 270 |
dictFilesToUnzip["msvcp100.dll"] = sTargetPath + "msvcp100.dll"; |
| 271 |
dictFilesToUnzip["msvcr100.dll"] = sTargetPath + "msvcr100.dll"; |
| 272 |
#endif |
| 273 |
|
| 274 |
KinectInterop.UnzipResourceFiles(dictFilesToUnzip, "OpenNI2UnityInterface.x64.zip", ref bOneCopied, ref bAllCopied); |
| 275 |
} |
| 276 |
|
| 277 |
if(File.Exists(sTargetPath + "OpenNI.ini")) |
| 278 |
{
|
| 279 |
string sFileContent = File.ReadAllText(sTargetPath + "OpenNI.ini"); |
| 280 |
sFileContent = sFileContent.Replace("%OPENNI_REDIST_DIR%", sOpenNIPath);
|
| 281 |
File.WriteAllText(sTargetPath + "OpenNI.ini", sFileContent); |
| 282 |
} |
| 283 |
|
| 284 |
if(File.Exists(sTargetPath + "NiTE.ini")) |
| 285 |
{
|
| 286 |
string sFileContent = File.ReadAllText(sTargetPath + "NiTE.ini"); |
| 287 |
sFileContent = sFileContent.Replace("%NITE_REDIST_DIR%", sNiTEPath);
|
| 288 |
File.WriteAllText(sTargetPath + "NiTE.ini", sFileContent); |
| 289 |
} |
| 290 |
|
| 291 |
bNeedRestart = (bOneCopied && bAllCopied); |
| 292 |
|
| 293 |
return true; |
| 294 |
} |
| 295 |
|
| 296 |
public void FreeSensorInterface (bool bDeleteLibs) |
| 297 |
{
|
| 298 |
if(bDeleteLibs) |
| 299 |
{
|
| 300 |
KinectInterop.DeleteNativeLib("UnityInterface2.dll", true);
|
| 301 |
KinectInterop.DeleteNativeLib("OpenNI2.dll", false);
|
| 302 |
KinectInterop.DeleteNativeLib("NiTE2.dll", false);
|
| 303 |
KinectInterop.DeleteNativeLib("OpenNI.ini", false);
|
| 304 |
KinectInterop.DeleteNativeLib("NiTE.ini", false);
|
| 305 |
KinectInterop.DeleteNativeLib("msvcp100.dll", false);
|
| 306 |
KinectInterop.DeleteNativeLib("msvcr100.dll", false);
|
| 307 |
} |
| 308 |
} |
| 309 |
|
| 310 |
public bool IsSensorAvailable () |
| 311 |
{
|
| 312 |
bool bAvailable = GetSensorsCount() > 0; |
| 313 |
return bAvailable; |
| 314 |
} |
| 315 |
|
| 316 |
public int GetSensorsCount () |
| 317 |
{
|
| 318 |
int iSensorCount = 0; |
| 319 |
int hr = GetDeviceCount(out iSensorCount); |
| 320 |
|
| 321 |
return (hr == 0 ? iSensorCount : 0); |
| 322 |
} |
| 323 |
|
| 324 |
public KinectInterop.SensorData OpenDefaultSensor (KinectInterop.FrameSource dwFlags, float sensorAngle, bool bUseMultiSource) |
| 325 |
{
|
| 326 |
bool bColor = false, bDepth = false, bInfrared = false; |
| 327 |
|
| 328 |
if((dwFlags & KinectInterop.FrameSource.TypeColor) != 0) |
| 329 |
{
|
| 330 |
bColor = true; |
| 331 |
} |
| 332 |
|
| 333 |
if((dwFlags & KinectInterop.FrameSource.TypeDepth) != 0) |
| 334 |
{
|
| 335 |
bDepth = true; |
| 336 |
} |
| 337 |
|
| 338 |
if((dwFlags & KinectInterop.FrameSource.TypeBodyIndex) != 0) |
| 339 |
{
|
| 340 |
bDepth = true; |
| 341 |
} |
| 342 |
|
| 343 |
if((dwFlags & KinectInterop.FrameSource.TypeInfrared) != 0) |
| 344 |
{
|
| 345 |
bInfrared = true; |
| 346 |
} |
| 347 |
|
| 348 |
int hr = InitNative(bDepth, bColor, bInfrared); |
| 349 |
|
| 350 |
if(hr == 0) |
| 351 |
{
|
| 352 |
KinectInterop.SensorData sensorData = new KinectInterop.SensorData(); |
| 353 |
|
| 354 |
sensorData.bodyCount = Constants.SkeletonCount; |
| 355 |
sensorData.jointCount = Constants.JointCount; |
| 356 |
|
| 357 |
sensorData.depthCameraFOV = 46.6f; |
| 358 |
sensorData.colorCameraFOV = 48.6f; |
| 359 |
sensorData.depthCameraOffset = 0.01f; |
| 360 |
sensorData.faceOverlayOffset = 0.01f; |
| 361 |
|
| 362 |
sensorData.colorImageWidth = GetColorWidth(); |
| 363 |
sensorData.colorImageHeight = GetColorHeight(); |
| 364 |
|
| 365 |
sensorData.depthImageWidth = GetDepthWidth(); |
| 366 |
sensorData.depthImageHeight = GetDepthHeight(); |
| 367 |
|
| 368 |
usersClrSize = sensorData.colorImageWidth * sensorData.colorImageHeight; |
| 369 |
usersColorMap = new byte[usersClrSize * 3]; |
| 370 |
|
| 371 |
usersMapSize = sensorData.depthImageWidth * sensorData.depthImageHeight; |
| 372 |
usersLabelMap = new short[usersMapSize]; |
| 373 |
usersDepthMap = new short[usersMapSize]; |
| 374 |
|
| 375 |
if((dwFlags & KinectInterop.FrameSource.TypeColor) != 0) |
| 376 |
{
|
| 377 |
sensorData.colorImage = new byte[sensorData.colorImageWidth * sensorData.colorImageHeight * 4]; |
| 378 |
} |
| 379 |
|
| 380 |
if((dwFlags & KinectInterop.FrameSource.TypeDepth) != 0) |
| 381 |
{
|
| 382 |
sensorData.depthImage = new ushort[sensorData.depthImageWidth * sensorData.depthImageHeight]; |
| 383 |
} |
| 384 |
|
| 385 |
if((dwFlags & KinectInterop.FrameSource.TypeBodyIndex) != 0) |
| 386 |
{
|
| 387 |
sensorData.bodyIndexImage = new byte[sensorData.depthImageWidth * sensorData.depthImageHeight]; |
| 388 |
} |
| 389 |
|
| 390 |
if((dwFlags & KinectInterop.FrameSource.TypeInfrared) != 0) |
| 391 |
{
|
| 392 |
sensorData.infraredImage = new ushort[sensorData.colorImageWidth * sensorData.colorImageHeight]; |
| 393 |
} |
| 394 |
|
| 395 |
if((dwFlags & KinectInterop.FrameSource.TypeBody) != 0) |
| 396 |
{
|
| 397 |
StartLookingForUsers(IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero); |
| 398 |
SetSkeletonSmoothing(Constants.SmoothingFactor); |
| 399 |
} |
| 400 |
|
| 401 |
return sensorData; |
| 402 |
} |
| 403 |
else |
| 404 |
{
|
| 405 |
Debug.LogError("InitKinectSensor failed: " + Marshal.PtrToStringAnsi(GetLastErrorString()));
|
| 406 |
} |
| 407 |
|
| 408 |
return null; |
| 409 |
} |
| 410 |
|
| 411 |
public void CloseSensor (KinectInterop.SensorData sensorData) |
| 412 |
{
|
| 413 |
StopLookingForUsers(); |
| 414 |
ShutdownNative(); |
| 415 |
} |
| 416 |
|
| 417 |
public bool UpdateSensorData (KinectInterop.SensorData sensorData) |
| 418 |
{
|
| 419 |
// Update to the next frame. |
| 420 |
oniUsersCount = oniUsers.Length; |
| 421 |
UpdateNative(oniUsers, oniStates, ref oniUsersCount); |
| 422 |
|
| 423 |
return true; |
| 424 |
} |
| 425 |
|
| 426 |
public bool GetMultiSourceFrame (KinectInterop.SensorData sensorData) |
| 427 |
{
|
| 428 |
return false; |
| 429 |
} |
| 430 |
|
| 431 |
public void FreeMultiSourceFrame (KinectInterop.SensorData sensorData) |
| 432 |
{
|
| 433 |
} |
| 434 |
|
| 435 |
public bool PollBodyFrame (KinectInterop.SensorData sensorData, ref KinectInterop.BodyFrameData bodyFrame, |
| 436 |
ref Matrix4x4 kinectToWorld, bool bIgnoreJointZ) |
| 437 |
{
|
| 438 |
for(int i = 0; i < oniUsersCount; i++) |
| 439 |
{
|
| 440 |
uint userId = (uint)oniUsers[i]; |
| 441 |
short userState = oniStates[i]; |
| 442 |
|
| 443 |
switch(userState) |
| 444 |
{
|
| 445 |
case 1: // new user |
| 446 |
Debug.Log(String.Format("New user: {0}", userId));
|
| 447 |
break; |
| 448 |
|
| 449 |
case 2: // calibration started |
| 450 |
//Debug.Log(String.Format("Calibration started for user: {0}", userId));
|
| 451 |
break; |
| 452 |
|
| 453 |
case 3: // calibration succeeded |
| 454 |
Debug.Log(String.Format("Calibration succeeded for user: {0}", userId));
|
| 455 |
|
| 456 |
if(!allUsers.Contains(userId)) |
| 457 |
{
|
| 458 |
allUsers.Add(userId); |
| 459 |
} |
| 460 |
break; |
| 461 |
|
| 462 |
case 4: // calibration failed |
| 463 |
Debug.Log(String.Format("Calibration failed for user: {0}", userId));
|
| 464 |
break; |
| 465 |
|
| 466 |
case 5: // user lost |
| 467 |
Debug.Log(String.Format("User lost: {0}", userId));
|
| 468 |
|
| 469 |
if(allUsers.Contains(userId)) |
| 470 |
{
|
| 471 |
allUsers.Remove(userId); |
| 472 |
} |
| 473 |
break; |
| 474 |
} |
| 475 |
} |
| 476 |
|
| 477 |
bool newSkeleton = (allUsers.Count > 0); |
| 478 |
|
| 479 |
if(newSkeleton) |
| 480 |
{
|
| 481 |
bodyFrame.liPreviousTime = bodyFrame.liRelativeTime; |
| 482 |
bodyFrame.liRelativeTime = DateTime.Now.Ticks; |
| 483 |
} |
| 484 |
|
| 485 |
// set initially all the skeletons as not tracked |
| 486 |
for(int i = 0; i < sensorData.bodyCount; i++) |
| 487 |
{
|
| 488 |
bodyFrame.bodyData[i].liTrackingID = 0; |
| 489 |
bodyFrame.bodyData[i].bIsTracked = 0; |
| 490 |
} |
| 491 |
|
| 492 |
// fill in joint info for the tracked skeletons |
| 493 |
for(int i = 0; i < allUsers.Count; i++) |
| 494 |
{
|
| 495 |
uint userId = allUsers[i]; |
| 496 |
int userIndex = (int)userId % 6; |
| 497 |
|
| 498 |
bodyFrame.bodyData[userIndex].liTrackingID = (long)userId; |
| 499 |
bodyFrame.bodyData[userIndex].bIsTracked = 1; |
| 500 |
|
| 501 |
for(int j = 0; j < sensorData.jointCount; j++) |
| 502 |
{
|
| 503 |
KinectInterop.JointData jointData = bodyFrame.bodyData[userIndex].joint[j]; |
| 504 |
int oniJ = Constants.BodyJoint2OniJoint[j]; |
| 505 |
|
| 506 |
if(oniJ >= 0) |
| 507 |
{
|
| 508 |
//jointData.jointType = GetJointAtIndex(j); |
| 509 |
|
| 510 |
float fConfidence = GetJointPositionConfidence(userId, oniJ); |
| 511 |
jointData.trackingState = (fConfidence > 0.7f ? KinectInterop.TrackingState.Tracked : |
| 512 |
(fConfidence > 0.3f ? KinectInterop.TrackingState.Inferred : KinectInterop.TrackingState.NotTracked)); |
| 513 |
|
| 514 |
if(jointData.trackingState != KinectInterop.TrackingState.NotTracked) |
| 515 |
{
|
| 516 |
if(GetJointPosition(userId, oniJ, ref jointPosition)) |
| 517 |
{
|
| 518 |
float jPosZ = (bIgnoreJointZ && j > 0) ? bodyFrame.bodyData[i].joint[0].kinectPos.z : jointPosition.z * 0.001f; |
| 519 |
jointData.kinectPos = new Vector3(jointPosition.x * 0.001f, jointPosition.y * 0.001f, jointPosition.z * 0.001f); |
| 520 |
jointData.position = kinectToWorld.MultiplyPoint3x4(new Vector3(jointPosition.x * 0.001f, jointPosition.y * 0.001f, jPosZ)); |
| 521 |
} |
| 522 |
} |
| 523 |
|
| 524 |
jointData.orientation = Quaternion.identity; |
| 525 |
|
| 526 |
if(j == 0) |
| 527 |
{
|
| 528 |
bodyFrame.bodyData[userIndex].position = jointData.position; |
| 529 |
bodyFrame.bodyData[userIndex].orientation = jointData.orientation; |
| 530 |
} |
| 531 |
|
| 532 |
bodyFrame.bodyData[userIndex].joint[j] = jointData; |
| 533 |
} |
| 534 |
} |
| 535 |
} |
| 536 |
|
| 537 |
return newSkeleton; |
| 538 |
} |
| 539 |
|
| 540 |
public bool PollColorFrame (KinectInterop.SensorData sensorData) |
| 541 |
{
|
| 542 |
IntPtr pColorMap = GetUsersColorMap(); |
| 543 |
if(pColorMap == IntPtr.Zero) |
| 544 |
return false; |
| 545 |
|
| 546 |
sensorData.lastColorFrameTime = DateTime.Now.Ticks; |
| 547 |
|
| 548 |
// copy over the map |
| 549 |
Marshal.Copy(pColorMap, usersColorMap, 0, usersColorMap.Length); |
| 550 |
|
| 551 |
// Create the actual users texture based on label map and depth histogram |
| 552 |
for (int i = 0, srcI = 0, dstI = 0; i < usersClrSize; i++) |
| 553 |
{
|
| 554 |
sensorData.colorImage[dstI] = usersColorMap[srcI]; |
| 555 |
sensorData.colorImage[dstI + 1] = usersColorMap[srcI + 1]; |
| 556 |
sensorData.colorImage[dstI + 2] = usersColorMap[srcI + 2]; |
| 557 |
sensorData.colorImage[dstI + 3] = 255; |
| 558 |
|
| 559 |
srcI += 3; |
| 560 |
dstI += 4; |
| 561 |
} |
| 562 |
|
| 563 |
return true; |
| 564 |
} |
| 565 |
|
| 566 |
public bool PollDepthFrame (KinectInterop.SensorData sensorData) |
| 567 |
{
|
| 568 |
IntPtr pLabelMap = GetUsersLabelMap(); |
| 569 |
IntPtr pDepthMap = GetUsersDepthMap(); |
| 570 |
|
| 571 |
if(pLabelMap == IntPtr.Zero || pDepthMap == IntPtr.Zero) |
| 572 |
return false; |
| 573 |
|
| 574 |
sensorData.lastDepthFrameTime = sensorData.lastBodyIndexFrameTime = DateTime.Now.Ticks; |
| 575 |
|
| 576 |
// copy over the maps |
| 577 |
Marshal.Copy(pLabelMap, usersLabelMap, 0, usersLabelMap.Length); |
| 578 |
Marshal.Copy(pDepthMap, usersDepthMap, 0, usersDepthMap.Length); |
| 579 |
|
| 580 |
for (int i = 0; i < usersMapSize; i++) |
| 581 |
{
|
| 582 |
int userIndex = usersLabelMap[i]; |
| 583 |
|
| 584 |
sensorData.bodyIndexImage[i] = userIndex != 0 ? (byte)(userIndex - 1) : (byte)255; |
| 585 |
sensorData.depthImage[i] = (ushort)usersDepthMap[i]; |
| 586 |
} |
| 587 |
|
| 588 |
return true; |
| 589 |
} |
| 590 |
|
| 591 |
public bool PollInfraredFrame (KinectInterop.SensorData sensorData) |
| 592 |
{
|
| 593 |
throw new System.NotImplementedException (); |
| 594 |
} |
| 595 |
|
| 596 |
public void FixJointOrientations (KinectInterop.SensorData sensorData, ref KinectInterop.BodyData bodyData) |
| 597 |
{
|
| 598 |
} |
| 599 |
|
| 600 |
public bool IsBodyTurned(ref KinectInterop.BodyData bodyData) |
| 601 |
{
|
| 602 |
return false; |
| 603 |
} |
| 604 |
|
| 605 |
public Vector2 MapSpacePointToDepthCoords (KinectInterop.SensorData sensorData, Vector3 spacePos) |
| 606 |
{
|
| 607 |
Vector2 depthPos = Vector3.zero; |
| 608 |
|
| 609 |
int depthX = 0, depthY = 0; ushort depthZ = 0; |
| 610 |
if(ConvertWorldToDepth(spacePos.x * 1000f, spacePos.y * 1000f, spacePos.z * 1000f, out depthX, out depthY, out depthZ)) |
| 611 |
{
|
| 612 |
depthPos = new Vector2(depthX, depthY); |
| 613 |
} |
| 614 |
|
| 615 |
return depthPos; |
| 616 |
} |
| 617 |
|
| 618 |
public Vector3 MapDepthPointToSpaceCoords (KinectInterop.SensorData sensorData, Vector2 depthPos, ushort depthVal) |
| 619 |
{
|
| 620 |
Vector3 spacePos = Vector3.zero; |
| 621 |
|
| 622 |
float spaceX = 0f, spaceY = 0f, spaceZ = 0f; |
| 623 |
if(ConvertDepthToWorld(depthPos.x, depthPos.y, depthVal, out spaceX, out spaceY, out spaceZ)) |
| 624 |
{
|
| 625 |
spacePos = new Vector3(spaceX / 1000f, spaceY / 1000f, spaceZ / 1000f); |
| 626 |
} |
| 627 |
|
| 628 |
return spacePos; |
| 629 |
} |
| 630 |
|
| 631 |
public bool MapDepthFrameToSpaceCoords (KinectInterop.SensorData sensorData, ref Vector3[] vSpaceCoords) |
| 632 |
{
|
| 633 |
return false; |
| 634 |
} |
| 635 |
|
| 636 |
public Vector2 MapDepthPointToColorCoords (KinectInterop.SensorData sensorData, Vector2 depthPos, ushort depthVal) |
| 637 |
{
|
| 638 |
Vector2 colorPos = new Vector2(float.NegativeInfinity, float.NegativeInfinity); |
| 639 |
|
| 640 |
int colorX = 0, colorY = 0; |
| 641 |
if(ConvertDepthToColor((int)depthPos.x, (int)depthPos.y, depthVal, out colorX, out colorY)) |
| 642 |
{
|
| 643 |
colorPos = new Vector2(colorX, colorY); |
| 644 |
} |
| 645 |
|
| 646 |
return colorPos; |
| 647 |
} |
| 648 |
|
| 649 |
public bool MapDepthFrameToColorCoords (KinectInterop.SensorData sensorData, ref Vector2[] vColorCoords) |
| 650 |
{
|
| 651 |
if(sensorData.depthImage != null && sensorData.colorImage != null) |
| 652 |
{
|
| 653 |
Vector2 vInfinity = new Vector2(float.NegativeInfinity, float.NegativeInfinity); |
| 654 |
int i = 0, cx = 0, cy = 0; |
| 655 |
|
| 656 |
for(int y = 0; y < sensorData.depthImageHeight; y++) |
| 657 |
{
|
| 658 |
for(int x = 0; x < sensorData.depthImageWidth; x++) |
| 659 |
{
|
| 660 |
ushort dv = sensorData.depthImage[i]; |
| 661 |
|
| 662 |
if(ConvertDepthToColor(x, y, dv, out cx, out cy)) |
| 663 |
vColorCoords[i] = new Vector2(cx, cy); |
| 664 |
else |
| 665 |
vColorCoords[i] = vInfinity; |
| 666 |
|
| 667 |
i++; |
| 668 |
} |
| 669 |
} |
| 670 |
|
| 671 |
return true; |
| 672 |
} |
| 673 |
|
| 674 |
return false; |
| 675 |
} |
| 676 |
|
| 677 |
public bool MapColorFrameToDepthCoords (KinectInterop.SensorData sensorData, ref Vector2[] vDepthCoords) |
| 678 |
{
|
| 679 |
return false; |
| 680 |
} |
| 681 |
|
| 682 |
public int GetJointIndex (KinectInterop.JointType joint) |
| 683 |
{
|
| 684 |
switch(joint) |
| 685 |
{
|
| 686 |
case KinectInterop.JointType.SpineBase: |
| 687 |
return (int)KinectInterop.JointType.SpineBase; |
| 688 |
case KinectInterop.JointType.SpineShoulder: |
| 689 |
case KinectInterop.JointType.Neck: |
| 690 |
return (int)KinectInterop.JointType.Neck; |
| 691 |
case KinectInterop.JointType.Head: |
| 692 |
return (int)KinectInterop.JointType.Head; |
| 693 |
|
| 694 |
case KinectInterop.JointType.ShoulderLeft: |
| 695 |
return (int)KinectInterop.JointType.ShoulderLeft; |
| 696 |
case KinectInterop.JointType.ElbowLeft: |
| 697 |
return (int)KinectInterop.JointType.ElbowLeft; |
| 698 |
//case KinectInterop.JointType.WristLeft: |
| 699 |
case KinectInterop.JointType.HandLeft: |
| 700 |
return (int)KinectInterop.JointType.HandLeft; |
| 701 |
|
| 702 |
case KinectInterop.JointType.ShoulderRight: |
| 703 |
return (int)KinectInterop.JointType.ShoulderRight; |
| 704 |
case KinectInterop.JointType.ElbowRight: |
| 705 |
return (int)KinectInterop.JointType.ElbowRight; |
| 706 |
//case KinectInterop.JointType.WristRight: |
| 707 |
case KinectInterop.JointType.HandRight: |
| 708 |
return (int)KinectInterop.JointType.HandRight; |
| 709 |
|
| 710 |
case KinectInterop.JointType.HipLeft: |
| 711 |
return (int)KinectInterop.JointType.HipLeft; |
| 712 |
case KinectInterop.JointType.KneeLeft: |
| 713 |
return (int)KinectInterop.JointType.KneeLeft; |
| 714 |
case KinectInterop.JointType.AnkleLeft: |
| 715 |
//case KinectInterop.JointType.FootLeft: |
| 716 |
return (int)KinectInterop.JointType.AnkleLeft; |
| 717 |
|
| 718 |
case KinectInterop.JointType.HipRight: |
| 719 |
return (int)KinectInterop.JointType.HipRight; |
| 720 |
case KinectInterop.JointType.KneeRight: |
| 721 |
return (int)KinectInterop.JointType.KneeRight; |
| 722 |
case KinectInterop.JointType.AnkleRight: |
| 723 |
//case KinectInterop.JointType.FootRight: |
| 724 |
return (int)KinectInterop.JointType.AnkleRight; |
| 725 |
} |
| 726 |
|
| 727 |
return -1; |
| 728 |
} |
| 729 |
|
| 730 |
// public KinectInterop.JointType GetJointAtIndex (int index) |
| 731 |
// {
|
| 732 |
// switch(index) |
| 733 |
// {
|
| 734 |
// case (int)SkeletonJoint.HIPS: |
| 735 |
// return KinectInterop.JointType.SpineBase; |
| 736 |
// case (int)SkeletonJoint.NECK: |
| 737 |
// return KinectInterop.JointType.Neck; |
| 738 |
// case (int)SkeletonJoint.HEAD: |
| 739 |
// return KinectInterop.JointType.Head; |
| 740 |
// |
| 741 |
// case (int)SkeletonJoint.LEFT_SHOULDER: |
| 742 |
// return KinectInterop.JointType.ShoulderLeft; |
| 743 |
// case (int)SkeletonJoint.LEFT_ELBOW: |
| 744 |
// return KinectInterop.JointType.ElbowLeft; |
| 745 |
// case (int)SkeletonJoint.LEFT_HAND: |
| 746 |
// return KinectInterop.JointType.WristLeft; |
| 747 |
// |
| 748 |
// case (int)SkeletonJoint.RIGHT_SHOULDER: |
| 749 |
// return KinectInterop.JointType.ShoulderRight; |
| 750 |
// case (int)SkeletonJoint.RIGHT_ELBOW: |
| 751 |
// return KinectInterop.JointType.ElbowRight; |
| 752 |
// case (int)SkeletonJoint.RIGHT_HAND: |
| 753 |
// return KinectInterop.JointType.WristRight; |
| 754 |
// |
| 755 |
// case (int)SkeletonJoint.LEFT_HIP: |
| 756 |
// return KinectInterop.JointType.HipLeft; |
| 757 |
// case (int)SkeletonJoint.LEFT_KNEE: |
| 758 |
// return KinectInterop.JointType.KneeLeft; |
| 759 |
// case (int)SkeletonJoint.LEFT_FOOT: |
| 760 |
// return KinectInterop.JointType.AnkleLeft; |
| 761 |
// |
| 762 |
// case (int)SkeletonJoint.RIGHT_HIP: |
| 763 |
// return KinectInterop.JointType.HipRight; |
| 764 |
// case (int)SkeletonJoint.RIGHT_KNEE: |
| 765 |
// return KinectInterop.JointType.KneeRight; |
| 766 |
// case (int)SkeletonJoint.RIGHT_FOOT: |
| 767 |
// return KinectInterop.JointType.AnkleRight; |
| 768 |
// } |
| 769 |
// |
| 770 |
// return (KinectInterop.JointType)(-1); |
| 771 |
// } |
| 772 |
|
| 773 |
public KinectInterop.JointType GetParentJoint (KinectInterop.JointType joint) |
| 774 |
{
|
| 775 |
switch(joint) |
| 776 |
{
|
| 777 |
case KinectInterop.JointType.Neck: |
| 778 |
return KinectInterop.JointType.SpineBase; |
| 779 |
case KinectInterop.JointType.Head: |
| 780 |
return KinectInterop.JointType.Neck; |
| 781 |
|
| 782 |
case KinectInterop.JointType.ShoulderLeft: |
| 783 |
return KinectInterop.JointType.Neck; |
| 784 |
case KinectInterop.JointType.ElbowLeft: |
| 785 |
return KinectInterop.JointType.ShoulderLeft; |
| 786 |
case KinectInterop.JointType.HandLeft: |
| 787 |
return KinectInterop.JointType.ElbowLeft; |
| 788 |
|
| 789 |
case KinectInterop.JointType.ShoulderRight: |
| 790 |
return KinectInterop.JointType.Neck; |
| 791 |
case KinectInterop.JointType.ElbowRight: |
| 792 |
return KinectInterop.JointType.ShoulderRight; |
| 793 |
case KinectInterop.JointType.HandRight: |
| 794 |
return KinectInterop.JointType.ElbowRight; |
| 795 |
|
| 796 |
case KinectInterop.JointType.HipLeft: |
| 797 |
return KinectInterop.JointType.SpineBase; |
| 798 |
case KinectInterop.JointType.KneeLeft: |
| 799 |
return KinectInterop.JointType.HipLeft; |
| 800 |
case KinectInterop.JointType.AnkleLeft: |
| 801 |
return KinectInterop.JointType.KneeLeft; |
| 802 |
|
| 803 |
case KinectInterop.JointType.HipRight: |
| 804 |
return KinectInterop.JointType.SpineBase; |
| 805 |
case KinectInterop.JointType.KneeRight: |
| 806 |
return KinectInterop.JointType.HipRight; |
| 807 |
case KinectInterop.JointType.AnkleRight: |
| 808 |
return KinectInterop.JointType.KneeRight; |
| 809 |
} |
| 810 |
|
| 811 |
return joint; |
| 812 |
} |
| 813 |
|
| 814 |
public KinectInterop.JointType GetNextJoint (KinectInterop.JointType joint) |
| 815 |
{
|
| 816 |
switch(joint) |
| 817 |
{
|
| 818 |
case KinectInterop.JointType.SpineBase: |
| 819 |
return KinectInterop.JointType.Neck; |
| 820 |
case KinectInterop.JointType.Neck: |
| 821 |
return KinectInterop.JointType.Head; |
| 822 |
|
| 823 |
case KinectInterop.JointType.ShoulderLeft: |
| 824 |
return KinectInterop.JointType.ElbowLeft; |
| 825 |
case KinectInterop.JointType.ElbowLeft: |
| 826 |
return KinectInterop.JointType.HandLeft; |
| 827 |
|
| 828 |
case KinectInterop.JointType.ShoulderRight: |
| 829 |
return KinectInterop.JointType.ElbowRight; |
| 830 |
case KinectInterop.JointType.ElbowRight: |
| 831 |
return KinectInterop.JointType.HandRight; |
| 832 |
|
| 833 |
case KinectInterop.JointType.HipLeft: |
| 834 |
return KinectInterop.JointType.KneeLeft; |
| 835 |
case KinectInterop.JointType.KneeLeft: |
| 836 |
return KinectInterop.JointType.AnkleLeft; |
| 837 |
|
| 838 |
case KinectInterop.JointType.HipRight: |
| 839 |
return KinectInterop.JointType.KneeRight; |
| 840 |
case KinectInterop.JointType.KneeRight: |
| 841 |
return KinectInterop.JointType.AnkleRight; |
| 842 |
} |
| 843 |
|
| 844 |
return joint; // end joint |
| 845 |
} |
| 846 |
|
| 847 |
public bool IsFaceTrackingAvailable (ref bool bNeedRestart) |
| 848 |
{
|
| 849 |
bNeedRestart = false; |
| 850 |
return false; |
| 851 |
} |
| 852 |
|
| 853 |
public bool InitFaceTracking (bool bUseFaceModel, bool bDrawFaceRect) |
| 854 |
{
|
| 855 |
return false; |
| 856 |
} |
| 857 |
|
| 858 |
public void FinishFaceTracking () |
| 859 |
{
|
| 860 |
} |
| 861 |
|
| 862 |
public bool UpdateFaceTracking () |
| 863 |
{
|
| 864 |
return false; |
| 865 |
} |
| 866 |
|
| 867 |
public bool IsFaceTrackingActive () |
| 868 |
{
|
| 869 |
return false; |
| 870 |
} |
| 871 |
|
| 872 |
public bool IsDrawFaceRect () |
| 873 |
{
|
| 874 |
return false; |
| 875 |
} |
| 876 |
|
| 877 |
public bool IsFaceTracked (long userId) |
| 878 |
{
|
| 879 |
return false; |
| 880 |
} |
| 881 |
|
| 882 |
public bool GetFaceRect (long userId, ref Rect faceRect) |
| 883 |
{
|
| 884 |
return false; |
| 885 |
} |
| 886 |
|
| 887 |
public void VisualizeFaceTrackerOnColorTex (Texture2D texColor) |
| 888 |
{
|
| 889 |
} |
| 890 |
|
| 891 |
public bool GetHeadPosition (long userId, ref Vector3 headPos) |
| 892 |
{
|
| 893 |
return false; |
| 894 |
} |
| 895 |
|
| 896 |
public bool GetHeadRotation (long userId, ref Quaternion headRot) |
| 897 |
{
|
| 898 |
return false; |
| 899 |
} |
| 900 |
|
| 901 |
public bool GetAnimUnits (long userId, ref System.Collections.Generic.Dictionary<KinectInterop.FaceShapeAnimations, float> afAU) |
| 902 |
{
|
| 903 |
return false; |
| 904 |
} |
| 905 |
|
| 906 |
public bool GetShapeUnits (long userId, ref System.Collections.Generic.Dictionary<KinectInterop.FaceShapeDeformations, float> afSU) |
| 907 |
{
|
| 908 |
return false; |
| 909 |
} |
| 910 |
|
| 911 |
public int GetFaceModelVerticesCount (long userId) |
| 912 |
{
|
| 913 |
return 0; |
| 914 |
} |
| 915 |
|
| 916 |
public bool GetFaceModelVertices (long userId, ref Vector3[] avVertices) |
| 917 |
{
|
| 918 |
return false; |
| 919 |
} |
| 920 |
|
| 921 |
public int GetFaceModelTrianglesCount () |
| 922 |
{
|
| 923 |
return 0; |
| 924 |
} |
| 925 |
|
| 926 |
public bool GetFaceModelTriangles (bool bMirrored, ref int[] avTriangles) |
| 927 |
{
|
| 928 |
return false; |
| 929 |
} |
| 930 |
|
| 931 |
public bool IsSpeechRecognitionAvailable (ref bool bNeedRestart) |
| 932 |
{
|
| 933 |
bNeedRestart = false; |
| 934 |
return false; |
| 935 |
} |
| 936 |
|
| 937 |
public int InitSpeechRecognition (string sRecoCriteria, bool bUseKinect, bool bAdaptationOff) |
| 938 |
{
|
| 939 |
return 0; |
| 940 |
} |
| 941 |
|
| 942 |
public void FinishSpeechRecognition () |
| 943 |
{
|
| 944 |
} |
| 945 |
|
| 946 |
public int UpdateSpeechRecognition () |
| 947 |
{
|
| 948 |
return 0; |
| 949 |
} |
| 950 |
|
| 951 |
public int LoadSpeechGrammar (string sFileName, short iLangCode, bool bDynamic) |
| 952 |
{
|
| 953 |
return 0; |
| 954 |
} |
| 955 |
|
| 956 |
public int AddGrammarPhrase(string sFromRule, string sToRule, string sPhrase, bool bClearRulePhrases, bool bCommitGrammar) |
| 957 |
{
|
| 958 |
return 0; |
| 959 |
} |
| 960 |
|
| 961 |
public void SetSpeechConfidence (float fConfidence) |
| 962 |
{
|
| 963 |
} |
| 964 |
|
| 965 |
public bool IsSpeechStarted () |
| 966 |
{
|
| 967 |
return false; |
| 968 |
} |
| 969 |
|
| 970 |
public bool IsSpeechEnded () |
| 971 |
{
|
| 972 |
return false; |
| 973 |
} |
| 974 |
|
| 975 |
public bool IsPhraseRecognized () |
| 976 |
{
|
| 977 |
return false; |
| 978 |
} |
| 979 |
|
| 980 |
public float GetPhraseConfidence() |
| 981 |
{
|
| 982 |
return 0; |
| 983 |
} |
| 984 |
|
| 985 |
public string GetRecognizedPhraseTag () |
| 986 |
{
|
| 987 |
return string.Empty; |
| 988 |
} |
| 989 |
|
| 990 |
public void ClearRecognizedPhrase () |
| 991 |
{
|
| 992 |
} |
| 993 |
|
| 994 |
public bool IsBackgroundRemovalAvailable(ref bool bNeedRestart) |
| 995 |
{
|
| 996 |
bBackgroundRemovalInited = KinectInterop.IsOpenCvAvailable(ref bNeedRestart); |
| 997 |
return bBackgroundRemovalInited; |
| 998 |
} |
| 999 |
|
| 1000 |
public bool InitBackgroundRemoval(KinectInterop.SensorData sensorData, bool isHiResPrefered) |
| 1001 |
{
|
| 1002 |
return KinectInterop.InitBackgroundRemoval(sensorData, isHiResPrefered); |
| 1003 |
} |
| 1004 |
|
| 1005 |
public void FinishBackgroundRemoval(KinectInterop.SensorData sensorData) |
| 1006 |
{
|
| 1007 |
KinectInterop.FinishBackgroundRemoval(sensorData); |
| 1008 |
bBackgroundRemovalInited = false; |
| 1009 |
} |
| 1010 |
|
| 1011 |
public bool UpdateBackgroundRemoval(KinectInterop.SensorData sensorData, bool isHiResPrefered, Color32 defaultColor, bool bAlphaTexOnly) |
| 1012 |
{
|
| 1013 |
return KinectInterop.UpdateBackgroundRemoval(sensorData, isHiResPrefered, defaultColor, bAlphaTexOnly); |
| 1014 |
} |
| 1015 |
|
| 1016 |
public bool IsBackgroundRemovalActive() |
| 1017 |
{
|
| 1018 |
return bBackgroundRemovalInited; |
| 1019 |
} |
| 1020 |
|
| 1021 |
public bool IsBRHiResSupported() |
| 1022 |
{
|
| 1023 |
return false; |
| 1024 |
} |
| 1025 |
|
| 1026 |
public Rect GetForegroundFrameRect(KinectInterop.SensorData sensorData, bool isHiResPrefered) |
| 1027 |
{
|
| 1028 |
return KinectInterop.GetForegroundFrameRect(sensorData, isHiResPrefered); |
| 1029 |
} |
| 1030 |
|
| 1031 |
public int GetForegroundFrameLength(KinectInterop.SensorData sensorData, bool isHiResPrefered) |
| 1032 |
{
|
| 1033 |
return KinectInterop.GetForegroundFrameLength(sensorData, isHiResPrefered); |
| 1034 |
} |
| 1035 |
|
| 1036 |
public bool PollForegroundFrame(KinectInterop.SensorData sensorData, bool isHiResPrefered, Color32 defaultColor, bool bLimitedUsers, ICollection<int> alTrackedIndexes, ref byte[] foregroundImage) |
| 1037 |
{
|
| 1038 |
return KinectInterop.PollForegroundFrame(sensorData, isHiResPrefered, defaultColor, bLimitedUsers, alTrackedIndexes, ref foregroundImage); |
| 1039 |
} |
| 1040 |
|
| 1041 |
} |