00001 #pragma once
00002
00003 #ifdef ENABLE_KINECT_SDK
00004
00005
00006 #include "KinectDevice.h"
00007 #include "KinectAudio.h"
00008
00009 #include "NiToolWin.h"
00010 #include "Rotation.h"
00011 #include "RingBuffer.h"
00012
00013 #include "NiSpeech.h"
00014
00015
00016
00017 namespace jbxwl {
00018
00019
00020
00021 class CKinectWin
00022 {
00023 public:
00024 CKinectWin(void);
00025 virtual ~CKinectWin(void);
00026
00027 private:
00028 CKinectDevice* device;
00029 CKinectAudio* audio;
00030 #ifdef ENABLE_NI_SPEECH
00031 CNiSpeech* speech;
00032 #endif
00033
00034 public:
00035 CString m_err_mesg;
00036
00037 int m_image_scale;
00038 int m_depth_scale;
00039 int m_skeleton_line;
00040
00041 BOOL m_is_detected;
00042 BOOL m_is_tracking;
00043 BOOL m_is_mirroring;
00044
00045 BOOL m_use_image;
00046 BOOL m_use_led;
00047 BOOL m_use_motor;
00048 BOOL m_use_face;
00049 BOOL m_use_speech;
00050
00051
00052 BOOL m_enable_face;
00053 BOOL m_enable_speech;
00054 BOOL m_enable_motor;
00055
00056 BOOL m_use_knct_smth;
00057
00058 int m_profile;
00059
00060 NUI_TRANSFORM_SMOOTH_PARAMETERS smoothParam;
00061
00062 double m_confidence;
00063 double m_ground_level;
00064
00065 int tracking_user;
00066 int tracking_deny;
00067
00068 public:
00069 ExCmnHead* pViewData;
00070 ExCmnHead* pDepthData;
00071
00072 BOOL hasDepthData;
00073 BOOL isDetectShadow;
00074 BOOL isDetectFace;
00075
00076 public:
00077 BOOL init(void);
00078 void free(void);
00079 void deleteDevice(void);
00080
00081 CString get_err_message(void);
00082
00083 public:
00084
00085 void clearJointsData(void);
00086 void clearAvatarDetected(void);
00087 BOOL checkAvatarDetected(void);
00088
00089 BOOL openUSBDevice(void) { return TRUE;}
00090 void closeUSBDevice(void) {}
00091 void setLEDColor(int col) {}
00092 void setTiltMotor(int ang);
00093
00094 void setMirroring(BOOL mirror);
00095 int getDevState(void) { if (device==NULL) return NI_STATE_DETECT_STOPPED; else return device->m_state;}
00096
00097 BOOL startDetection(void);
00098 BOOL stopDetection(void);
00099 BOOL restartDetection(void);
00100
00101 int getTrackingUser(void) { if (device!=NULL) return device->get_TrackingUser(tracking_deny); else return 0;}
00102 void setDenyTrackingSearch(int user) { tracking_deny = user;}
00103
00104
00105 Vector4 joint_PositionData(int joint);
00106
00107 void getJointsPosData(void);
00108 void getJointsRotData(void) {}
00109
00110
00111 void makeDisplayImage(void);
00112 void makeDisplayDepth(CExView* pview);
00113 BOOL trackingJoints(void);
00114
00115
00116 BOOL detectShadow(void);
00117 void paintShadow(void);
00118 void drawSkeleton(int col, int line);
00119 void drawJointConnection(int j1, int j2, int col, int line);
00120 void set2DCoordinate(void);
00121
00122
00123 BOOL initRingBuffer(void);
00124 void freeRingBuffer(void);
00125 void clearRingBuffer(void);
00126 void backup2RingBuffer(void);
00127
00128 Vector4 jointPositionData(int joint);
00129
00130 public:
00131
00132 Quaternion<double> getFaceRotation(void);
00133
00134 public:
00135 #ifdef ENABLE_NI_SPEECH
00136
00137 BOOL initSpeech(void);
00138 BOOL createSpeech(LPCTSTR lang, LPCTSTR grfile);
00139 BOOL startSpeech(double confidence);
00140 void stopSpeech(void);
00141 void deleteSpeech(BOOL rls=TRUE);
00142
00143 void setSpeechConfidence(double confd) { if (speech!=NULL) speech->setConfidence(confd);}
00144
00145 virtual CNiSpeech* makeSpeech(void) { CNiSpeech* spch = new CNiSpeech(); return spch;}
00146 #endif
00147
00148 public:
00149 virtual void saveJointsData(void) {}
00150 virtual void loggingJointsData(void) {}
00151
00152 virtual void checkBoneLength(void) {}
00153 virtual void checkGroundLevel(void) {}
00154
00155 virtual void convertJointsData(void) {}
00156 virtual void drawAddition(int col, int line) {}
00157
00158 virtual void lostTrackingUser(int uid) {}
00159 virtual void detectTrackingUser(int uid) {}
00160
00161 virtual void callback_status_changed(BOOL success, const OLECHAR* instanceName, const OLECHAR* deviceName);
00162
00163 protected:
00164 void setDevState(int state) { if (device!=NULL) device->m_state = state;}
00165
00166 public:
00167
00168 Vector<double> startPos;
00169 Vector<double> currentPos;
00170
00171 Vector<double> posVect[KINECT_JOINT_NUM];
00172 Quaternion<double> rotQuat[KINECT_JOINT_NUM];
00173 Vector<int> crdVect[KINECT_JOINT_NUM];
00174
00175 double jntAngl[KINECT_JOINT_NUM];
00176
00177 CRingBuffer posRing[KINECT_JOINT_NUM];
00178 CRingBuffer rotRing[KINECT_JOINT_NUM];
00179
00180
00181 public:
00182 BOOL hasContext(void) { if (device!=NULL && device->context!=NULL) return TRUE; else return FALSE;}
00183 BOOL hasImageGen(void) { if (device!=NULL && device->image!=NULL) return TRUE; else return FALSE;}
00184 BOOL hasDepthGen(void) { if (device!=NULL && device->depth!=NULL) return TRUE; else return FALSE;}
00185
00186 BOOL createImage(void) { if (device!=NULL) return device->create_Image(); else return FALSE;}
00187 BOOL createDepth(void) { if (device!=NULL) return device->create_Depth(); else return FALSE;}
00188 void deleteImage(void) { if (device!=NULL) device->delete_Image();}
00189 void deleteDepth(void) { if (device!=NULL) device->delete_Depth();}
00190
00191
00192 BOOL waitImage(void) { if (device!=NULL) return device->wait_Image(); else return FALSE;}
00193 BOOL waitDepth(void) { if (device!=NULL) return device->wait_Depth(); else return FALSE;}
00194
00195
00196 BOOL faceDetect(FT_VECTOR3D* hint)
00197 {
00198 if (device!=NULL && device->face!=NULL) return device->face->detect(hint);
00199 else return FALSE;
00200 }
00201
00202 void drawFaceRect(ExCmnHead* viewdata, int scale, BOOL mirror, int col, int line)
00203 {
00204 if (device!=NULL && device->face!=NULL) {
00205 device->face->drawFaceRect(pViewData, m_image_scale, m_is_mirroring, col, line);
00206 }
00207 }
00208
00209
00210 int getXSize(void) { if (device!=NULL) return device->m_xsize; else return 0;}
00211 int getYSize(void) { if (device!=NULL) return device->m_ysize; else return 0;}
00212 int getFPS(void) { if (device!=NULL) return device->m_nfps; else return 0;}
00213 };
00214
00215
00216
00217
00219
00220
00221 void CALLBACK KinectStatusProc(HRESULT hr, const OLECHAR* instanceName, const OLECHAR* deviceName, void* pUserData);
00222
00223
00224 }
00225
00226
00227 #endif