00001 #pragma once
00002
00003 #if defined(ENABLE_OPENNI) || defined(ENABLE_OPENNI2)
00004
00005 #include "OpenNiTool.h"
00006 #include "NiToolWin.h"
00007
00008
00009 #include "OpenNiAudio.h"
00010
00011 #include "ExView.h"
00012 #include "Rotation.h"
00013 #include "RingBuffer.h"
00014
00015 #include "NiSpeech.h"
00016
00017
00018
00019 #ifdef ENABLE_OPENNI2
00020 #pragma comment(lib, "OpenNI2.lib")
00021 #pragma comment(lib, "NiTE2.lib")
00022 #else
00023 #ifdef WIN64
00024 #pragma comment(lib, "OpenNI64.lib")
00025 #pragma comment(lib, "XnVNITE64_1_5_2.lib")
00026 #else
00027 #pragma comment(lib, "OpenNI.lib")
00028 #pragma comment(lib, "XnVNITE_1_5_2.lib")
00029 #endif
00030 #endif
00031
00032
00033
00034 namespace jbxwl {
00035
00036 using namespace jbxl;
00037
00038
00039 class COpenNiWin : public COpenNiTool
00040 {
00041 public:
00042
00043 COpenNiWin(NiSDK_Lib lib);
00044 virtual ~COpenNiWin(void) { free();}
00045
00046 private:
00047 COpenNiAudio* audio;
00048 CNiSpeech* speech;
00049
00050 public:
00051 NiSDK_Lib m_library;
00052 CString m_err_mesg;
00053
00054 int m_image_scale;
00055 int m_depth_scale;
00056 int m_skeleton_line;
00057
00058 BOOL m_is_tracking;
00059 BOOL m_is_detected;
00060 BOOL m_is_mirroring;
00061
00062 BOOL m_use_image;
00063 BOOL m_use_led;
00064 BOOL m_use_motor;
00065 BOOL m_use_face;
00066 BOOL m_use_speech;
00067
00068 BOOL m_enable_face;
00069 BOOL m_enable_speech;
00070 BOOL m_enable_motor;
00071
00072 BOOL m_use_nite_smth;
00073 BOOL m_force_pose;
00074
00075 int m_profile;
00076 double m_confidence;
00077 double m_nite_smooth;
00078 double m_ground_level;
00079
00080 public:
00081 ExCmnHead* pViewData;
00082 ExCmnHead* pDepthData;
00083
00084 BOOL hasDepthData;
00085 BOOL hasUserData;
00086 BOOL isDetectShadow;
00087 BOOL isDetectFace;
00088
00089 public:
00090 BOOL init(void);
00091 void free(void);
00092
00093 CString get_err_message(void);
00094
00095 public:
00096
00097 void deleteDevice(void) { delete_Device();}
00098 void clearJointsData(void);
00099 void clearAvatarDetected(void);
00100 BOOL checkAvatarDetected(void);
00101
00102 BOOL openUSBDevice(void) { return open_USBDevice();}
00103 void closeUSBDevice(void) { close_USBDevice();}
00104 void setLEDColor(int col) { if (m_use_led) set_LEDColor(col);}
00105 void setTiltMotor(int ang);
00106
00107 void setMirroring(BOOL mirror);
00108
00109
00110
00111 BOOL startDetection(void);
00112 BOOL stopDetection(void);
00113 BOOL restartDetection(void);
00114
00115 unsigned int getTrackingUser(void) { return get_TrackingUser();}
00116 void setDenyTrackingSearch(unsigned int user) { set_DenyTrackingSearch(user);}
00117
00118
00119 void getJointsPosData(unsigned int uid);
00120 void getJointsRotData(unsigned int uid);
00121
00122
00123 void makeDisplayImage(void);
00124 void makeDisplayDepth(CExView* pview);
00125 BOOL trackingJoints(BOOL use_rot_data);
00126
00127
00128 BOOL detectShadow(void);
00129 void paintShadow(void);
00130 void drawSkeleton(int col, int line);
00131 void drawJointConnection(int j1, int j2, int col, int line);
00132 void set2DCoordinate(void);
00133
00134
00135 BOOL initRingBuffer(void);
00136 void freeRingBuffer(void);
00137 void clearRingBuffer(void);
00138 void backup2RingBuffer(void);
00139
00140 public:
00141
00142
00143
00144 public:
00145
00146 BOOL initSpeech(void);
00147 BOOL createSpeech(LPCTSTR lang, LPCTSTR grfile);
00148 BOOL startSpeech(double confidence);
00149 void stopSpeech(void);
00150 void deleteSpeech(BOOL rls=TRUE);
00151
00152 void setSpeechConfidence(double confd) { if (speech!=NULL) speech->setConfidence(confd);}
00153
00154 virtual CNiSpeech* makeSpeech(void) { CNiSpeech* spch = new CNiSpeech(); return spch;}
00155
00156 public:
00157 virtual void saveJointsData(void) {}
00158 virtual void loggingJointsData(void) {}
00159
00160 virtual void checkBoneLength(void) {}
00161 virtual void checkGroundLevel(void) {}
00162
00163 virtual void convertJointsData(void) {}
00164 virtual void drawAddition(int col, int line) {}
00165
00166 virtual void lostTrackingUser(int uid) {}
00167 virtual void detectTrackingUser(int uid) {}
00168
00169 public:
00170
00171 Vector<double> startPos;
00172 Vector<double> currentPos;
00173
00174 Vector<double> posVect[OPENNI_JOINT_NUM];
00175 Vector<int> crdVect[OPENNI_JOINT_NUM];
00176 Quaternion<double> rotQuat[OPENNI_JOINT_NUM];
00177
00178 double jntAngl[OPENNI_JOINT_NUM];
00179
00180 CRingBuffer posRing[OPENNI_JOINT_NUM];
00181 CRingBuffer rotRing[OPENNI_JOINT_NUM];
00182 };
00183
00184
00185 }
00186
00187
00188 #endif