setSkeleton()関数により骨格情報を得ることで人間の位置がわかります。 setSkeleton()関数の呼び出しの後で setAudio(true)関数を呼び出す(引数がtrueであることが重要)と 音声方向と人間の位置から発話者を特定します。
特定した発話者の skeletonTrackingId の値は audioTrackingId変数に保持されます (発話者不明の場合は負の値になります)。 audioTrackingId変数の値と skeletonTrackingId[index ] の値が一致していれば、 skeleton[index ] が発話している骨格であると判定できます。
返り値の型 | メソッド名 | 説明 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
void | setSkeleton() | 骨格認識を行い、次のメンバ変数に値を設定する。
|
型 | 変数名 | 説明 |
---|---|---|
vector<vector<Joint>> | skeleton | 骨格情報のベクタ。
一人の人間の関節の集合が vector<Joint> であり、これが骨格情報です。
複数の人間を扱うため骨格情報のベクタ、すなわち vector<vector<Joint>> となります。 関節の座標は CameraSpace 座標系における位置です。
|
vector<int> | skeletonId | 骨格に対応するbodyIndexのベクタ。 skeleton[index ] の bodyIndex は skeletonId[index ] に保持されます。 |
vector<UINT64> | skeletonTrackingId | 骨格に対応するtrackingIdのベクタ。 skeleton[index ] の trackingId は skeletonTrackingId[index ] に保持されます。 |
返り値の型 | メソッド名 | 説明 |
---|---|---|
void | setAudio(bool flag = false) |
音声を取得し、録音中ならファイルに保存する。
|
void | drawAudioDirection(cv::Mat& image ) | 音声ビームの方向を image に描画する。 |
bool | isOpenedAudio() | 録音ファイルをopen中かどうかを返す。 |
void | openAudio(string path ) | path を録音用ファイルとしてオープンする。 |
void | closeAudio() | 録音用ファイルをクローズする。 |
型 | 変数名 | 説明 |
---|---|---|
float | beamAngle | 音声の方向(左右への角度) |
float | beamAngleConfidence | beamAngleの信頼度 (0.0 〜 1.0) |
UINT64 | audioTackingId | 発話者のskeletonTrackingId |
WaveFile.hは既にプロジェクトに追加されているはずです。
NtKinect.hをincludeする前に USE_AUDIO 定数をdefineします。 setSkeleton()の後で setAudio(true)を呼び出すとアレイマイクにより音声の方向が計算され、 方向が一致する骨格情報の skeletonTrackingId が audioTrackingId に代入されます。
main.cpp |
|
関節が赤い四角形で描画されますが、発話者の関節は緑の四角形で描画されます。
音声方向を別ウィンドウで表示しているのは確認のためだけで、この部分はなくても構いません。
上記のzipファイルには必ずしも最新の NtKinect.h が含まれていない場合があるので、 こちらから最新版をダウンロードして 差し替えてお使い下さい。