(57)【要約】特許請求に係る主題は、ジェスチャを処理する技術を含む。例示の方法は、アプリケーションからジェスチャを受け取るステップを含む。ジェスチャは、ジェスチャに対してドメイン固有の言語からの１つ以上のプリミティブを含む。方法は更に、動き検出システムから骨格データを受け取るステップも含む。方法はまた、ランタイムモジュールにおいて骨格データをアプリケーションからのジェスチャと比較するステップを含む。方法は更に、アプリケーションにジェスチャイベントを送信するステップも含む。
2017527035.tif 000002
【特許請求の範囲】
【請求項１】
ジェスチャの静的分析のためのシステムにおいて：
複数のジェスチャを受け取り、前記ジェスチャの各々を中間表現に翻訳するように構成される、第１のモジュールであって、各ジェスチャが、ジェスチャに対してドメイン固有の言語からの１つ以上のプリミティブを備える、第１のモジュールと；
条件について前記中間表現を静的に分析するように構成される、第２のモジュールと；
前記条件に基づいて、アプリケーションが前記ジェスチャのうちの少なくとも１つを使用することを妨げるように構成される、第３のモジュールと；
を具備する、システム。
【請求項２】
前記第２のモジュールは更に、所定の制約を受け取り、前記条件は、前記所定の制約に基づく安全性違反を備える、
請求項１に記載のシステム。
【請求項３】
前記条件は、前記ジェスチャのうちの２つ以上のジェスチャ間の競合を備える、
請求項１に記載のシステム。
【請求項４】
前記第２のモジュールは更に、システム蓄積ジェスチャを受け取り、該システム蓄積ジェスチャは、ジェスチャ認識システムとの通信のために蓄積されたジェスチャを備え、前記条件は、システム蓄積ジェスチャとジェスチャの競合を備える、
請求項１に記載のシステム。
【請求項５】
前記第２のモジュールは、制約ソルバモジュールを備え、前記制約ソルバモジュールは、制約を受け取り、前記中間表現が前記制約外であるかどうかを判断する、
請求項１乃至４のいずれかに記載のシステム。
【請求項６】
ジェスチャを処理するための方法であって：
アプリケーションからジェスチャを受け取るステップであって、前記ジェスチャが、ジェスチャに対してドメイン固有の言語からの１つ以上のプリミティブを備える、ステップと；
動き検出システムから骨格データを受け取るステップと；
ランタイムモジュールにおいて前記骨格データを前記アプリケーションからの前記ジェスチャと比較するステップと；
ユーザへの危害を防ぐために前記アプリケーションが前記ジェスチャを使用することを妨げるよう、前記アプリケーションにジェスチャイベントを送信するステップと；
を具備する、方法。
【請求項７】
前記ジェスチャについてモニタし、前記アプリケーションに差を返すステップを更に備え、前記差は、前記骨格データと前記ジェスチャとの間の差を示すプリミティブを備える、
請求項６に記載の方法。
【請求項８】
前記ジェスチャイベントは、前記骨格データと各プリミティブの間の差が許容閾値未満であるかどうかに基づく、
請求項６に記載の方法。
【請求項９】
前記ジェスチャ内の少なくとも１つのプリミティブは、相対的制約に対応し、該相対的制約は、前記骨格データ内の少なくとも２つの点の、相互に対する位置又は動きを示す、
請求項６乃至８のいずれかに記載の方法。
【請求項１０】
競合について前記アプリケーションを静的に分析するステップを更に備え、前記競合は、ジェスチャ間の競合、ジェスチャとシステム蓄積ジェスチャとの間の競合及び／又は安全性の競合を備える、
請求項６乃至８のいずれかに記載の方法。
【請求項１１】
前記第１のモジュールはインタプリタモジュールを備える、
請求項１乃至４のいずれかに記載のシステム。
【請求項１２】
ジェスチャは、関数と１つ以上の引数を備え、前記関数はアクションを示し、前記１つ以上の引数は、方向、関節に対する移動角度及び／又は骨格の区分を示す、
請求項５に記載のシステム。
【請求項１３】
少なくとも１つのプリミティブが時間制約に対応する、
請求項６乃至８のいずれかに記載の方法。
【請求項１４】
前記アプリケーションにジェスチャイベントを返した後、前記骨格データを削除するステップ、
を更に具備する、請求項６乃至８のいずれかに記載の方法。
【請求項１５】
ジェスチャを処理するための１つ以上のコンピュータ読取可能記憶デバイスであって、プロセッサによって実行されると、該プロセッサに：
アプリケーションからジェスチャを受け取る動作であって、前記ジェスチャが、ジェスチャに対してドメイン固有の言語からの１つ以上のプリミティブを備える、動作と；
ジェスチャライブラリを受け取る動作であって、前記ジェスチャライブラリが、前記ジェスチャに対してドメイン固有の言語からのプリミティブを備える、動作と；
動き検出システムから骨格データを受け取る動作と；
前記ジェスチャライブラリを使用して、ランタイムモジュールにおいて前記骨格データを前記アプリケーションからの前記ジェスチャと比較する動作と；
ユーザへの危害を防ぐため前記アプリケーションが前記ジェスチャを使用することを妨げるよう、前記アプリケーションに結果を送信する動作と；
を実行させる複数の命令を具備する、１つ以上のコンピュータ読取可能記憶デバイス。
【発明の詳細な説明】
【背景技術】
【０００１】
動き検出システムは、骨格データ及び他の空間データを、対話的ユーザ経験を提供するソフトウェアアプリケーションに提供する。例えば動き検出システムは、ジェスチャ認識システムが配置される環境に関する他のデータの中でも特に、位置、関節（joint）、動きといったデータを提供し得る。この情報に基づいて、アプリケーションは、ユーザが、四肢、頭部、手、脚、顔等のような身体の動き及び／又は位置を使用して対話することを可能にし得る。例えば動き検出システムは、手の動きを検出し、手の動きデータをアプリケーションに送信し得る。アプリケーションは、次いで手の動きデータを処理して、仮想物体を画面上で動かすか仮想物体にメニューをナビゲートさせることができる。
【発明の概要】
【０００２】
以下では、本明細書で説明される幾つかの態様の基本的な理解を提供するために、本革新の簡単な要約を提示する。この概要は、特許請求に係る主題の広範な概要ではない。特許請求に係る主要な特徴を特定せず、また特許請求に係る範囲も画定しないように意図されている。その唯一の目的は、特許請求に係る主題の幾つかの概念を、後に提示されるより詳細な説明に対する前置きとして簡単な形で提示することである。
【０００３】
一実装は、ジェスチャの静的分析のためのシステムを提供する。このシステムは、複数のジェスチャを受け取り、該ジェスチャの各々を中間表現に翻訳（translate）するように構成される第１のモジュールを含むことができる。各ジェスチャは、ジェスチャに対してドメイン固有の言語からの１つ以上のプリミティブ（primitive）を含むことができる。システムは、条件（condition）について中間表現を静的に分析するように構成される第２のモジュールも含むことができる。
【０００４】
別の実装は、ジェスチャを処理するための方法を提供する。この方法は、アプリケーションからジェスチャを受け取るステップを含むことができ、ジェスチャが、ジェスチャに対してドメイン固有の言語からの１つ以上のプリミティブを備える。方法は、動き検出システムから骨格データを受け取るステップも含むことができる。方法は、ランタイムモジュールにおいて骨格データをアプリケーションからのジェスチャと比較するステップを含むことができる。方法は、アプリケーションにジェスチャイベントを送信するステップを更に含むことができる。
【０００５】
別の実装は、ジェスチャを処理するための１つ以上のコンピュータ読取可能記憶デバイスを提供する。１つ以上のコンピュータ読取可能記憶デバイスは、プロセッサによって実行されると、該プロセッサに、アプリケーションからジェスチャを受け取らせることができる。ジェスチャは、ジェスチャに対してドメイン固有の言語からの１つ以上のプリミティブを含むことができる。１つ以上のコンピュータ読取可能記憶デバイスは、実行されると、プロセッサに、ジェスチャライブラリを受け取らせることができる。ジェスチャライブラリは、ジェスチャに対してドメイン固有の言語からのプリミティブを含むことができる。１つ以上のコンピュータ読取可能記憶デバイスは、実行されると、プロセッサに、動き検出システムから骨格データを受け取らせる。また、１つ以上のコンピュータ読取可能記憶デバイスは、実行されると、プロセッサに、ジェスチャライブラリを使用して、ランタイムモジュールにおいて骨格データをアプリケーションからのジェスチャと比較させることもできる。１つ以上のコンピュータ読取可能記憶デバイスは、実行されると、プロセッサに更に、アプリケーションに結果を送信させることができる。
【０００６】
以下の説明及び添付の図面は、特許請求に係る主題の特定の例示的態様を詳細に説明する。しかしながら、これらの態様は、本革新の原理が用いられ得る様々な方法の幾つかを示すものであり、特許請求に係る主題は、全てのそのような態様及びその均等物を含むように意図される。特許請求に係る主題の他の利点及び新規な特徴は、図面とともに検討されると、本革新の以下の詳細な説明から明らかになるであろう。
【図面の簡単な説明】
【０００７】
【図１】本明細書で説明される実装に係るジェスチャの静的分析のための例示のシステムのブロック図である。
【０００８】
【図２】本明細書で説明される実装に係るジェスチャの処理方法を概説する処理フロー図である。
【０００９】
【図３】本明細書で説明される実装に従って、安全でないジェスチャを静的に決定する方法を概説する処理フロー図である。
【００１０】
【図４】本明細書で説明される実装に従って、ジェスチャがシステム蓄積ジェスチャ（system-reserved  gesture）と競合するかどうかを静的に判断する方法を概説する処理フロー図である。
【００１１】
【図５】本明細書で説明される実装に従って、競合ジェスチャを静的に決定する方法を概説する処理フロー図である。
【００１２】
【図６】本明細書で説明される様々な態様を実装するために構成される例示のコンピューティングデバイスのブロック図である。
【００１３】
【図７】ジェスチャを処理するのに使用され得るコンピュータ読取可能記憶媒体のブロック図である。
【発明を実施するための形態】
【００１４】
予備的事項として、図面の一部は、機能、モジュール、特徴又は要素等と様々に呼ばれる１つ以上の構造的コンポーネントのコンテキストで概念を説明する。図面に図示される様々なコンポーネントは、ソフトウェア、ハードウェア、ファームウェア又はその組合せのように任意の方法で実装され得る。一部の実装では、様々なコンポーネントは、実際の実装における対応するコンポーネントの使用を反映している。他の実装では、図面に図示される任意の単一のコンポーネントが、幾つかの実際のコンポーネントによって実装されてもよい。図面における任意の２つ以上の別個のコンポーネントの図示が、単一の実際のコンポーネントによって実行される異なる機能を反映していることもある。下述される図６は、図面内に図示される機能を実装するのに使用され得る１つのコンピューティングデバイスに関する詳細を提供する。
【００１５】
他の図面では、概念をフローチャートの形式で説明する。この形式では、特定の動作が、特定の順序で実行される別個のブロックを構成するものとして説明される。そのような実装は、例示であって限定ではない。本明細書で説明される特定のブロックを一緒にグループ化して、単一の動作で実行してもよく、特定のブロックを複数の構成ブロックに分けてもよく、ブロックを並列に実行することを含め、特定のブロックを、ここで図示されるものとは異なる順序で実行してもよい。フローチャート内に示されるブロックは、ソフトウェア、ハードウェア、ファームウェア、手動処理等によって実装され得る。本明細書で使用されるとき、ハードウェアは、コンピュータシステム、特定用途向け集積回路（ASIC）のような別個の論理コンポーネント等を含み得る。
【００１６】
技術用語に関して、「構成される」というフレーズは、特定された動作を実行するために任意の種類の機能が構築され得る任意の方法を包含する。機能は、例えばソフトウェア、ハードウェア、ファームウェア等を使用して動作を実行するように構成され得る。「ロジック」という用語は、タスクを実行するための任意の機能を含む。例えばフローチャート内に図示される各動作は、その動作を実行するためのロジックに対応する。動作は、ソフトウェア、ハードウェア、ファームウェア等を使用して実行され得る。「コンポーネント」、「システム」等の用語は、コンピュータ関連のエンティティ、ハードウェア及び実行中のソフトウェア、ファームウェア又はその組合せを指し得る。コンポーネントは、プロセッサ上で動作するプロセス、オブジェクト、実行可能ファイル、プログラム、関数、サブルーチン、コンピュータ又はソフトウェアとハードウェアの組合せとすることができる。「プロセッサ」という用語は、コンピュータシステムの処理ユニットのようなハードウェアコンポーネントを指すことがある。
【００１７】
さらに、特許請求に係る主題は、標準のプログラミング及びエンジニアリング技術を使用して、特許請求に係る主題を実装するようコンピューティングデバイスを制御するソフトウェア、ファームウェア、ハードウェア又は任意のその組合せを生成する方法、装置又は製品として実装され得る。本明細書で使用されるとき、「製品」という用語は、任意のコンピュータ読取可能記憶デバイス又は媒体からアクセス可能なコンピュータプログラムを包含するように意図される。コンピュータ読取可能記憶媒体又はデバイスは、これらに限られないが、他の中でも特に、例えばハードディスクのような磁気記憶デバイス、フロッピーディスク、磁気ストライプ、光学ディスク、コンパクトディスク（CD）、デジタル多用途ディスク（DVD）、スマートカード、フラッシュメモリデバイス等を含み得る。これに対して、コンピュータ読取可能媒体、すなわち非記憶媒体又はデバイスは、無線信号等のための伝送媒体のような通信媒体を含み得る。
【００１８】
以下では、ジェスチャに対してドメイン固有のプログラミング語彙で書かれたアプリケーションについて、ジェスチャをテストして処理するための技術の例示的実装を説明する。ジェスチャは、本明細書で使用されるとき、実行ブロック及び１つ以上のポーズ（pose）を含むプログラミングオブジェクトを指す。ポーズは、同時に起こる１組の条件を指す。例えば条件は、プログラミング言語のプリミティブによって説明され得る。例えばプリミティブは、「指す（point）」又は「置く（put）」のような動詞と、「左手」又は「右手」のような骨格的区分（skeletal  segment）と、「あなたの左」又は「あなたの右」のような方向と、「２０度」又は「１０度」のような動きの大きさを含むことができる。ドメイン固有のプログラミング言語を使用して、他の種類のデータの中でも特に、動き、骨格的区分及び位置といったプリミティブを含むジェスチャを書くことに使用され得る。実行ブロックは、結果としてジェスチャが検出される、ポーズの指定された順序を指す。異なる種類のプリミティブをジェスチャライブラリ内に記憶してもよく、ジェスチャライブラリは、インタプリタモジュールによって、分析のためにジェスチャを中間表現に翻訳するために使用され得る。本明細書で使用されるとき、中間表現とは、分析が容易なジェスチャの形式を指す。例えば中間表現は制約（constraint）を含み得る。一部の例では、ジェスチャライブラリは、任意の適切なマシン言語技術によって、あるいはユーザがプリミティブ及び／又はジェスチャを追加又は変更することによって、修正され得る。ジェスチャに対してドメイン固有の言語内においてカスタマイズ可能なプリミティブを使用することは、新たなジェスチャを符号化し、既存のジェスチャを修正することを可能にする。
【００１９】
ジェスチャを分析するために、本明細書で説明される技術によると、ジェスチャ処理システムは、システム蓄積ジェスチャとともにアプリケーションジェスチャを、制約と呼ばれる中間形式に翻訳することができる。制約ソルバモジュール（constraint  solver  module）は、競合について制約を分析することができる。本明細書で使用されるとき、競合（conflict）は、類似する動き及び／又は位置によってトリガされ得る２つ以上のジェスチャを指す。加えて、制約ソルバモジュールは、所与の安全性制約に関してジェスチャを分析することができる。安全性制約は、ユーザに対して危険と考えられるか、そうでなくともジェスチャとしての使用に望ましくない論理文（logical  statement）として表現される、可能性のある動き及び位置のサブセットである。一部の実施形態では、制約ソルバモジュールは静的に分析を実行し得る。本明細書で使用されるとき、静的分析は、アプリケーションがユーザによって実行されるか、アプリケーションストアにアップロードされる前に実行され得る分析を指す。静的分析又は静的に分析することは、アップロード時間チェッキング又はジャストインタイムチェッキングとも呼ばれることがある。本技術の実装は、ジェスチャベースのアプリケーションで使用され、例えば他の中でも特にゲームシステムとともに、あるいはコンピュータ上で実装され得る、静的ジェスチャ分析を提供する。本明細書で説明されるシステムは、ジェスチャベースのアプリケーションの静的分析を可能にする。静的分析は、他の中でも特に、２つ以上のジェスチャ間の競合、アプリケーションジェスチャとシステム供給ジェスチャとの間の競合及び安全性制約との競合についてテストすることを含み得る。そのような静的分析は、安全でないジェスチャがユーザから要求されること、動き検出システム及びアプリケーションの機能を保証することにより、ユーザの安全性を保証する。
【００２０】
本明細書で説明されるシステムは、骨格データからのジェスチャ認識も可能にする。骨格データは、動き及び相対的位置といった他のデータの中でも特に、身体の関節、四肢、手、並びに顔の特徴に対応する、動き検出システムからのデータを含み得る。本明細書で説明される技術によると、骨格データは、ジェスチャを検出するのに使用され得る。例えばジェスチャ処理システムは、動き検出システムから骨格データを、アプリケーションからジェスチャを受け取り、骨格データを１つ以上のジェスチャと照合することができる。検出されたジェスチャは、アプリケーションとの骨格データのいかなる共有もなしに、１つ以上のアプリケーションに送信され得る。骨格データを提供しているユーザのプライバシは、ジェスチャ処理システムとアプリケーションとの間の信頼境界（trust  boundary）によって保護され得る。
【００２１】
図１は、本明細書で説明される実装に従ってジェスチャを処理するための例示のシステムのブロック図である。図１に図示される例示のコンピュータシステムは、動き検出システム１０２、クライアントシステム１０４及びジェスチャ処理システム１０６を含む。図１の例示の構成は、参照番号１００により一般的に参照される。
【００２２】
動き検出システム１０２及びクライアントシステム１０４は、任意の適切なタイプの接続を通してジェスチャ処理システム１０６に結合され得る。クライアントシステム１０４は、ジェスチャ処理システム１０６によって分析されて処理されることになるジェスチャを含む、アプリケーション１０８を含む。アプリケーション１０８は、ジェスチャを使用してユーザ入力を受け取る、任意のタイプのアプリケーションであってよい。例えばアプリケーション１０８は、ビデオゲーム、エクササイズソフトウェア又は患者モニタリングソフトウェア等であってよい。一部の例では、アプリケーションは、インターネット等のような公的ネットワークへ接続せずに機能し得る。
【００２３】
クライアントシステム１０４は、パーソナルコンピュータ、ラップトップ、スマートフォン、タブレット等を含め、任意の適切なタイプの電子デバイスを含み得る。クライアントシステム１０４は、ジェスチャに対してドメイン固有の言語を使用して書くことができる１つ以上のアプリケーション１０８を有し得る。一部の実装では、クライアントシステム１０４は、複数のアプリケーションを同時に実行してもよい。
【００２４】
ジェスチャ処理システム１０６は、インタプリタモジュール１１０、ランタイムモジュール１１２及び制約ソルバモジュール１１４を含み得る。インタプリタモジュール１１０は、ジェスチャライブラリを使用して、ジェスチャを、該ジェスチャ内のプリミティブに基づいて制約に翻訳することができる。例えばジェスチャ分析中に、インタプリタモジュール１１０は、図４及び図５で更に長く説明されるように、分析されるジェスチャを制約へと翻訳することができる。ジェスチャを使用するアプリケーションでのプリミティブの使用は、ジェスチャを容易に符号化して制約へと翻訳することを可能にする。
【００２５】
ジェスチャ処理システム１０６のユーザ操作又はテスト中に、ランタイムモジュール１１２は、動き検出システム１０２から骨格データを、アプリケーション１０８からジェスチャを受け取ることができる。一部の例では、骨格データは、手やヒップのような任意の適切な身体部分に基づく座標システムを用いて、身体をベクトルによって及びワールドアップベクトル（world  up  vector）で表すことができる。ワールドアップベクトルは、重力の方向に対して反対のy軸の方向を指す。一部の実装では、ランタイムモジュール１１２は、骨格データをジェスチャと照合するか、ある時点でジェスチャと骨格データとの間の差を返すことができる。例えばランタイムモジュール１１２は、ジェスチャライブラリからのポーズを使用して、目標の骨格ポーズを計算することができる。ランタイムモジュール１１２は、次いで、所与の時点で骨格データを目標の骨格ポーズと比較することができる。一部の実装において、ランタイムモジュール１１２は、目標の骨格内の点と、現在の骨格データ内の点との間のユークリッド距離を計算することができる。点間の距離が全て閾値より下の場合、次いでランタイムモジュール１１２は、目標の骨格ポーズと現在の骨格データとの間の合致を検出し得る。上記で定義したように、ジェスチャは所与のシーケンスで１つ以上のポーズを含む。所与のジェスチャの全てのポーズが正しいシーケンスで検出される場合、次いでランタイムモジュール１１２はジェスチャイベントを検出することができる。ランタイムモジュール１１２は、結果として得られるジェスチャイベントを、クライアント１０４のアプリケーション１０８に送信することができる。本明細書で使用されるとき、ジェスチャイベントは、骨格データ内の検出されたジェスチャを指す。一部の実装では、ランタイムモジュール１１２は、ジェスチャイベントについて骨格データをモニタするが、骨格データの現在の状態と１つ以上のポーズとの間の差を送信することができる。例えばエクササイズアプリケーションは、ジェスチャの特定のポーズを実行するようにユーザを促すことができる。ランタイムモジュール１１２は、骨格データを介して、ユーザがそのポーズを正しく実行していないと決定し、そのジェスチャを正しく実行するようにユーザをトレーニングするためにアプリケーションに情報を送信することができる。例えばランタイムモジュール１１２は、「左腕をより高く上げる」という情報をアプリケーションに送信することができ、次いでアプリケーションは、そのポーズを再び試みるよう、画面又は他のインタフェースを介してこの情報をユーザに通知することができる。ユーザはその後、左腕をより高く上げ、その結果、ランタイムモジュール１１２がジェスチャのポーズを検出することになる。一部の実装では、ランタイムモジュール１１２は、特定のポーズ及び／又はジェスチャについてモニタし、ポーズ及び／又はジェスチャが何回発生したかを記録することができる。例えば看護施設では、ランタイムモジュール１１２は、他のジェスチャの中でも特に、患者が自身の背中に何回触ったかをカウントすることができる。この収集された情報を使用して、危害（injury）を回避又は検出することができる。
【００２６】
制約ソルバモジュール１１４は、エンドユーザへの危害も防ぐことができる。例えばアプリケーションは、危害につながる可能性があるねじれ（twist）や屈曲（bend）といった、ユーザが実行することが危険なジェスチャを含むことがある。制約ソルバモジュール１１４は、いずれかの危険なジェスチャを行うようユーザに求める前に、安全性制約を使用して、これらの安全性制約に対してジェスチャを分析することができる。ランタイムモジュール１１２は、その後、そのような危険なジェスチャがユーザから要求されることを防ぐことができる。加えて、制約ソルバモジュール１１４は、競合についてジェスチャを分析することができる。例えば骨格データが、ランタイムモジュール１１２によって検出されることになる、重複する１組のジェスチャをもたらすことがある。例えば第１のジェスチャがポーズＡ及びＢをこの順序で含んでおり、第２のジェスチャがポーズＢ、Ｃ、Ｄをこの順序で含んでいる場合、これら２つのジェスチャは、ポーズＡ、Ｂ、Ｃをこの順序で含む第３のジェスチャ及びＣ、Ｄをこの順序で含む第４のポーズと競合し得る。制約ソルバモジュール１１４は、そのような競合を事前に検出し、競合ジェスチャを、クライアントに、例えば開発者によって使用されるコンピュータに送信し得る。本明細書で使用されるとき、競合ジェスチャとは、同じ骨格データから同時に検出され得る２つ以上のジェスチャを指す。一部の実装では、制約ソルバモジュール１１４は、システム蓄積ジェスチャとの競合も検出することができる。例えばシステム蓄積ジェスチャは、ジェスチャベースのゲームシステムの中をナビゲートするのに使用され得る。制約ソルバモジュール１１４は、アプリケーションからクライアントへ競合ジェスチャを送信することができ、その結果、開発者は、これに応じて競合ジェスチャを修正することができる。したがって、ジェスチャ処理システム１０６は、実際のユーザに対してジェスチャをテストする前に、開発者が、新たに開発したジェスチャを効果的にテストすることを可能にする。
【００２７】
ジェスチャ処理システム１０６とクライアント１０４との間の破線によって示される信頼境界１１６は、ユーザのプライバシを保護することができる。信頼境界１１６は、動き検出システム１０２からの骨格データが、ジェスチャ処理システム１０６によって処理されるが、クライアント１０４及び／又はアプリケーション１０８によって直接アクセス可能ではないことを示し得る。したがって、骨格データは、セキュリティリーク又はマルウェアを含む可能性があるアプリケーションから保護される。したがって、アプリケーション開発者は、もはや、プライバシの目的でアプリケーションに対する厳格なセキュリティチェックを実行する必要がない可能性がある。加えて、一部の実装では、アプリケーションは、認識システム及びアプリケーションによって実際に収集されたデータに対するアクセスを提供することができる。
【００２８】
図１のブロック図は、コンピューティングシステム１００が、図１に図示されるコンポーネントの全てを含むべきことを示すように意図されていないことが理解されよう。むしろ、コンピューティングシステム１００は、図１に図示されるコンポーネントよりも少ないコンポーネント、あるいは追加のコンポーネント（例えば追加のアプリケーション、追加のモジュール、追加のメモリデバイス、追加のネットワークインタフェース等）を含むことができる。さらに、インタプリタモジュール１１０、ランタイムモジュール１１２及び制約ソルバモジュール１１４の機能のいずれかを、部分的又は全体的に、ハードウェア及び／又はプロセッサで実装することができる。例えばその機能を、特定用途向け集積回路を用いて、プロセッサ内で実装されるロジックで、あるいは任意の他のデバイスで実装することができる。限定ではないが、例えば使用可能な例示のタイプのハードウェアロジックコンポーネントは、フィールドプログラマブルゲートアレイ（FPGAs）、特定プログラム向け集積回路（ASICs）、特定プログラム向け規格品（ASSPs）、システムオンチップシステム（SOCs）及び結合プログラム可能論理回路（CPLDs）等が含まれる。
【００２９】
図２は、本明細書で説明される実装に従ってアプリケーションのジェスチャを処理する方法を概説する処理フロー図である。コンピューティングデバイス６００のハードウェア又はソフトウェアの１つ以上のコンポーネントが、方法２００を実行するように構成され得る。方法２００はブロック２０２で開始し得る。
【００３０】
ブロック２０２において、インタプリタモジュール１１０は、アプリケーションからジェスチャを受け取ることができる。例えばインタプリタモジュール１１０は、「ウェーブ」として知られる動きを検出するのに使用され得るジェスチャを受け取ることがある。このジェスチャは、２つ以上の順序付けされたポーズを含み得る。例えば「ウェーブ」ジェスチャは、「手首を下に（wrists  down）」というポーズと、「中央に（middle）」というポーズと、「手首を上に（wrists  up）」というポーズを含み得る。ジェスチャ内の各ポーズは、複数のプリミティブを含み得る。例えば「ウェーブ」ジェスチャ内の「手首を下に」というポーズは、「あなたの左手首を下に向ける（point  your  left  wrist  down）」ことと、「あなたの右手首を下に向ける（point  your  right  wrist  down）」ことを言う可能性がある。この例示のジェスチャには、３つの種類のプリミティブが含まれる：すなわち「向ける（point）」というアクションと、「左手首（left  wrist）」及び「右手首（right  wrist）」という身体部分と、「下（down）」という方向である。一部の実装では、他の種類のプリミティブが使用されてもよく、新たな種類のプリミティブが開発者によって作成されてもよい。例えば結果として、別の身体関節に対するある身体関節の位置に関連する相対的制約をもたらすプリミティブが使用されてもよい。スピード及び／又は速さを示すプリミティブの使用を通して時間制約を課すこともできる。ジェスチャで使用する新たなプリミティブを作成する能力は、言語を多くのコンテキストに適合可能なものにする。一部の例では、以下のブロック２０６において、プリミティブをインタプリタモジュール１１０によって使用して、ジェスチャを、制約ソルバモジュール１１４によって使用される制約へ翻訳することができる。加えて、ジェスチャは、検出されるジェスチャについて、ポーズの順序付けされたリストを指定し得る実行ブロックを有することがある。例えば「ウェーブ」ジェスチャは、「手首を下に」、「中央に」、「手首を上に」、「中央に」、「手首を下に」というポーズをこの順序で含んでもよい。
【００３１】
ブロック２０４において、インタプリタモジュール１１０は、ジェスチャライブラリを受け取ることができる。例えば各アプリケーションは、そのアプリケーション自体のジェスチャライブラリを有することができる。ジェスチャライブラリは、アプリケーションについてのジェスチャのリストと、各ジェスチャのポーズ及びプリミティブと、各プリミティブの定義を含む。例えば「ウェーブ」ジェスチャの「手首を下に」というポーズ内の「下に」という方向プリミティブは、ジェスチャライブラリにおいて、「１組の骨格データ内の骨盤の下」を意味するように定義され得る。ジェスチャライブラリは、各プリミティブの検出並びに各プリミティブの定義についての許容値も含み得る。例えば５％という許容値を使用して、位置の範囲が、特定のポーズとして検出されることを可能にすることができる。インタプリタモジュール１１０は、ジェスチャを制約ソルバモジュール１１４によって使用されることになる制約に翻訳する際に、ジェスチャライブラリを使用することができる。例えば「手首を下に」というポーズにおいて、「あなたの左手首を下に向ける」は、ユーザの元の骨格位置（original  skeletal  position）の関数（function）であってもよい。その関数に対する入力は、骨格データ内の元の骨格（original  skeleton）であり得る。関数の出力は、「左手首」の関節が、ジェスチャライブラリで定義されるように「下に」動かされるような、骨格データに対する制約であり得る。
【００３２】
ブロック２０６において、制約ソルバモジュール１１４は、競合についてジェスチャを静的に分析することができる。上述のように、静的分析は、アプリケーションが実行される前にジェスチャを分析することを指す。制約ソルバモジュール１１４は、図３〜図５で詳細に説明されるように、異なる種類の競合についてジェスチャを分析することができる。アプリケーションが実行される前に分析が実行されるので、いずれがの競合又は危害が実際に生じる前に、プログラムのインテグリティ及びユーザの安全性を保証することができる。
【００３３】
ブロック２０８において、ランタイムモジュール１１２は、動き検出システムから骨格データを受け取ることができる。例えば骨格データは、骨格関節の位置及び動きといった情報を含み得る。情報内のそのようなものは、センサの視野内で各個々のオブジェクトが、レンズ及び／色ピクチャからどのくらい離れているかを示す生の深度フレーム（raw  depth  frame）、「頭部（10,10,10）」又は「首（10,5,10）」といった３Ｄ座標の骨格点を含み得る。一部の実装では、アプリケーションは、何のデータが収集されたか、そしてデータがどのように保護されているかを説明するプライバシ通知をユーザに送信することができる。例えばプライバシ通知は、骨格データが動き検出システムによって収集されたが、特定の検出されたジェスチャイベントが、アプリケーション機能のためにアプリケーションに対して利用可能であることを説明することがある。一部の実装では、オプトアウトオプションが、条項に同意しないユーザに提供されてもよい。例えばユーザがデータ収集に同意しない場合、次いで、アプリケーションは、実行を阻止されることになるであろう。一部の実装では、プライバシ通知は、ユーザが同意した場合にアプリケーションが何を見る可能性があるかを示す、アプリケーションアイビューを含むことができる。例えアプリケーションが何を見る可能性があるかを視覚化する、予め記録されたビデオをディスプレイ上に表示してもよい。通知は、オプトイン及び／又はオプトアウトを尋ねるボタンを有していてもよい。
【００３４】
ブロック２１０において、ランタイムモジュール１１２は、ジェスチャライブラリを使用して、骨格データをアプリケーションからのジェスチャと比較することができる。ジェスチャライブラリは、他の中でも特に、許容閾値と、制約へのプリミティブの変換に使用され得る。例えば骨格データは、アプリケーションから受け取ったジェスチャに対応する、特定の順序の１組のポーズを含み得る。一部の例では、制約ソルバモジュール１１４は、ポーズのプリミティブから目標の骨格位置又は目標のポーズを計算することができる。ポーズを照合するため、ランタイムモジュール１１２は、フレームを追跡する骨格データに対してコールバック（callback）を登録することができる。コールバックは、新たな骨格フレームが到着すると毎回呼び出され得る。一部の例では、ランタイムモジュール１１２は、骨格内のフレームごと及び関節ごとに、関節の現在の位置と目標位置との間の距離を計算することができる。関節距離が閾値未満の場合、関節は合致する。全ての関節が合致する場合、ポーズは合致する。したがって、ランタイムモジュール１１２は、ジェスチャのポーズが目標ポーズの閾値内であることを検出することができる。一部の例では、制約ソルバモジュール１１４は、次いで、検出されるべきジェスチャの次のポーズを定義する関数によって指定される制約に基づいて、新たな目標ポーズを計算することができる。ジェスチャの全てのポーズが、実行ブロックの順序で検出される場合、次いで、ランタイムはジェスチャイベントを検出して記録する。ランタイムモジュール１１２は、ジェスチャが骨格データ内で検出される度に、ジェスチャイベントを記録することができる。
【００３５】
ブロック２１２において、ランタイムモジュール１１２は、アプリケーションに結果を送信することができる。一部の例では、結果はジェスチャイベントであり得る。一部の例において、結果は、モニタされているジェスチャと、受け取った骨格データとの間の差であってもよい。例えばその差は、骨格データで右手が挙げられていることであってよい。ランタイムモジュール１１２は、その差の結果をアプリケーションに送信してもよい。
【００３６】
この処理フロー図は、方法２００のブロックがいずれかの特定の順序で実行されるべきことを示すように意図されておらず、全ての場合にブロックの全てが含まれるべきことを示すようにも意図されていない。さらに、特定の実装の詳細に応じて、図示されていない任意の数の追加のブロックが方法２００に含まれてもよい。
【００３７】
図３は、本明細書で説明される実装に従って、安全性違反についてアプリケーションを分析する方法を概説する処理フロー図である。コンピューティングデバイス６００のハードウェア又はソフトウェアの１つ以上のコンポーネントが、方法３００を実行するように構成され得る。方法３００はブロック３０２で開始し得る。
【００３８】
ブロック３０２において、ランタイムモジュール１１２は、所定の制約及びジェスチャを受け取ることができる。例えば所定の制約は、危険なジェスチャ及び／又はユーザにとって危険となり得る条件のリストとすることができる。他の中でも特に、例えば肘を過度に伸ばことになるジェスチャ、閾値を超えて脊柱（spine）をねじるか曲げることになるジェスチャ、あるいは自然な動きの範囲外に四肢を動かすジェスチャは、危険なジェスチャと考えることができる。一部の例において、所定の制約が、ユーザの安全性のために、開発者によって提供され得るか、開発者間で共有され得る。例えば所定の制約は、脊柱の制約、肘の制約、肩の制約又は時間制約等とすることができる。一部の実施形態において、所定の制約は、ジェスチャの動きの範囲を制限することができる。例えば所定の制約は、他の中でも特に、腕の回転を閾値未満の角度に制限することができ、ジェスチャが、胴体に対して四肢を動かすことを求める距離を制限することができる。一部の例では、制約は、特定の身体関節に対して許容される（x,y,z）座標を指定する数式の形式をとることができる。例えば制約は、左手首の関節のy座標をゼロに制限する可能性がある。
【００３９】
ブロック３０４において、制約ソルバモジュール１１４は、ジェスチャのポーズを実行することができ、制約ソルバモジュール１１４は、所定の制約に対してジェスチャを分析することができる。例えば制約ソルバモジュール１１４は、関数によってポーズ内に追加された制約を所与として、新たな骨格位置について解くことができる。一部の実装では、ジェスチャが、最初にランタイムモジュール１１２によって安全であるとしてラベル付けされて、制約ソルバモジュール１１４は、そのジェスチャの第１のポーズを実行する。例えばジェスチャは、順番に実行されるべき２つのポーズを含んでいることがある。第１及び第２のポーズが、「腕を下に向ける」という命令と、「左足首を頭の上に置く」という命令を含むことがある。安全性制約は、安全性の理由を表して、頭の上へ足首を置くことを禁止し得る。一部の例では、制約ソルバモジュール１１４は、ジェスチャが所定の制約の範囲（bounds）内にあり、したがって安全性違反であると決定することがある。ランタイムモジュール１１２は安全性違反を記録して、その安全性違反の詳細をクライアント１０４に送信することができる。例えば第１のポーズの「左足首を頭の上に置く」という命令は、立っている間に頭上に足首を置くことに対して、特定の制約に違反している。
【００４０】
ひし形３０６において、制約ソルバモジュール１１４は、安全性違反が記録されているかどうかを判断する。安全性違反が記録されていない場合、次いで方法はひし形３０８に進む。安全性違反が記録されていた場合、次いで方法はブロック３１０に進む。
【００４１】
ブロック３０８において、ランタイムモジュール１１２は、ジェスチャの追加のポーズを実行するかどうかを判断することができる。追加のポーズを実行する場合、ランタイムモジュール１１２は、ジェスチャの次のポーズを受け取ることができる。ランタイムモジュール１１２は、次いでブロック３０４において、ジェスチャの次のポーズを実行し、制約ソルバモジュール１１４は、ひし形３０６において、ジェスチャが依然として安全かどうかを再び判断することができる。ランタイムモジュール１１２は、安全性違反が検出されるまで、あるいはジェスチャのポーズが実行されるまで、ジェスチャの全てのポーズを進めることができる。
【００４２】
ブロック３１０において、ランタイムモジュール１１２は、安全性違反に基づいて、ジェスチャがアプリケーションによって使用されることを防ぐことができる。一部の実装では、ランタイムモジュール１１２は、安全でないジェスチャを、安全性違反に関する詳細とともにクライアント１０４に送信することができる。その後、ジェスチャを変更するか、アプリケーションの別の安全なジェスチャと置換することができる。
【００４３】
この処理フロー図は、方法３００のブロックがいずれかの特定の順序で実行されるべきことを示すように意図されておらず、全ての場合にブロックの全てが含まれるべきことを示すようにも意図されていない。さらに、特定の実装の詳細に応じて、図示されていない任意の数の追加のブロックが方法３００に含まれてもよい。
【００４４】
図４は、本明細書で説明される実装に従って、ジェスチャがシステム蓄積ジェスチャと競合するかどうかを静的に判断する方法を概説する処理フロー図である。コンピューティングデバイス６００のハードウェア又はソフトウェアの１つ以上のコンポーネントが、方法４００を実行するように構成され得る。方法４００はジェスチャ処理システムによって実行されてよく、ブロック４０２で開始し得る。
【００４５】
ブロック４０２において、インタプリタモジュール１１０は、アプリケーションジェスチャ及びシステム蓄積ジェスチャを含むコードを受け取ることができる。一部の実施形態において、インタプリタモジュール１１０は、任意の適切なアプリケーションからコードを受け取ることができ、コードは、任意の数及びタイプのジェスチャを含み得る。例えばコードは、アプリケーションジェスチャ及びシステム蓄積ジェスチャを含み得る。上述のように、アプリケーションジェスチャは、アプリケーションアクションを実行するのに使用される２つ以上の順序付けされたポーズを含み、システム蓄積ジェスチャは、システムアクションを実行するのに使用される２つ以上のポーズを含む。
【００４６】
ブロック４０４において、インタプリタモジュール１１０は、アプリケーションジェスチャ及びシステム蓄積ジェスチャの各々を制約に翻訳することができる。例えばアプリケーションジェスチャは、上述のようにアプリケーションによって提供されるジェスチャであり得る。システム蓄積ジェスチャは、システムとの対話のために動き検出システムによる使用のために蓄積されたジェスチャであり得る。例えばシステム蓄積ジェスチャを使用して、システムをターンオフし、アプリケーションを終了させ、あるいはアプリケーション中をブラウズすること等ができる。一部の実装では、インタプリタモジュール１１０は、アプリケーションジェスチャとシステム蓄積ジェスチャとの双方を、静的に分析するために、制約ソルバモジュールのための制約に翻訳することができる。例えば特定の制約は、特定の身体関節について許容される（x,y,z）座標を指定する数式の形式をとる。
【００４７】
ブロック４０６において、制約ソルバモジュール１１４は、アプリケーションジェスチャとシステム蓄積ジェスチャとの間の競合について、ジェスチャを静的に分析することができる。上述のように、静的分析は、アプリケーションが実行される前にジェスチャを分析することを指す。制約ソルバモジュール１１４は、インタプリタモジュール１１０によって提供される制約を使用して、アプリケーションジェスチャとシステム蓄積ジェスチャとの間にいずれかの競合が存在するかどうかを判断することができる。例えば１つ以上のアプリケーションジェスチャが、システム蓄積ジェスチャと重複することがあり、この場合、アプリケーションの実行中に、双方のジェスチャがランタイムモジュール１１２によって検出される可能性がある。制約ソルバモジュール１１４は、システム蓄積ジェスチャの順序付けされたポーズが、アプリケーションジェスチャ内に存在し得ること、あるいはそのようなシステム蓄積ジェスチャの順序付けされたポーズが、２つ以上のアプリケーションジェスチャの順序付けされたポーズを実行する間に検出され得ることを決定することができる。制約ソルバモジュール１１４は、競合するポーズ又は動きに関する詳細とともに、そのような競合をクライアント１０４に送信することができる。開発者は、その後、これに応じて競合アプリケーションジェスチャを編集することができる。
【００４８】
ブロック４０８において、ランタイムモジュール１１２は、競合アプリケーションジェスチャが、対応するアプリケーションによって使用されることを防ぐことができる。一部の実装において、ランタイムモジュール１１２は、制約ソルバモジュール１１４からシステム蓄積ジェスチャの競合を受け取り、ジェスチャライブラリからの別の利用可能なジェスチャを用いて競合アプリケーションジェスチャを変更する。例えば右から左への右手の移動を伴う第１のジェスチャは、例えばその第１のジェスチャが、システムを再設定するためにシステムによって既に蓄積されていた場合、左から右への右手の移動を伴う第２のジェスチャと置換され得る。
【００４９】
この処理フロー図は、方法４００のブロックがいずれかの特定の順序で実行されるべきことを示すように意図されておらず、全ての場合にブロックの全てが含まれるべきことを示すようにも意図されていない。さらに、特定の実装の詳細に応じて、図示されていない任意の数の追加のブロックが方法４００に含まれてもよい。
【００５０】
図５は、本明細書で説明される実装に従って、競合ジェスチャを静的に決定する方法を概説する処理フロー図である。コンピューティングデバイス６００のハードウェア又はソフトウェアの１つ以上のコンポーネントが、方法５００を実行するように構成され得る。方法５００はジェスチャ処理システムによって実行されてよく、ブロック５０２で開始し得る。
【００５１】
ブロック５０２において、インタプリタモジュール１１０は、アプリケーションジェスチャを受け取ることができる。例えばアプリケーションジェスチャは、上述のように１つ以上のアプリケーションによって提供され得る。一部の例では、ジェスチャは、ジェスチャライブラリの形でアプリケーションから提供され得る。
【００５２】
ブロック５０４において、インタプリタモジュール１１０は、アプリケーションジェスチャの各々を制約に翻訳することができる。上述のように、インタプリタモジュール１１０は、アプリケーションジェスチャを、静的に分析するために、制約ソルバモジュール１１４のための制約に翻訳することができる。ジェスチャ内のポーズの各関数は、特定の身体関節について許容される座標を指定する数式に変換され得る。
【００５３】
ブロック５０６において、制約ソルバモジュール１１４は、２つ以上のアプリケーションジェスチャの間の競合について制約を静的に分析することができる。例えばアプリケーションによって提供される２つ以上のジェスチャが、同じ骨格データから検出されることがある。骨格データは、例えば任意の適切な時間にわたるユーザの動きに対応するデータを含み得る。一部の例では、２つ以上のアプリケーションジェスチャの組合せが、図１に関連して上述したように、２つ以上のアプリケーションジェスチャの任意の組合せと競合することがある。制約ソルバモジュール１１４は、ジェスチャの組合せの間の競合についてアプリケーションジェスチャを分析することもできる。
【００５４】
ブロック５０８において、制約ソルバモジュール１１４は、競合ジェスチャを競合の詳細とともにクライアント１０４に送信することができる。例えばクライアント１０４は、アプリケーション開発者によって使用されているコンピュータであってよい。制約ソルバモジュール１１４は、競合を招く結果となったジェスチャ又はジェスチャの組合せ、並びに競合を引き起こす特定のプリミティブといった、競合に関する詳細を含み得る。例えば競合は、２つ以上のジェスチャ内で同じ方法で順序付けされる２つ以上のポーズを含み得る。
【００５５】
この処理フロー図は、方法５００のブロックがいずれかの特定の順序で実行されるべきことを示すように意図されておらず、全ての場合にブロックの全てが含まれるべきことを示すようにも意図されていない。さらに、特定の実装の詳細に応じて、図示されていない任意の数の追加のブロックが方法５００に含まれてもよい。
【００５６】
図６は、本明細書で説明される様々な技術が実装され得るコンピューティングアーキテクチャの簡単な概略図を提供するように意図される。例えばジェスチャを処理するための方法２００、３００、４００及び５００及びシステム１００が、そのようなコンピューティング環境で実装され得る。特許請求に係る主題は、上記において、ローカルコンピュータ又はリモートコンピュータ上で実行するコンピュータプログラムのコンピュータ実行可能命令の一般的コンテキストで説明されているが、特許請求に係る主題は、他のプログラムモジュールとの組合せで実装されてもよい。一般に、プログラムモジュールは、特定のタスクを実行するか特定の抽象データ型を実装するルーチン、プログラム、コンポーネント、データ構造等を含む。
【００５７】
図６は、本明細書で説明される様々な態様を実装するために構成される例示のコンピューティングデバイスのブロック図である。コンピューティングデバイス６００は、上述の技術のいずれかを実装するために使用され得るコンピューティングデバイスの例である。例えば例示のコンピューティングデバイス６００は、他の中でも特に、ゲームシステム、コンピュータシステム又はトレーニングシステムであり得る。例示のコンピューティングデバイス６００はコンピュータ６０２を含む。コンピュータ６０２は、処理ユニット６０４、システムメモリ６０６及びシステムバス６０８を含む。
【００５８】
システムバス６０８は、これらに限定されないが、システムメモリ６０６を処理ユニット６０４へ結合することを含め、システムコンポーネントを結合する。処理ユニット６０４は、様々な利用可能なプロセッサのいずれかとすることができる。デュアルマイクロプロセッサ及び他のマイクロプロセッサアーキテクチャが、処理ユニット６０４として用いられてもよい。
【００５９】
システムバス６０８は、メモリバス若しくはメモリコントローラ、周辺バス若しくは外部バス及び当業者に公知の任意の様々な利用可能なバスアーキテクチャを使用するローカルバスを含め、幾つかのタイプのバス構造のいずれかであってよい。システムメモリ６０６は、揮発性メモリ６１０及び不揮発性メモリ６１２を含む、コンピュータ読取可能記憶デバイスを含む。
【００６０】
起動時等にコンピュータ６０２内の要素間で情報を転送する基本ルーチンを含む基本入出力システム（BIOS）が、不揮発性メモリ６１２内に記憶される。限定ではなく例として、不揮発性メモリ６１２は、読取専用メモリ（ROM）、プログラマブルROM（PROM）、電子的プログラマブルROM（EPROM）、電子的消去可能プログラマブルROM（EEPROM）又はフラッシュメモリを含み得る。
【００６１】
揮発性メモリ６１０は、外部キャッシュメモリとして動作するランダムアクセスメモリ（RAM）を含む。限定ではなく例として、RAMは、静的RAM（SRAM）、動的RAM（DRAM）、同期DRAM(SDRAM)、ダブルデータレートSDRAM（DDR  SDRAM）、ESDRAM（enhanced  SDRAM）、SynchLink（登録商標）DRAM（SLDRAM）、Rambus（登録商標）ダイレクトRAM（RDRAM）、ダイレクトRambus（登録商標）動的RAM（DRDRAM）及びRambus（登録商標）動的RAM（RDRAM）を含み得る。
【００６２】
コンピュータ６０２は、取外し可能／取外し不可能、揮発性／不揮発性コンピュータ記憶デバイスのような他のコンピュータ読取可能媒体も含む。図６は、例えばディスクストレージ６１４を示している。ディスクストレージ６１４は、これらに限定されないが、磁気ディスクドライブ、フロッピーディスクドライブ、テープドライブ、Jazドライブ、Zipドライブ、LS-210ドライブ、フラッシュメモリカード又はメモリスティックのようなデバイスを含む。
【００６３】
加えて、ディスクストレージ６１４は、これらに限定されないが、コンパクトディスクROMデバイス（CD-ROM）、CD記録可能ドライブ（CD-Rドライブ）、CD再書込み可能ドライブ（CD-RWドライブ）又はデジタル多用途ディスクROMドライブ（DVD-ROM）を含め、他の記憶デバイスと別個に又は組合せで記憶デバイスを含み得る。システムバス６０８に対するディスク記憶デバイス６１４の接続を容易にするため、典型的に、インタフェース６１６のような取外し可能又は取外し不可能インタフェースが使用される。
【００６４】
図６は、ユーザと適切なコンピューティングデバイス６００内の説明される基本的なコンピュータリソースの間の中間体として動作するソフトウェアを説明していることが認識されよう。そのようなソフトウェアはオペレーティングシステム６１８を含む。オペレーティングシステム６１８は、ディスクストレージ６１４上に記憶されてよく、コンピュータシステム６０２のリソースを制御して割り当てるように動作する。
【００６５】
システムアプリケーション６２０は、システムメモリ６０６又はディスクストレージ６１４のいずれかに記憶されるプログラムモジュール６２２及びプログラムデータ６３０を通して、オペレーティングシステム６１８によるリソース管理を利用する。特許請求に係る主題は、様々なオペレーティングシステムとともに、あるいはオペレーティングシステムの組合せとともに実装され得ることが認識されよう。
【００６６】
モジュール６２２は、インタプリタモジュール６２４、ランタイムモジュール６２６及び制約ソルバモジュール６２８を含むことができる。一部の実装では、インタプリタモジュール６２４は、アプリケーションからジェスチャを受け取るコードを含むことができる。例えばジェスチャは、ジェスチャに対してドメイン固有の言語からのプリミティブを含む、１つ以上のポーズを含むことができる。一部の実装では、ランタイムモジュール６２６は、動き検出システムからの骨格データを受け取るコードを含むことができる。例えばスケルトンデータは、他のデータの中でも、手及び顔の特徴のものを含め、骨格関節に対する位置、動き及び回転を含むことができる。一部の実装では、制約ソルバモジュール６２８は、競合についてアプリケーションを静的に分析することができる。例えば競合は、ジェスチャ間の競合、ジェスチャとシステム蓄積ジェスチャとの間の競合及び／又は安全性の競合を含み得る。
【００６７】
ユーザは、入力デバイス６３２を通してコマンド又は情報をコンピュータ６０２に入力する。入力デバイス６３２は、これらに限られないが、マウス、トラックボール及びスタイラス等のようなポインティングデバイス、キーボード、マイクロフォン、ジョイスティック、衛星放送受信アンテナ、スキャナ、ＴＶチューナカード、デジタルカメラ、デジタルビデオカメラ、ウェブカメラ等を含む。入力デバイス６３２は、システムバス６０８を通してインタフェースポート６３４を介して処理ユニット６０４へ接続する。インタフェースポート６３４は、例えばシリアルポート、パラレルポート、ゲームポート及びユニバーサルシリアルバス（ＵＳＢ）を含む。
【００６８】
出力デバイス６３６は、入力デバイス６３２と同じタイプのポートの一部を使用する。したがって、例えばＵＳＢポートを使用して、コンピュータ６０２へ入力を提供し、コンピュータ６０２から出力デバイス６３６へ情報を出力することができる。
【００６９】
出力アダプタ６３８は、他の出力デバイス６３６の中でも、アダプタを介してアクセス可能なモニタ、スピーカ及びプリンタのような幾つかの出力デバイス６３６が存在することを示すように提供されている。出力アダプタ６３８は、限定ではなく例として、出力デバイス６３６とシステムバス６０８との間の接続の手段を提供するビデオ及びサウンドカードを含む。他のデバイス及びデバイスのシステムは、リモートコンピュータ６４０のように入力と出力の双方の能力を提供することが認識され得る。
【００７０】
コンピュータ６０２は、リモートコンピュータ６４０のような１つ以上のリモートコンピュータへの論理接続を使用して、ネットワーク化環境内で様々なソフトウェアアプリケーションをホストするサーバであってよい。リモートコンピュータ６４０は、ウェブブラウザ、ＰＣアプリケーション、携帯電話アプリケーション等とともに構成されるクライアントシステムであり得る。
【００７１】
リモートコンピュータ６４０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ワークステーション、マイクロプロセッサベースの機器、携帯電話、ピアデバイス又は他の一般的なネットワークノード等であってよく、典型的には、コンピュータ６０２に関連して説明される要素の多く又は全てを含む。
【００７２】
簡潔性の目的で、メモリ記憶デバイス６０６は、リモートコンピュータ６４０とともに図示されている。リモートコンピュータ６４０は、ネットワークインタフェース６４２を通してコンピュータ６０２と論理的に接続され、その後、無線通信接続６４４を介して接続される。
【００７３】
ネットワークインタフェース６４２は、ローカルエリアネットワーク（LAN）及びワイドエリアネットワーク（WAN）のような無線通信ネットワークを含む。LAN技術は、FDDI（Fiber  Distributed  Data  Interface）、CDDI（Copper  Distributed  Data  Interface）、Ethernet（登録商標）、トークンリング等を含む。WAN技術は、これらに限られないが、ポイントツーポイントリンク、ISDN（Integrated  Services  Digital  Networks）及びその変形のような回線交換ネットワーク、パケット交換ネットワーク及びデジタル加入者線（DSL）を含む。
【００７４】
通信接続６４４は、ネットワークインタフェース６４２をバス６０８に接続するために用いられるハードウェア／ソフトウェアを指す。通信接続６４４は説明的な簡潔性のためにコンピュータ６０２の内部に図示されているが、通信接続６４４はコンピュータ６０２の外部であってもよい。ネットワークインタフェース６４２への接続のためのハードウェア／ソフトウェアは、例示の目的で、携帯電話スイッチ、標準の電話用モデムを含むモデム、ケーブルモデム及びDSLモデム、ISDNアダプタ及びEthernet（登録商標）カードのような内部及び外部技術を含み得る。
【００７５】
図７は、ジェスチャを処理するのに使用され得る有形のコンピュータ読取可能記憶媒体を示すブロック図である。有形のコンピュータ読取可能記憶媒体７００は、コンピュータバス７０４を介してプロセッサ７０２によってアクセスされ得る。さらに、有形のコンピュータ読取可能記憶媒体７００は、現在の方法を実行するようプロセッサ７０２に指示するコードを含むことができる。例えば方法２００〜５００はプロセッサ７０２によって実行され得る。
【００７６】
本明細書で説明される様々なソフトウェアコンポーネントを、図７に図示されるような有形のコンピュータ読取可能記憶媒体７００に記憶することができる。例えば有形のコンピュータ読取可能記憶媒体７００は、インタプリタモジュール７０６、ランタイムモジュール７０８及び制約ソルバモジュール７１０を含むことができる。一部の実装では、インタプリタモジュール７０６は、アプリケーションからジェスチャを受け取るコードを含むことができる。例えばジェスチャは、ジェスチャに対してドメイン固有の言語からのプリミティブを含む１つ以上のポーズを含み得る。インタプリタモジュール７０６は、ジェスチャライブラリを受け取るコードも含むことができる。例えばジェスチャライブラリは、ジェスチャに対してドメイン固有の言語からのプリミティブを含み得る。
【００７７】
一部の実装では、ランタイムモジュール７０８は、動き検出システムから骨格データを受け取るコードを含み得る。例えば骨格データは、他のデータの中でも、手及び顔の特徴のものを含め、骨格関節に対する位置、動き及び回転を含むことができる。一部の例では、ランタイムモジュール７０８は、ジェスチャライブラリを使用して、骨格データをアプリケーションからのジェスチャと比較することができる。例えばジェスチャライブラリをインタプリタモジュール７０６によって使用して、ジェスチャを、骨格データと比較するためにランタイムモジュール７０８によって使用され得る中間表現に翻訳することができる。例えば中間表現は制約を含み得る。ジェスチャのプリミティブは、時間制約又は相対的制約のような制約に対応し得る。例えば時間制約は、以前のポーズから、ポーズについてのスピード又速度を示すことができる。相対的制約は、骨格データ内の少なくとも２つの身体の関節について相互に対する位置又は動きを示すことができる。一部の例では、複数のジェスチャが骨格データに対して同時に比較されてよく、複数のアプリケーションがプロセッサ７０２上で実行していることがある。一部の実装において、ランタイムモジュール７０８はアプリケーションに結果を返すことができる。例えば結果は、骨格データとジェスチャとの間の差を説明するプリミティブを含み得る。一部の例では、結果は、骨格データと各プリミティブとの間の差が許容閾値未満であるかどうかに基づくジェスチャイベントであってよい。
【００７８】
一部の実装では、制約ソルバモジュール７１０は、競合についてアプリケーションを静的に分析することができる。例えば競合は、ジェスチャ間の競合、ジェスチャとシステム蓄積ジェスチャとの間の競合及び／又は安全性競合を含み得る。
【００７９】
特定の応用に応じて、図７に図示されていない任意の数の追加のソフトウェアコンポーネントを有形のコンピュータ読取可能記憶デバイス７００内に含めることができることが理解されよう。本主題は、構造的特徴及び／又は方法に特有の言語で説明されているが、添付の特許請求の範囲において定義される主題は、必ずしも上述の特定の構造的特徴又は方法に限定されないことが理解されよう。むしろ、上述の特定の構造的特徴又は方法は、特許請求の範囲を実装する例示の形式として開示されている。
【００８０】
例１
ジェスチャの静的分析のためのシステムの例を提供する。例示のシステムは、複数のジェスチャを受け取り、これらのジェスチャの各々を中間表現に翻訳するように構成される第１のモジュールを含むことができる。各ジェスチャは、ジェスチャに対してドメイン固有の言語からの１つ以上のプリミティブを含むことができる。例示のシステムは、条件について、中間表現を静的に分析するように構成される第２のモジュールを含むことができる。
【００８１】
例示の実装において、第２のモジュールは更に、所定の制約を受け取ることができる。条件は、所定の制約に基づく安全性違反を含むことができる。あるいはまた、条件は、ジェスチャのうちの２つ以上の間の競合を含むことができる。あるいはまた、第２のモジュールは更にシステム蓄積ジェスチャを受け取ることができる。システム蓄積ジェスチャは、ジェスチャ認識システムとの通信のために蓄積されたジェスチャを含むことができ、条件は、システム蓄積ジェスチャとジェスチャの競合を備える。あるいはまた、第１のモジュールはインタプリタモジュールとすることができる。あるいはまた、第２のモジュールは、制約ソルバモジュールとすることができる。制約ソルバモジュールは、制約を受け取り、中間表現が制約外であるかどうかを判断することができる。あるいはまた、ジェスチャは、関数（function）と１つ以上の引数（argument）を含むことができる。関数はアクションを示し、１つ以上の引数は、方向、関節に対する移動角度及び／又は骨格の区分（segment）を示すことができる。
【００８２】
例２
ジェスチャを処理するための方法の例を提供する。例示の方法は、アプリケーションからジェスチャを受け取るステップを含むことができ、ジェスチャは、ジェスチャに対してドメイン固有の言語からの１つ以上のプリミティブを備える。例示の方法は、動き検出システムから骨格データを受け取るステップも含むことができる。例示の方法は、ランタイムモジュールにおいて骨格データをアプリケーションからのジェスチャと比較するステップを含むことができる。例示の方法は更に、アプリケーションにジェスチャイベントを送信するステップを含むことができる。
【００８３】
一部の実装において、例示の方法は、ジェスチャについてモニタするステップと、アプリケーションに差（difference）を返すステップを更に含むことができる。差は、骨格データとジェスチャとの間の差を示すプリミティブを含むことができる。あるいはまた、ジェスチャイベントは、骨格データと各プリミティブの間の差が許容閾値未満であるかどうかに基づく。あるいはまた、少なくとも１つのプリミティブは、時間制約に対応し得る。あるいはまた、ジェスチャ内の少なくとも１つのプリミティブは、相対的制約に対応し得る。相対的制約は、骨格データ内の少なくとも２つの点の、相互に対する位置又は動きを示し得る。あるいはまた、例示の方法は、アプリケーションにジェスチャイベントを返した後、骨格データを削除するステップを含むことができる。あるいはまた、例示の方法は、競合についてアプリケーションを静的に分析するステップを更に含み得る。競合は、ジェスチャ間の競合、ジェスチャとシステム蓄積ジェスチャとの間の競合及び／又は安全性の競合を含み得る。
【００８４】
例３
ジェスチャを処理するための１つ以上のコンピュータ読取可能記憶デバイスの例を提供する。例示の１つ以上のコンピュータ読取可能記憶デバイスは、プロセッサによって実行されると、該プロセッサに、アプリケーションからジェスチャを受け取らせることができる。ジェスチャは、ジェスチャに対してドメイン固有の言語からの１つ以上のプリミティブを備える。例示の１つ以上のコンピュータ読取可能記憶デバイスは、実行されると、プロセッサに、ジェスチャライブラリを受け取らせることができる。ジェスチャライブラリは、ジェスチャに対してドメイン固有の言語からのプリミティブを含むことができる。また、例示の１つ以上のコンピュータ読取可能記憶デバイスは、実行されると、プロセッサに、動き検出システムから骨格データを受け取らせることができる。また、例示の１つ以上のコンピュータ読取可能記憶デバイスは、実行されると、プロセッサに、ジェスチャライブラリを使用して、ランタイムモジュールにおいて骨格データをアプリケーションからのジェスチャと比較させることができる。また、例示の１つ以上のコンピュータ読取可能記憶デバイスは、実行されると、プロセッサに更に、アプリケーションに結果を送信させることができる。
【００８５】
一部の実装において、例示の１つ以上のコンピュータ読取可能記憶デバイスは、１つ以上の処理システムに、骨格データとジェスチャとの間の差を説明するプリミティブを含み得る結果を示す。あるいはまた、結果は、骨格データと各プリミティブの間の差が許容閾値未満であるかどうかに基づくジェスチャイベントを含むことができる。あるいはまた、少なくとも１つのプリミティブは、時間制約に対応し得る。あるいはまた、ジェスチャ内の少なくとも１つのプリミティブは、相対的制約に対応し得る。相対的制約は、骨格データ内の少なくとも２つの点の、相互に対する位置又は動きを示し得る。あるいはまた、例示の１つ以上のコンピュータ読取可能記憶デバイスは、実行されると、プロセッサに、競合についてアプリケーションを静的に分析させることもできる。競合は、ジェスチャ間の競合、ジェスチャとシステム蓄積ジェスチャとの間の競合及び／又は安全性の競合を含み得る。
【００８６】
例４
システムの例を提供する。例示のシステムは、複数のジェスチャを受け取り、これらのジェスチャの各々を中間表現に翻訳する手段を含むことができる。各ジェスチャは、ジェスチャに対してドメイン固有の言語からの１つ以上のプリミティブを含むことができる。例示のシステムは、条件について中間表現を静的に分析する手段も含むことができる。
【００８７】
例示の実装において、例示のシステムは、所定の制約を更に受け取る手段も含むことができる。あるいはまた、条件は、所定の制約に基づく安全性違反を含むことができる。あるいはまた、条件は、ジェスチャのうちの２つ以上の間の競合を含むことができる。あるいはまた、例示のシステムは更にシステム蓄積ジェスチャを更に受け取る手段を含むことができる。システム蓄積ジェスチャは、ジェスチャ認識システムとの通信のために蓄積されたジェスチャを含むことができ、条件は、システム蓄積ジェスチャとジェスチャの競合を備える。あるいはまた、複数のジェスチャを受け取り、これらのジェスチャの各々を中間表現に翻訳する手段は、インタプリタモジュールとすることができる。あるいはまた、条件について中間表現を静的に分析する手段は、制約ソルバモジュールとすることができる。制約ソルバモジュールは、制約を受け取り、中間表現が制約外であるかどうかを判断することができる。あるいはまた、ジェスチャは、関数と１つ以上の引数を含むことができる。関数はアクションを示し、１つ以上の引数は、方向、関節に対する移動角度及び／又は骨格の区分を示すことができる。
【００８８】
上記で説明したものは、特許請求に係る主題の例を含む。当然、特許請求に係る主題を説明する目的のために、コンポーネント又は方法の考えられる組合せの全てを説明することは不可能であるが、当業者には、特許請求に係る主題の多くの更なる組合せ及び置換が可能であることが認識されよう。したがって、特許請求に係る主題は、添付の特許請求の範囲の精神及び範囲内にあるそのような代替、修正及び変形を全て包含するように意図される。
【００８９】
特に、上述のコンポーネント、デバイス、回路及びシステム等によって実行される様々な機能に関して、そのようなコンポーネントを説明するのに使用される用語（「手段」への言及も含む）は、特段の定めがない限り、説明されるコンポーネントの指定された機能を実行する任意のコンポーネントに対応する、例えば開示される構造と構造的に均等でないとしても、特許請求に係る主題について本明細書で説明される例示の側面においてその機能を実行する機能的均等物に対応するように意図される。この点に関して、本革新は、システムだけでなく、特許請求に係る主題の様々な方法の動作及びイベントを実行するためのコンピュータ実行可能命令を有するコンピュータ読取可能記憶デバイスを含むことも認識されよう。
【００９０】
特許請求に係る主題を実装する複数の方法、例えば適切なAPI、ツールキット、ドライバコード、オペレーティングシステム、コントロール、スタンドアロン又はダウンロード可能なソフトウェアオブジェクト等が存在し、これらはアプリケーション及びサービスが、本明細書で説明される技術を使用することを可能にする。特許請求に係る主題は、API（又は他のソフトウェアオブジェクト）のスタンドポイントから、並びに本明細書で説明される技術に従って動作するソフトウェア又はハードウェアオブジェクトからの使用を考慮する。したがって、本明細書で説明される特許請求に係る主題の様々な実装は、完全にハードウェアの態様、一部はハードウェアで一部はソフトウェアの態様、並びにソフトウェアの態様を有し得る。
【００９１】
上述のシステムは、幾つかのコンポーネント間の対話に関して説明されている。そのようなシステム及びコンポーネントは、これらのコンポーネント又は指定されたサブコンポーネント、指定されたコンポーネント又はサブコンポーネントの一部及び追加のコンポーネントを、上記の様々な置換及び組合せに応じて含み得ることを認識することができる。サブコンポーネントは、（階層的な）親コンポーネントに含まれるのではなく、他のコンポーネントに通信可能に結合されるコンポーネントとして実装されてもよい。
【００９２】
加えて、１つ以上のコンポーネントが、集約機能を提供する単一のコンポーネントに組み合わされるか、幾つかの別個のサブコンポーネントに分割されてよく、管理層のような任意の１つ以上の中間層が、統合された機能を提供するために、そのようなサブコンポーネントを通信可能に結合するために提供されてもよい。本明細書で説明される任意のコンポーネントが、本明細書で具体的に説明されないが、当業者には一般的に知られている１つ以上の他のコンポーネントと相互作用してもよい。
【００９３】
加えて、特許請求に係る主題の特定の特徴が、幾つかの実装のうちの１つに関して開示されているが、そのような特徴は、任意の所与の適用又は特定の適用のために望ましく、有利であるように、他の実装の１つ以上の他の特徴と組み合わされてもよい。さらに、「含む」、「含んでいる」、「有する」、「包含する」という用語及びその変形並びに他の同様の言葉が、詳細な説明又は特許請求の範囲内で使用されている範囲において、これらの用語は、いずれかの追加又は他の要素を除外することなく、オープンな遷移語として「具備する」という用語と同様に包含的であるように意図される。
【図１】
2017527035.tif 000003
【図２】
2017527035.tif 000004
【図３】
2017527035.tif 000005
【図４】
2017527035.tif 000006
【図５】
2017527035.tif 000007
【図６】
2017527035.tif 000008
【図７】
2017527035.tif 000009
【国際調査報告】
2017527035.tif 000010
2017527035.tif 000011