Nuitrack 1.5.0
3D スケルトン トラッキング ミドルウェア
 すべて クラス 名前空間 関数 変数 Typedefs 列挙型 列挙子 プロパティ イベント グループ ページ
SkeletonTracker.h
1 #ifndef NUITRACK_SKELETONTRACKER_H_
2 #define NUITRACK_SKELETONTRACKER_H_
3 
4 #include <functional>
5 
6 #include "nuitrack/modules/HeaderOnlyAPI_Module.h"
7 #include "nuitrack/ModuleFunctions.h"
8 #include "nuitrack/types/Export.h"
9 #include "nuitrack/types/SkeletonData.h"
10 #include "nuitrack/capi/SkeletonTracker_CAPI.h"
11 #include "nuitrack/utils/ExceptionTranslator.h"
12 #include "nuitrack/utils/CallbackStruct.h"
13 
14 namespace tdv
15 {
16 namespace nuitrack
17 {
33 class SkeletonTracker :public tdv::nuitrack::HeaderOnlyAPI_Module
34 {
35 public:
40  typedef std::shared_ptr<SkeletonTracker> Ptr;
41 
50  typedef std::function<void (SkeletonData::Ptr)> OnUpdate;
51  typedef void (*OnUpdateRawFunctionPtr)(SkeletonData*, SkeletonTracker*);
52 
60  typedef std::function<void (SkeletonTracker::Ptr, int)> OnNewUser;
61  typedef void (*OnNewUserRawFunctionPtr)(SkeletonTracker*, int);
62 
70  typedef std::function<void (SkeletonTracker::Ptr, int)> OnLostUser;
71  typedef void (*OnLostUserRawFunctionPtr)(SkeletonTracker*, int);
72 
81  {
82  NuitrackModule* pimpl = NULL;
83  ExceptionType errorCode = nuitrack_CreateSkeletonTracker(&pimpl);
84  ExceptionTranslator::generateExceptionByErrorCode(errorCode);
85  return std::shared_ptr<SkeletonTracker>(new SkeletonTracker(pimpl));
86  }
87 
89  SkeletonTracker(NuitrackModule* pimpl)
90  {
91  _pimpl = pimpl;
92  _isCopy = 0;
93 
94  _onUpdateCallbackStruct = new CallbackStruct<SkeletonData::Ptr>();
95  _onNewUserCallbackStruct = new CallbackStruct2p<SkeletonTracker::Ptr, int>();
96  _onLostUserCallbackStruct = new CallbackStruct2p<SkeletonTracker::Ptr, int>();
97 
98  _callbackWrapper.setSkeletonTracker(this);
99  _callbackWrapper.setOnUpdateAddress(&onUpdateCallback);
100  _callbackWrapper.setOnNewUserAddress(&onNewUserCallback);
101  _callbackWrapper.setOnLostUserAddress(&onLostUserCallback);
102  nuitrack_registerSkeletonTrackerCallback(_pimpl, &_callbackWrapper);
103  }
104 
106  SkeletonTracker(NuitrackModule* pimpl, CallbackStruct<SkeletonData::Ptr>* onUpdateCallbackStruct,
107  CallbackStruct2p<SkeletonTracker::Ptr, int>* onNewUserCallbackStruct,
108  CallbackStruct2p<SkeletonTracker::Ptr, int>* onLostUserCallbackStruct)
109  {
110  _pimpl = pimpl;
111  _isCopy = 1;
112 
113  _onUpdateCallbackStruct = onUpdateCallbackStruct;
114  _onNewUserCallbackStruct = onNewUserCallbackStruct;
115  _onLostUserCallbackStruct = onLostUserCallbackStruct;
116  }
117 
118  virtual ~SkeletonTracker()
119  {
120  if(_isCopy == 0)
121  {
122  nuitrack_DestroySkeletonTracker(_pimpl);
124  }
125  }
126 
134  uint64_t connectOnUpdate(const OnUpdate& callback)
135  {
136  return _onUpdateCallbackStruct->addCallback(callback);
137  }
138 
145  void disconnectOnUpdate(uint64_t handler)
146  {
147  _onUpdateCallbackStruct->deleteCallback(handler);
148  }
149 
158  uint64_t connectOnNewUser(const OnNewUser& callback)
159  {
160  return _onNewUserCallbackStruct->addCallback(callback);
161 
162  }
163 
170  void disconnectOnNewUser(uint64_t handler)
171  {
172  _onNewUserCallbackStruct->deleteCallback(handler);
173  }
174 
183  uint64_t connectOnLostUser(const OnLostUser& callback)
184  {
185  return _onLostUserCallbackStruct->addCallback(callback);
186  }
187 
194  void disconnectOnLostUser(uint64_t handler)
195  {
196  _onLostUserCallbackStruct->deleteCallback(handler);
197  }
198 
207  void setNumActiveUsers(int numUsers)
208  {
209  nuitrack_SetNumActiveUsers(_pimpl, numUsers);
210  }
211 
217  bool isAutoTracking() const
218  {
219  return nuitrack_IsAutoTracking(_pimpl);
220  }
221 
237  void setAutoTracking(bool tracking)
238  {
239  nuitrack_SetAutoTracking(_pimpl, tracking);
240  }
241 
249  void startTracking(int userID)
250  {
251  nuitrack_StartTracking(_pimpl, userID);
252  }
253 
261  void stopTracking(int userID)
262  {
263  nuitrack_StopTracking(_pimpl, userID);
264  }
265 
273  bool isTracking(int userID)
274  {
275  return nuitrack_IsTracking(_pimpl, userID);
276  }
277 
281  SkeletonData::Ptr getSkeletons()
282  {
283  SkeletonTrackerDataPtr data = nuitrack_GetSkeletonTrackerData(_pimpl);
284  SkeletonData::Ptr newFrame = SkeletonData::Ptr(new SkeletonData(data));
285  return newFrame;
286  }
287 
291  float getProcessingTime() const
292  {
293  return nuitrack_GetSkeletonTrackerProcessingTime(_pimpl);
294  }
295 
296  bool canUpdate() const
297  {
298  return nuitrack_GetNuitrackModuleCanUpdate(_pimpl);
299  }
300 
307  virtual uint64_t getTimestamp()
308  {
309  return nuitrack_GetNuitrackModuleTimestamp(_pimpl);
310  }
311 
312 protected:
314  static void onUpdateCallback(SkeletonTrackerData* frame, SkeletonTracker* tracker)
315  {
316  SkeletonData::Ptr newFrame = SkeletonData::Ptr(new SkeletonData(frame));
317 
318  tracker->_onUpdateCallbackStruct->executeAllCallbacks(newFrame);
319  }
320 
322  static void onNewUserCallback(SkeletonTracker* tracker, int usedID)
323  {
324 
326  new SkeletonTracker(tracker->_pimpl, tracker->_onUpdateCallbackStruct,
328 
329  tracker->_onNewUserCallbackStruct->executeAllCallbacks(ptr, usedID);
330  }
331 
333  static void onLostUserCallback( SkeletonTracker* tracker, int usedID)
334  {
335 
337  new SkeletonTracker(tracker->_pimpl, tracker->_onUpdateCallbackStruct,
339 
340  tracker->_onLostUserCallbackStruct->executeAllCallbacks(ptr, usedID);
341  }
342 
345  {
352  }
353 
354  NuitrackModule* _pimpl;
355  int8_t _isCopy;
356 
357  CallbackStruct<SkeletonData::Ptr>* _onUpdateCallbackStruct;
358  CallbackStruct2p<SkeletonTracker::Ptr, int>* _onNewUserCallbackStruct;
359  CallbackStruct2p<SkeletonTracker::Ptr, int>* _onLostUserCallbackStruct;
360 
361  SkeletonTrackerCallbackWrapper _callbackWrapper;
362 
363 };
364 
365 } /* namespace nuitrack */
366 } /* namespace tdv */
367 
368 #endif /* NUITRACK_SKELETONTRACKER_H_ */
SkeletonData::Ptr getSkeletons()
利用可能な最後の SkeletonData に対してスマート ポインターを戻します。
定義:SkeletonTracker.h:281
float getProcessingTime() const
最後に行われたスケルトンのデータ処理をミリ秒で戻します。
定義:SkeletonTracker.h:291
void setNumActiveUsers(int numUsers)
トラッキングを行うユーザーの最大数を設定します。
定義:SkeletonTracker.h:207
std::shared_ptr< SkeletonTracker > Ptr
SkeletonTracker インスタンスにアクセスするためのスマート ポインター。
定義:SkeletonTracker.h:40
Exception タイプ
Nuitrack 内部関数の考え得るエラーコードです。
定義:Error.h:20
static void onNewUserCallback(SkeletonTracker *tracker, int usedID)
定義:SkeletonTracker.h:322
void stopTracking(int userID)
ユーザーのトラッキングを終了します。
定義:SkeletonTracker.h:261
ある特定の時間に利用可能なすべてのスケルトンのデータを保存します。
定義:SkeletonData.h:19
SkeletonTracker(NuitrackModule *pimpl)
定義:SkeletonTracker.h:89
void setAutoTracking(bool tracking)
ユーザー スケルトン自動トラッキング状態を設定します。
定義:SkeletonTracker.h:237
static void onUpdateCallback(SkeletonTrackerData *frame, SkeletonTracker *tracker)
定義:SkeletonTracker.h:314
CallbackStruct2p< SkeletonTracker::Ptr, int > * _onNewUserCallbackStruct
定義:SkeletonTracker.h:358
SkeletonTracker(NuitrackModule *pimpl, CallbackStruct< SkeletonData::Ptr > *onUpdateCallbackStruct, CallbackStruct2p< SkeletonTracker::Ptr, int > *onNewUserCallbackStruct, CallbackStruct2p< SkeletonTracker::Ptr, int > *onLostUserCallbackStruct)
定義:SkeletonTracker.h:106
uint64_t connectOnUpdate(const OnUpdate &callback)
スケルトン データ更新リクエストのためのコールバックを追加します。
定義:SkeletonTracker.h:134
NuitrackModule * _pimpl
定義:SkeletonTracker.h:354
virtual uint64_t getTimestamp()
マイクロ秒で表示される、最後に処理したデータのタイムスタンプを戻します。
定義:SkeletonTracker.h:307
インターフェイスに Nuitrack スケルトン トラッカー モジュールの可能性を表します。
定義:SkeletonTracker.h:33
uint64_t connectOnLostUser(const OnLostUser &callback)
アクティブなユーザーのフレームアウト イベントに関するコールバックを追加します。
定義:SkeletonTracker.h:183
void startTracking(int userID)
ユーザー トラッキングを開始します。
定義:SkeletonTracker.h:249
void disconnectOnUpdate(uint64_t handler)
スケルトン データ更新リクエストのためのコールバックを削除します。
定義:SkeletonTracker.h:145
bool isTracking(int userID)
ユーザーのトラッキング状態を取得します。
定義:SkeletonTracker.h:273
std::function< void(SkeletonTracker::Ptr, int)> OnNewUser
新しいアクティブなユーザー出現イベントのためのコールバック タイプ。
定義:SkeletonTracker.h:60
static void onLostUserCallback(SkeletonTracker *tracker, int usedID)
定義:SkeletonTracker.h:333
void disconnectOnLostUser(uint64_t handler)
アクティブなユーザーのフレームアウト イベントに関するコールバックを削除します。
定義:SkeletonTracker.h:194
CallbackStruct2p< SkeletonTracker::Ptr, int > * _onLostUserCallbackStruct
定義:SkeletonTracker.h:359
CallbackStruct< SkeletonData::Ptr > * _onUpdateCallbackStruct
定義:SkeletonTracker.h:357
uint64_t connectOnNewUser(const OnNewUser &callback)
アクティブなユーザー出現イベントに関するコールバックを追加します。
定義:SkeletonTracker.h:158
bool isAutoTracking() const
自動トラッキングが有効な場合には true、その他の場合には false となります。
定義:SkeletonTracker.h:217
std::function< void(SkeletonData::Ptr)> OnUpdate
スケルトン データ更新リクエストのためのコールバック タイプ。
定義:SkeletonTracker.h:50
void disconnectOnNewUser(uint64_t handler)
アクティブなユーザー出現イベントに関するコールバックを削除します。
定義:SkeletonTracker.h:170
SkeletonTrackerCallbackWrapper _callbackWrapper
定義:SkeletonTracker.h:361
std::function< void(SkeletonTracker::Ptr, int)> OnLostUser
アクティブなユーザーのフレームアウト イベントのためのコールバック タイプ。
定義:SkeletonTracker.h:70
int8_t _isCopy
定義:SkeletonTracker.h:355
static SkeletonTracker::Ptr create()
SkeletonTracker モジュール オブジェクトを作成します。
定義:SkeletonTracker.h:80
void destroySkeletonTracker()
定義:SkeletonTracker.h:344