概要

Project Prague とは

Project Prague は、手のジェスチャ入力に基づいて NUI (自然なユーザー インターフェイス) エクスペリエンスを作成できる SDK (ソフトウェア開発キット) です。 C#、C++ (UWP、.NET Core フレーバーを含む) 用の API (アプリケーション プログラミング インターフェイス) を提供しています。これにより、カスタマイズされた独自の手のジェスチャを簡単に設計して実装し、アプリケーションに統合できます。 GitHub サンプル リポジトリを参照して、手のジェスチャ エクスペリエンスを調べ、プログラミング モデルについて知ることができます。

ジェスチャーの構成要素は、手のポーズと手の動きです。 直感的な言語で指定された単純な制約を使用して、任意の手のポーズと任意の手の動きを定義することができます。 一連の手のポーズと手の動きを組み合わせてジェスチャーを指定できます。 ジェスチャが定義され、ランタイムに登録されると、ユーザーが手でジェスチャを実行したことが検出されるたびに通知されます。 この時点で、目的のロジックを実行して、検出されたジェスチャに応答できます。

Project Prague を使用すると、音楽やビデオの再生、ブックマーク、Web コンテンツの操作、IM (インスタント メッセージング) アプリケーションでの絵文字の送信、デジタル アシスタントの操作、PowerPoint スライドショーの作成と実行、3 次元オブジェクトの操作、手だけでゲームをプレイするなどの手のジェスチャをユーザーに提供できます。

Project Prague の概要

サポートされている深度カメラ

マシンで Project Prague を実行するには、深度カメラが必要です。 現在、次のカメラ ブランドがサポートされています。

ブランド ジェスチャ検出範囲 エクスペリエンス
Intel® RealSense™ SR300 カメラ 20-60 [cm] 最高
Intel® RealSense™ F200 カメラ 20-60 [cm] 良い
Kinect for Windows v2 60-110 [cm] 良い

最適なパフォーマンスを得 られるように、Intel® RealSense™ SR300 カメラを使用することをお勧めします

ハードウェアとソフトウェアの要件

Project Prague のセットアップに進む前に、システムが次の要件を満たしていることを確認してください。

カテゴリ 推奨 最小限
CPU Intel® Core™ i7 シリーズ、8 論理コア Intel® Core™ i5 シリーズ、4 つの論理コア
無料 RAM 2 GB 以上 1GB
オペレーティング システム Creator Update がインストールされているWindows 10 Windows 10

マシンに Project Prague を設定する

マシンで Project Prague を実行するには、次の手順を実行する必要があります。

  1. 次の図に示すように、深度カメラを USB 3.0 ポートに接続し、コンピューターのモニターの下に配置します。

    RealSense カメラ デスクトップのセットアップ

  2. ダウンロードしてインストールするaka.ms/gestures/download からの Project Prague ランタイム。 インストールでは、コンパイル済みのデモ アプリケーションを指す ショートカットがデスクトップ に配置されます。


    デモ アプリケーションは次のとおりです。

    Application [説明]
    Microsoft.Gestures.Service
    |[ジェスチャ検出サービス](getting-started-gestures-service.md) を実行します
    Microsoft.Gestures.DiscoveryClient
    |Windows シェル、PowerPoint、Skype などのジェスチャ統合を提供します
    Microsoft.Gestures.Camera.Viewer
    |カメラからの RGB ストリームを表示し、ジェスチャによってトリガーされる
    アニメーションオーバーレイ
    Wolfly
    |Unity® で作成されたジェスチャ 駆動型ゲームを実行します
  3. インストールが完了すると、 Microsoft Gestures Service というタイトルのウィンドウが起動します。 これは、リアルタイムジェスチャ と姿勢検出ダッシュボードです。 次に示すように、指が正常に検出されていることを確認します。

    ジェスチャ検出ダッシュボード

Note

