00001 #pragma once
00002
00003
00004 #ifdef ENABLE_KINECT_SDK
00005
00006
00007 #include <NuiApi.h>
00008
00009 #include "ExClass.h"
00010 #include "Vector.h"
00011
00012 #include "KinectFaceTracker.h"
00013
00014
00015
00016 #pragma comment(lib, "Kinect10.lib")
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #define KINECT_JOINT_NUM NUI_SKELETON_POSITION_COUNT // 20
00029 #define KINECT_USERS_NUM 7
00030
00031
00032
00033 #define KINECT_SKEL_PROFILE_ALL 2 // OpenNIに合わせる
00034 #define KINECT_SKEL_PROFILE_UPPER 3
00035
00036
00037
00038 namespace jbxwl {
00039
00040
00041
00042
00043 class CKinectImage : public EventHandler
00044 {
00045 public:
00046 CKinectImage(void);
00047 virtual ~CKinectImage(void) { free();}
00048
00049 public:
00050 HANDLE m_stream;
00051 uByte* m_data;
00052 int m_data_len;
00053
00054 int m_xsize;
00055 int m_ysize;
00056 int m_nfps;
00057
00058 public:
00059 void free(void);
00060 void make_data(void);
00061 };
00062
00063
00064
00065
00066
00067 class CKinectDepth : public EventHandler
00068 {
00069 public:
00070 CKinectDepth(void);
00071 virtual ~CKinectDepth(void) { free();}
00072
00073 public:
00074 HANDLE m_stream;
00075 uByte* m_data;
00076 int m_data_len;
00077
00078 BOOL has_map;
00079 int* m_xmap_i2d;
00080 int* m_ymap_i2d;
00081 int* m_xmap_d2i;
00082 int* m_ymap_d2i;
00083 int m_map_len;
00084
00085 int m_xsize;
00086 int m_ysize;
00087 int m_nfps;
00088
00089 int userLabel[KINECT_USERS_NUM];
00090
00091 public:
00092 void free(void);
00093 void make_data(void);
00094 void make_map(void);
00095 void delete_map(void);
00096 void correct_map(int cx, int cy);
00097
00098 int get_user_index(int i, int j);
00099 uWord get_depth(int i, int j);
00100
00101 void get_users(void);
00102 void get_image_coord(int* i, int* j);
00103
00104 };
00105
00106
00107
00108
00109
00110 class CKinectSkeleton : public EventHandler
00111 {
00112 public:
00113 CKinectSkeleton(void);
00114 virtual ~CKinectSkeleton(void) { free();}
00115
00116 public:
00117 HANDLE m_stream;
00118 NUI_SKELETON_DATA m_data;
00119
00120 public:
00121 void free(void);
00122 };
00123
00124
00125
00126
00128
00129
00130 class CKinectDevice
00131 {
00132 public:
00133 CKinectDevice(void);
00134 virtual ~CKinectDevice(void);
00135
00136 INuiSensor* context;
00137 CKinectImage* image;
00138 CKinectDepth* depth;
00139 CKinectSkeleton* skeleton;
00140 CKinectFaceTracker* face;
00141
00142 NUI_IMAGE_FRAME imageFrame;
00143 NUI_IMAGE_FRAME depthFrame;
00144 NUI_SKELETON_FRAME skltnFrame;
00145
00146 int m_count;
00147 int m_state;
00148 CString m_err_mesg;
00149
00150 int m_xsize;
00151 int m_ysize;
00152 int m_nfps;
00153
00154
00155 NUI_TRANSFORM_SMOOTH_PARAMETERS* smoothParam;
00156
00157
00158 Vector4 jointPosData[KINECT_JOINT_NUM];
00159
00160 public:
00161 BOOL init(DWORD mode, BOOL use_image);
00162 void free(void);
00163 void clear_JointsData(void);
00164
00165 BOOL create_Context(DWORD mode, int index=0);
00166
00167 BOOL create_Image(void);
00168 BOOL create_Depth(void);
00169 BOOL create_Skeleton(int profile);
00170 BOOL create_Face(void);
00171
00172 void delete_Context(void);
00173 void delete_Image(void);
00174 void delete_Depth(void);
00175 void delete_Skeleton(void);
00176 void delete_Face(void);
00177
00178 BOOL wait_Image(DWORD msec=INFINITE);
00179 BOOL wait_Depth(DWORD msec=INFINITE);
00180 int wait_Skeleton(int tuser, int duser, DWORD msec=INFINITE);
00181
00182 BOOL start_Detection(int profile);
00183 BOOL stop_Detection(void);
00184
00185 int get_TrackingUser(int duser);
00186
00187 };
00188
00189
00190 }
00191
00192
00193 #endif