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