NtKinect: Kinect V2 C++ Programming with OpenCV on Windows10

Kinect V2 で音声方向を取得する


2016.07.18: created by
Japanese English
目次へ

前提として理解しておくべき知識


音声を方向を取得する

USE_AUDIO 定数を define してから NtKinect.h を include する と NtKinect の音声関係のメソッドや変数が有効になります。

setAudio() 関数を呼び出すと音声の方向が beamAngle 変数に入ります。 Kinectに対面した人間から見て、右に移動するとプラスの値、左に移動するとマイナスの値となります。

NtKinect

NtKinect の音声に関するメソッド

返り値の型 メソッド名 説明
void setAudio(bool flag = false)

音声を取得し、録音中ならファイルに保存する。
音声の方向を判定し、変数 beamAngle にセットする。

引数
flag
setSkeleton()を呼び出した後で引数をtrueにして呼び出すと 発話者のskeletonTrackingId[i] をメンバ変数audioTrackingId にセットする。
void drawAudioDirection(cv::Mat& image ) 音声ビームの方向を image に描画する。
bool isOpenedAudio() 録音ファイルをopen中かどうかを返す。
void openAudio(string path ) path を録音用ファイルとしてオープンする。
void closeAudio() 録音用ファイルをクローズする。
NtKinect

NtKinect の音声に関するメンバ変数

変数名 説明
float beamAngle 音声の方向(左右への角度)
float beamAngleConfidence beamAngleの信頼度 (0.0 〜 1.0)
UINT64 audioTackingId 発話者のskeletonTrackingId

プログラム作成の手順

  1. NtKinect: Kinect V2 で音声を取得する。」 の Visual Studio のプロジェクト KinectV2_audio.zipを用いて作成します。
  2. WaveFile.hは既にプロジェクトに追加されているはずです。

  3. main.cppの内容を以下のように変更します。
  4. NtKinect.hをincludeする前に USE_AUDIO 定数をdefineします。 setAudio()を呼び出すとアレイマイクにより音声が取得されて方向が計算されます。 結果はbeamAngle変数とbeamAngleConfidence変数に入ります。 drawAudioDirection()関数で音声方向をcv::Matに描画します。

    main.cpp
    #include <iostream>
    #include <sstream>
    
    #define USE_AUDIO
    #include "NtKinect.h"
    
    using namespace std;
    
    void doJob() {
      NtKinect kinect;
      cv::Mat beam;
      while (1) {
        kinect.setRGB();
        kinect.setAudio();
        cv::putText(kinect.rgbImage, "beamAngle: "+to_string(kinect.beamAngle),
                    cv::Point(50, 50), cv::FONT_HERSHEY_SIMPLEX, 1.2, cv::Scalar(0, 0, 255), 1, CV_AA);
    // rename CV_AA as cv::LINE_AA (in case of opencv3 and later)
        cv::putText(kinect.rgbImage, "beamAngleConfidence: "+to_string(kinect.beamAngleConfidence),
                    cv::Point(50, 80), cv::FONT_HERSHEY_SIMPLEX, 1.2, cv::Scalar(0, 0, 255), 1, CV_AA);
        cv::imshow("rgb", kinect.rgbImage);
        kinect.drawAudioDirection(beam);
        cv::imshow("beam",beam);
        auto key = cv::waitKey(1);
        if (key == 'q') break;
      }
      cv::destroyAllWindows();
    }
    
    int main(int argc, char** argv) {
      try {
        doJob();
      } catch (exception &ex) {
        cout << ex.what() << endl;
        string s;
        cin >> s;
      }
      return 0;
    }
    
  5. プログラムを実行するとRGB画像が表示されます。'q'キーで終了します。
  6. ウィンドウの左上に、音声の方向とその信頼度が表示されます。 また、別ウィンドウ beam に音声方向が線で表示されます。




  7. サンプルのプロジェクトはこちら KinectV2_audio2.zip
  8. 上記のzipファイルには必ずしも最新の NtKinect.h が含まれていない場合があるので、 こちらから最新版をダウンロードして 差し替えてお使い下さい。



http://nw.tsuda.ac.jp/