手の姿勢を判断

写真1●手の輪郭画像
写真1●手の輪郭画像

 先の計算で、カメラに映った手の輪郭を検出しました。次に手の輪郭から手のジェスチャーを判断させます。そのためには、どのようにグー、チョキ、パーと判断させるかですが、次のような流れで判断しています。

 まず、先の手の輪郭画像、あらかじめ用意したグー、チョキ、パーの輪郭画像(写真1)からHoG(Histgram of Oriented Gradients)と呼ばれるアルゴリズムを使って、それぞれのヒストグラムを求めます。

 HoGとは、1つの画像を9×9など複数の区画に分割し、その中の輝度に着目してヒストグラム化する手法です。この手法は、幾何学的変化、照明変化に強いので、最近よく用いられるアルゴリズムです。詳細な説明は、Wikipediaを参考にしてください。

 HoGを利用して求めたそれぞれの輪郭画像のヒストグラムと、グー、チョキ、パーのそれぞれとのヒストグラムを比較し、ある値以内の差であれば、その手のポーズであると判断しています(図6)。

// ヒストグラムがどの程度似ているか算出
private double getDistance(double[] feat1, double[] feat2)
{
   double dist = 0.0;
   for(int i=0; i<feat1.length; i++){
   double val = Math.abs(feat1[i] - feat2[i]);
   dist += val * val;
   }
   return Math.sqrt(dist);
}

public void process(byte[] srcImage, int width, int height, 
double[] distanceList) {

   int size = getFeatSize();
   double[] ary = new double[size];

   try {
   ByteBuffer buf = ByteBuffer.allocateDirect(srcImage.length);
   buf.put(srcImage);

// HOG(Histogram of Oriented Gradients) によるヒストグラム取得
   getFeatParams(buf, width, height, ary);

   } catch(OutOfMemoryError e){
   Log.v(TAG, "OutOfMemory Exception!!");
   }

        // グー、チョキ、パーのヒストグラムとどの程度似ているか算出
        // 値が小さい方が相似している
   for(int i = 0; i < HAND_NUM; i++){
   distanceList[i] = getDistance(ary, feat_hand[i]);
}

}
図6●ヒストグラムがどの程度似ているか算出するプログラム

 今回は計算量を減らすために、HoGを利用して求めたグー、チョキ、パーのヒストグラムをデータとして保持することで、1回の処理における計算量を減らし高速化を図っています。

 また今回は1つの画像を基にしてヒストグラムを生成しましたが、大量のグー、チョキ、パーの画像データを基にヒストグラムを作成することも可能です。そうすると、より精度の高い認識が可能となります。

リモコンの制御

 ハンドジェスチャーの解析が完了したあとは、赤外線を送信して家電をリモコン制御します。これらについては、連載4回目から解説しました。

 詳細は以前からの連載を参考にしていただくとして、ここでは概略だけ解説します。今回は、リモコン送信はバッファロー社のRemoteStation(PC-OP-RS1)を利用しAndroidから制御しています。RemoteStationは、接続されているコンピュータとUSB-Serialチップを経由して通信しています。また、AndroidはベースOSがLinuxなので、制御プログラムもLinux向けに作成されたものは、Androidにほぼそのまま流用できます。

 今回は、C言語でRemoteStationに対してシリアル通信を行うライブラリを作成、そのライブラリをJavaのクラスライブラリで覆い、Android Frameworkに追加することで、RemoteStationをAndroidアプリケーションから制御できるようにしました。コードは、連載第10回の図3で説明したので詳細は割愛します(図7)。

図7●android_hardware_Pcremocon.cpp内での「data_send」メソッド定義(抜粋)
[画像のクリックで拡大表示]

この先は会員の登録が必要です。有料会員(月額プラン)は初月無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら