Leap Motion最新情報(2014年5月)

これは快適! Leap Motion V2(ベータ版)で格段に良くなったSkeletal Tracking機能

2014年5月23日

V1と比べて非常に追従性がよくなった、最新のLeap Motion Version 2.0 Beta Skeletal Trackingの入手方法や新しい機能について解説する。

Natural Software 中村 薫
  • このエントリーをはてなブックマークに追加

 先週(2014/5/15)に公開された「Leap Motion Version 2.0 Beta(Skeletal Tracking: スケルトン・トラッキング機能)」について紹介する。

 Leap Motionの概要については、下記の記事を参照してほしい。開発環境の構築手順は変わらないので、以前の知識をそのまま使うことができる。

 まずは次の動画を見ていただきたい。Leap Motion V2 Betaの動画だ。

Leap Motion V2 Betaを試しているところ

 今までのLeap Motion(以下、「Leap Motion V1」とする)と比べても非常に追従性がよく、リリース当時のプロモーションビデオに近くなっている。Leap Motion V2 Betaでは、ハードウェアの変更はなく、ソフトウェアの変更のみとなっている。そのため、Leap Motionコントローラーが手元にあれば、すぐにでも試すことができる。

 本稿ではLeap Motion V2 BetaのSDKの入手方法や新しい機能について解説する。解説する内容は下記のリンク先を参照すると、より詳細な情報を得られるだろう。バージョンは「2.0.0+15464」とする。クラスやメソッドなどについてはC#の名称としている。

インストーラーの入手

 どのような形であれ、Leap Motion V2 Betaの動きを見るためには、手元のコンピューターにLeap Motion V2 BetaのSDKをインストールする必要がある。インストーラーはLeap MotionのサイトのDeveloper Portalから入手する(Developer Portalにはアカウントが必要になるので、登録を先に済ませておくこと)。Developer PortalはV1とV2 Betaの2つが存在するので、V2 Betaを選択してほしい(次の画面)。

Leap Motion V2 Betaをダウンロードする

 ダウンロードするとZIPファイルが取得できる。これを解凍すると次の3つのファイルがある。

  • LeapSDKフォルダー(Leap Motion V2 Beta SDK)
  • Leap_Motion_Installer~.exe(クライアントインストーラー)
  • README.txt
Leap Motion V2 Betaを解凍する

 クライアントインストーラーを実行し、セットアップウィザードの指示に従ってインストールする。インストールが完了したら、ビジュアライザーを起動してみよう。タスクトレイのLeap Motionコントロールパネルを右クリックし、コンテキストメニューから[ビジュアライザー]を選択する(次の画面)。

ビジュアライザーを起動する
ビジュアライザーを起動する

 ビジュアライザーが起動したら(次の画面)、Leap Motionコントローラーを接続し、指を検出させてみよう。Leap Motion V1とは異なり、指の関節が表示され、手の形が浮き出てくるだろう。手を回転させたり、開閉させたりして見てほしい。Leap Motion V1と比較して明らかに追跡性能が向上していることが分かるだろう。

ビジュアライザー

新しい機能

 Leap Motion V2 Betaでは基本的にLeap Motion V1の機能を踏襲し、追跡性能の向上および、より詳細な追跡情報の取得が可能となっている。新しい機能を見るにはこちらのページにアクセスすると早いだろう。Leap Motion V2 Betaの機能が見られる他、Leap Motionコントローラーが接続されていれば、実際に動作させることもできる。

ハンドモデル(Hand Model)および指の関節の検出

 手の形を追跡する。Leap Motion V1では「手のひら」と「指先」の追跡だけだったが、V2では「指の関節」を検出できるようになった。これによって手の形を認識できるようになった。次の図は、V2のハンドモデルである。

ハンドモデル
ハンドモデル

 指の関節はBoneクラスで表され、次の図に示す4つの骨(distal/medial/proximal/metacarpal)から成り立っている。BoneクラスはFingerクラスのBoneメソッドに、ボーンの種類を指定することで取得できる。FingerクラスにはJointPositionメソッドが追加されているが、非推奨扱いとなっている。これはPrivate Betaバージョンのもので(筆者はこのバージョンから使っていた)、Public BetaバージョンでBoneクラスに置き換わったようだ。

ハンドモデル
ハンドモデル

ピンチ(Pinch)の検出

 親指と人差し指の開閉度を表す。タッチパネルで写真を拡大/縮小するような動作だ。開いている状態が「0」、閉じている状態が「1」となり、その間の値が開閉度合いとなっている(次の画面)。この値はHandクラスのPinchStrengthプロパティで取得できる。

ピンチの検出
ピンチの検出

グラブ(Grab)の検出

 指全体の開閉度を表す。「パー」から「グー」にする(または逆の)動作だ。開いている状態が「0」、閉じている状態が「1」となり、その間の値が開閉度合いとなっている(次の画面)。この値はHandクラスのGrabStrengthプロパティで取得できる。

グラブの検出
グラブの検出

検出値の信頼度(Data Confidence)

 Leap Motion V2 Betaでは手を回転させる、手を重ねるなどの動きをしても、Leap Motion V1と比べて追跡し続けるようになっている。とはいえ、完全に検出できているわけではない。この値の信頼性を表すパラメーターが追加された。「0」~「1」の間で変化し、「1」に近いほど信頼される値となる(次の画面)。この値はHandクラスのConfidenceプロパティで取得できる。

検出値の信頼度
検出値の信頼度

右手と左手(Left or Right)の検出

 右手と左手を検出できるようになった(V1ではできなかった……)(次の画面)。検出を開始した時の手の形から判別しているようで、手を裏返してLeap Motionコントローラーに近づけると、逆の手として検出する。この値はHandクラスのIsLeftプロパティまたはIsRightプロパティで取得できる。

右手と左手の検出

指の種類の検出

 指の種類(親指~小指)を検出できるようになった(これもV1ではできなかった……)。ビジュアライザーを見ても分かる通り、Leap Motion V2 Betaでは手を閉じて(グーにして)も指を検出するようになった。これによって、指の種類を検出できるようになっている(次の画面)。ただし常に検出し続けるため、Leap Motion V1との互換性が損なわれている部分もあるので、注意が必要だ。これについては後述する。この値はFingerクラスのTypeメソッドで取得できる。

指の種類の検出
指の種類の検出

Leap Motion V2 Betaでの注意点

 Leap Motion V2 Betaでは、指を開いても閉じても5本の指を検出し続けるようになった。パーでも指は5本、グーでも指は5本を検出している(FingerクラスのCountプロパティの値)。Leap Motion V1では指を閉じると検出できなかったので、パーでは5本、グーでは0本となっていた。既存のアプリケーションで指の数をプログラムで利用している場合は常に5本を検出する(例えばじゃんけんアプリでは常にパーとなる)ので、意図しない動作になるだろう。このため、FingerクラスのベースクラスであるPointableクラスにIsExtendedプロパティが追加されている。IsExtendedプロパティが「true」の場合は指が伸びている(Leap Motion V1での検出状態)、falseの場合は指が閉じている(Leap Motion V1での未検出状態)となる。この条件を追加する必要があるだろう。

 次の画面は、「Leap Motionでのタッチ操作はどう開発するのか?[C++] - Build Insider」のサンプルをLeap Motion V1とLeap Motion V2 Betaで動作させた結果だ。人差し指だけを出している状態になり、V1とV2で指の表示が異なっていることが分かるだろう。

Leap Motion V1での動作結果
Leap Motion V2 Betaでの動作結果

 より具体的なコード(C#の場合)は次の通りだ。

C#
var frame = leap.Frame();
var hand = frame.Hands.FirstOrDefault( ( h ) => h.IsValid );
if ( hand != null ) {
  // V2では常に5になる
  var count1 = hand.Fingers.Count;

  // 伸びている指の数が返る
  var count2 = hand.Fingers.Count( ( f ) => f.IsExtended );

  foreach ( var finger in hand.Fingers ) {
    if ( finger.IsExtended ) {
      // 従来の指の処理
    }
  }
}
Leap Motion V2 BetaとV1の差異を解消するために、IsExtendedプロパティを活用しているコードの例(Program.cs)

最後に

 Leap Motion V1の精度では実現できなかったアイデアがいよいよ実現できるのではないだろうか。現在、Leap MotionコントローラーはBBソフトサービス株式会社が代理店となり、以前よりも安心して購入できる。また大手家電量販店でも販売されているため、以前にも増して気軽に購入できるようになっている。

 販売状況が整ったLeap Motionコントローラーと大幅に精度、機能が向上したLeap Motion V2 Betaで新しいアイデアが形になることを願っている。

サイトからのお知らせ(イベント情報)
(Build Insiderが主催)

サイトからのお知らせ(イベント情報)
(Build Insiderがメディアスポンサー)

Twitterでつぶやこう!


Build Insider賛同企業・団体

Build Insiderは、以下の企業・団体の支援を受けて活動しています。

プラチナレベル

  • 日本マイクロソフト株式会社
  • 株式会社グラニ
  • 株式会社gloops

ゴールドレベル

  • グレープシティ株式会社
  • 株式会社ネクストスケープ
  • 株式会社セカンドファクトリー