t1 / TFDContents / Assets / KinectScripts / Interfaces / OpenNI2Interface.cs @ 3
이력 | 보기 | 이력해설 | 다운로드 (32.1 KB)
1 | 3 | KTH | 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 | } |