概要
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 を実行するには、次の手順を実行する必要があります。
次の図に示すように、深度カメラを USB 3.0 ポートに接続し、コンピューターのモニターの下に配置します。
ダウンロードしてインストールする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® で作成されたジェスチャ 駆動型ゲームを実行しますインストールが完了すると、 Microsoft Gestures Service というタイトルのウィンドウが起動します。 これは、リアルタイムジェスチャ と姿勢検出ダッシュボードです。 次に示すように、指が正常に検出されていることを確認します。
Note
既定では、右側の検出のみが有効になっています。 両方の手を有効にするには、[ジェスチャ サービス] ウィンドウの [システム] セクションで [2 つの手を有効にする] ボックスをオンにします。
Project Prague のセットアップでは、 Windows の起動時に起動し、バックグラウンドで実行するように次の 2 つのアプリケーションが構成されていることに注意してください。
- Microsoft.Gestures.Sync - Gestures Service を実行し続け、公開時に更新プログラムをプルします。
- Microsoft.Gestures.DiscoveryClient - さまざまなコンテキスト (Windows シェル、PowerPoint、Skype、YouTube、フォト、Visual Studio) のジェスチャ統合を提供します。
この構成は、タスク マネージャーの [スタートアップ] タブでいつでも変更できます。
Project Prague のジェスチャについて
ジェスチャーの作成を開始する前に、 ジェスチャーの基本的な構成要素である手のポーズと手の動きについて理解しておく必要があります。
手のポーズ
手のポーズは 、特定の瞬間の手のスナップショットを指します。 手のポーズには、そのスナップショット内の手のひらと指の状態の完全な説明が含まれています。 この API では、ハンド ポーズは HandPose クラスによって表されます。これは、次に示すように 、さまざまな制約で構成 されます。
次に示すように、そのポーズに関係するすべての拘束を特徴付けることで、任意のハンド ポーズを表現できます。
上の例は、左側のスナップショットに合理的に関連付けることができるすべての制約を示しています。 この例は、Project Prague 言語で制約を指定するために使用されるさまざまな用語の意味を示すために、教育目的でのみ提供されます。 実際には、このような多数の拘束を使用して手のポーズを指定することは決してありません。 代わりに、手のポーズの本質をキャプチャする最小限の数の制約を見つける必要があります。 次の例は 、同じポーズを記述する実用的な方法です。
この最後の例では、スナップショット内のポーズの本質を十分にキャプチャします。親指と人差し指によって実行されるピンチ 操作です。 中指、リング指、ピンク色の指は、手のポーズの説明には含まれていないことに注意してください。これはピンチ操作に参加しないため、ポーズの本質を表現する必要はありません。
手のポーズを定義するときに制約が多すぎると (つまり、オーバーフィット)、検出が困難なポーズが生成される可能性があります。 これは、ユーザーがすべての制約を満たすために、非常に具体的な姿勢に手を調整する必要があるためです。 手のポーズ (アンダーフィット) を定義するときに制約が少なすぎると、ポーズが検出されすぎて、ユーザーが意図せずにポーズを実行する可能性があります。
手の動き
手を動かすと、 指先が空間を通って曲線をトレースします。 この曲線は "手の動き" と呼び、API では HandMotion クラスによって表されます。 手の動きは手の部分 (手のひらの中心または指先の 1 つ) に関連付けられて、 一連のモーション構成要素で構成されます。 使用可能な構成要素を次に示します。
ご覧のように、すべての 構成要素は、2 次元のモーションを記述します。 つまり、モーション全体が 1 つの平面内に含まれます。 制約のない3次元手の動きは正確に実行するのが難しいため、より優れたユーザー エクスペリエンスを提供するために、意図的にこの制限を導入しました。 次に示すように、 手の動きを含めるために使用可能な 3 つの平面のいずれかを選択できます。
モーションを実行するハンド パーツを決定し、それを含む平面を選択したら、残っているのは、 モーション構成要素のシーケンスとしてモーションを指定することだけになります。次に例を示します。
ジェスチャ
ジェスチャは、状態が 手のポーズ、手の動き、またはその他のジェスチャを表すステート マシンと考えられます。 このステート マシンには、初期状態と受信状態があります。 初期状態から始まり、受信状態で終わるパスは、対応するジェスチャの検出をトリガーするためにユーザーが実行する必要がある一連のアクション (手のポーズ、手の動き、手のジェスチャ) を表します。
この API では、ジェスチャは Gesture クラスによって表されます。 次の例は、ステート マシンが手のポーズと手の動きの単純なシーケンスであるジェスチャを示しています。
この例のスリングショット ジェスチャは、取り消しという名前の 1 つのハンド モーションと 3 つのハンド ポーズ (NotPinching の 2 つのインスタンスとピンチの 1 つのインスタンス) で構成されています。 スリングショット ジェスチャは、次のアクション シーケンスに対応します。左手にスリングショットを保持し、右手の親指と人差し指でポケットをつかみ、それを引き戻してスリングショット バンドを伸ばします。最後に、インデックスと親指の指を離してポケットを離し、想像上の発射物を飛ばします。
Project Prague でのジェスチャの作成
次に、Project Prague API を使用して簡単なジェスチャをプログラミングする方法を示す例を示します。
重要
すべての Project Prague .NET エンティティのルート 名前空間 は Microsoft.Gestures であり、それに応じて、すべてのネイティブ エンティティに対する Microsoft::Gestures です。
RotateRight ジェスチャを実装します。
直感的に言うと、RotateRight ジェスチャを実行すると、フォアグラウンド アプリケーションの一部のオブジェクトが右に 90° 回転することをユーザーが期待できます。 このジェスチャは、たとえば探索クライアントで使用して、PowerPoint スライドショー内の画像の回転をトリガーしました。
次のコードは、 RotateRight ジェスチャを定義するための推奨される方法を示しています。
警告
ご覧になっていたサンプルが移動されたようです。 この問題の修正に取り組んでおりますので、ご安心ください。
Whe は、 RotateRight ジェスチャを 2 つの手のポーズ ( RotateSet と RotateGo ) のシーケンスとして指定 します。 どちらのポーズでも、親指とインデックスを開き、前方を指し、互いに触れ合う必要はありません。 ポーズの違いは、人差し指を親指の上に配置し、RotateGo で親指の右に配置する必要があることを RotateSet で指定することです。 したがって、 RotateSet と RotateRight の間の遷移は、右側の手の回転に対応します。
中央、リング、ピンク色の指は 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 フレーバーを含む) でのジェスチャのアプリケーションを示す、より高度なサンプルもあります。