既定では、右側の検出のみが有効になっています。 両方の手を有効にするには、[ジェスチャ サービス] ウィンドウの [システム] セクションで [2 つの手を有効にする] ボックスをオンにします。

  1. Project Prague のセットアップでは、 Windows の起動時に起動し、バックグラウンドで実行するように次の 2 つのアプリケーションが構成されていることに注意してください。

    • Microsoft.Gestures.Sync - Gestures Service を実行し続け、公開時に更新プログラムをプルします。
    • Microsoft.Gestures.DiscoveryClient - さまざまなコンテキスト (Windows シェル、PowerPoint、Skype、YouTube、フォト、Visual Studio) のジェスチャ統合を提供します。

    この構成は、タスク マネージャーの [スタートアップ] タブでいつでも変更できます。

Project Prague のジェスチャについて

ジェスチャーの作成を開始する前に、 ジェスチャーの基本的な構成要素である手のポーズと手の動きについて理解しておく必要があります。

手のポーズ

手のポーズは 、特定の瞬間の手のスナップショットを指します。 手のポーズには、そのスナップショット内の手のひらと指の状態の完全な説明が含まれています。 この API では、ハンド ポーズは HandPose クラスによって表されます。これは、次に示すように 、さまざまな制約で構成 されます。

HandPose と制約

次に示すように、そのポーズに関係するすべての拘束を特徴付けることで、任意のハンド ポーズを表現できます。

HandPose の例

上の例は、左側のスナップショットに合理的に関連付けることができるすべての制約を示しています。 この例は、Project Prague 言語で制約を指定するために使用されるさまざまな用語の意味を示すために、教育目的でのみ提供されます。 実際には、このような多数の拘束を使用して手のポーズを指定することは決してありません。 代わりに、手のポーズの本質をキャプチャする最小限の数の制約を見つける必要があります。 次の例は 、同じポーズを記述する実用的な方法です。

HandPose の簡略化された例

この最後の例では、スナップショット内のポーズの本質を十分にキャプチャします。親指と人差し指によって実行されるピンチ 操作です。 中指、リング指、ピンク色の指は、手のポーズの説明には含まれていないことに注意してください。これはピンチ操作に参加しないため、ポーズの本質を表現する必要はありません。

手のポーズを定義するときに制約が多すぎると (つまり、オーバーフィット)、検出が困難なポーズが生成される可能性があります。 これは、ユーザーがすべての制約を満たすために、非常に具体的な姿勢に手を調整する必要があるためです。 手のポーズ (アンダーフィット) を定義するときに制約が少なすぎると、ポーズが検出されすぎて、ユーザーが意図せずにポーズを実行する可能性があります

手の動き

手を動かすと、 指先が空間を通って曲線をトレースします。 この曲線は "手の動き" と呼び、API では HandMotion クラスによって表されます。 手の動きは手の部分 (手のひらの中心または指先の 1 つ) に関連付けられて、 一連のモーション構成要素で構成されます。 使用可能な構成要素を次に示します。

HandMotion 構成要素

ご覧のように、すべての 構成要素は、2 次元のモーションを記述します。 つまり、モーション全体が 1 つの平面内に含まれます。 制約のない3次元手の動きは正確に実行するのが難しいため、より優れたユーザー エクスペリエンスを提供するために、意図的にこの制限を導入しました。 次に示すように、 手の動きを含めるために使用可能な 3 つの平面のいずれかを選択できます。

手の動き平面

モーションを実行するハンド パーツを決定し、それを含む平面を選択したら、残っているのは、 モーション構成要素のシーケンスとしてモーションを指定することだけになります。次に例を示します。

モーション - 単純な例

ジェスチャ

ジェスチャは、状態が 手のポーズ、手の動き、またはその他のジェスチャを表すステート マシンと考えられます。 このステート マシンには、初期状態と受信状態があります。 初期状態から始まり、受信状態で終わるパスは、対応するジェスチャの検出をトリガーするためにユーザーが実行する必要がある一連のアクション (手のポーズ、手の動き、手のジェスチャ) を表します。

この API では、ジェスチャは Gesture クラスによって表されます。 次の例は、ステート マシンが手のポーズと手の動きの単純なシーケンスであるジェスチャを示しています。

ジェスチャの例

この例のスリングショット ジェスチャは、取り消しという名前の 1 つのハンド モーションと 3 つのハンド ポーズ (NotPinching の 2 つのインスタンスとピンチの 1 つのインスタンス) で構成されています。 スリングショット ジェスチャは、次のアクション シーケンスに対応します。左手にスリングショットを保持し、右手の親指と人差し指でポケットをつかみ、それを引き戻してスリングショット バンドを伸ばします。最後に、インデックスと親指の指を離してポケットを離し、想像上の発射物を飛ばします。

Project Prague でのジェスチャの作成

次に、Project Prague API を使用して簡単なジェスチャをプログラミングする方法を示す例を示します。

重要

すべての Project Prague .NET エンティティのルート 名前空間Microsoft.Gestures であり、それに応じて、すべてのネイティブ エンティティに対する Microsoft::Gestures です。

RotateRight ジェスチャを実装します。

右 FSM を回転する

直感的に言うと、RotateRight ジェスチャを実行すると、フォアグラウンド アプリケーションの一部のオブジェクトが右に 90° 回転することをユーザーが期待できます。 このジェスチャは、たとえば探索クライアントで使用して、PowerPoint スライドショー内の画像の回転をトリガーしました。

次のコードは、 RotateRight ジェスチャを定義するための推奨される方法を示しています

警告

ご覧になっていたサンプルが移動されたようです。 この問題の修正に取り組んでおりますので、ご安心ください。

Whe は、 RotateRight ジェスチャを 2 つの手のポーズ ( RotateSet と RotateGo ) のシーケンスとして指定 します。 どちらのポーズでも、親指とインデックスを開き、前方を指し、互いに触れ合う必要はありません。 ポーズの違いは、人差し指を親指の上に配置し、RotateGo で親指の右に配置する必要があることを RotateSet で指定することです。 したがって、 RotateSetRotateRight の間の遷移は、右側の手の回転に対応します。

中央、リング、ピンク色の指は RotateRight ジェスチャの定義には含まれません。 これは、これらの指の状態を何らかの方法で制約したくないからです。 言い換えると、これらの指は RotateRight ジェスチャの実行中にポーズを自由に想定できます。

ジェスチャを定義したら、ジェスチャ検出を 示すイベントをターゲット アプリケーションの適切なハンドラーにフックする 必要があります。

警告

ご覧になっていたサンプルが移動されたようです。 この問題の修正に取り組んでおりますので、ご安心ください。

検出自体は、Microsoft.Gestures.Service.exe プロセスで実行されます (前述の "Microsoft Gestures Service" ウィンドウに関連付けられています)。 このプロセスはバックグラウンドで実行され、ジェスチャ検出のサービスとして機能します。 サービスと通信するために 、GesturesServiceEndpoint クラスを提供します。 次のコード スニペットは、GesturesServiceEndpoint オブジェクトをインスタンス化し、RotateRight ジェスチャを検出用に登録します。

警告

ご覧になっていたサンプルが移動されたようです。 この問題の修正に取り組んでおりますので、ご安心ください。

RotateRight ジェスチャの検出を停止する場合は、次のように登録を解除できます。

警告

ご覧になっていたサンプルが移動されたようです。 この問題の修正に取り組んでおりますので、ご安心ください。

また、ユーザーが RotateRight ジェスチャを実行すると、ハンドラーはトリガーされなくなります。

ジェスチャの操作が完了したら、GesturesServiceEndpoint オブジェクトを破棄する必要があります。

警告

ご覧になっていたサンプルが移動されたようです。 この問題の修正に取り組んでおりますので、ご安心ください。

上記のコードをコンパイルするには、MicrosoftGesturesInstallDir 環境変数で示されるディレクトリにある次のアセンブリを参照する必要があることに注意してください。

  • Microsoft.Gestures.dll
  • Microsoft.Gestures.Endpoint.dll
  • Microsoft.Gestures.Protocol.dll

RotateRight ジェスチャを使用して完全なオープンソース コード サンプルを試すには、GitHub サンプル リポジトリRotateSample を参照してください。 このリポジトリには、C# と C++ (UWP および.Net Core フレーバーを含む) でのジェスチャのアプリケーションを示す、より高度なサンプルもあります。