Download - Leap MotionではじめるNUIプログラミング
Leap MotionではじめるNUIプログラミング
森博之(もりひろゆき)極東IT-Engineers / RIAアーキテクチャ研究会
自己紹介
•森 博之(もり ひろゆき)• MS開発技術を専門としたフリーランスエンジニア
• Microsoft MVP for Visual C#
• 極東IT-Engineers 代表
• ブログ:もり ひろゆきの日々是勉強• http://moriblog.kit-eng.com
• Windows8対応[基本+実用]
Windowsストアアプリ開発入門 好評発売中!
Agenda
•Natural User Interface概要
•Leap Motion概要
•C#によるLeap Motionプログラミング
Natural User Interface概要
NUIって?
•Natural User Interface• Computingにおけるユーザーインターフェースの中で自然な・直感的な動作で操作可能な仕組みや方法は仕組みのこと。
•人間の五感や人間が自然に行う動作による操作方法
•主にIT関連のデザイナーや開発者で使われている用語
My First NUI
•Project Natal(のちのKINECT)• Microsoft ResearchのNUI研究成果の1つ
• 2009年 6月2010 International CESの基調講演で公開
KINECT for Windows
•3つのセンサーとSDKを使ってユーザーの骨格・距離・方向・音声・表情などを入力
その他のNUIデバイス
•Creative Interactive Gesture Camera DK• ¥25,000程度• Webカメラ・深度センサー・デュアルアレイマイク• Intel Perceptual Computing SDKなどで開発
•Oculus Rift• $300•ヘッドマウントディスプレイを使ったVRゲーミングデバイス現在、開発者向けSDKのみ
Leap Motion 概要
Leap Motionって?
•手や指の動作を読み取ることができるデバイス• ¥8,200.-(送料込み¥10,500.- 8/23現在)• Windows / Mac OS X / Linux向けのSDKを利用して開発
• Windows環境では以下の言語で開発可能• C++ • C# / Visual Basic (.NET Framework)• Java• Python• Objective-C• JavaScript
付属ツール
•Control Panel• Leap Motionの設定
•Airspace• Leap Motionのホームアプリ
•Visualizer• Leap Motionの識別情報を視覚化
•Airespace STORE• Leap Motion対応アプリのストア
C#によるLeap Motionプログラミング
Leap Motionから取得できるデータ
•モーショントラッキング(動作追跡)•センサーの視界領域にある手や指を追跡•具体的には・・・
• 視界内のすべての手の識別(Hands)
• 視界内のすべての指の識別(Fingers)
• 視界内のすべて指とその座標位置(Pointables)
• 視界内のツール(指より長い棒状のもの)(Tools)
• ジェスチャーの開始・終了または更新(Gestures)
Leap Motionで利用する主要クラス
• Controller• Leap Motion自体の制御を行うクラス
• Listener• ControllerからEventによって通知を受けるための仮想クラス
• Hand• 手の識別情報が格納されるクラス
• Finger• 指の識別情報が格納されるクラス
• Tool• ツールの識別情報が格納されるクラス
• Gesture• ジェスチャーの識別情報が格納されるクラス
Controller
•Leap Motionの制御や情報取得を行う
•Frame情報はこのクラスを用いて取得する•取得方法
• Pollingによる取得• controller.Frameメソッドを利用
• 戻り値がFrameオブジェクト
• Callbackを受けて取得• Listenerを登録し、Callbackを受ける
Listener
• デバイスの状態をListenするために利用• メンバーのメソッドをoverrideして実装する
• 主要メンバー• OnInit
• コントローラーの初期化を行ったときに呼び出される• OnConnect
• Leap Motionの接続したときに呼び出される• OnDisconnect
• コントローラーがLeap Motionとの接続を解除したときに呼び出される
• OnExit• リスナーがコントローラーから削除されたとき• コントローラーそのものが破棄されたとき
• OnFrame• 新しいFrameの取得が可能になったとき
Frame
• 主要プロパティ• HandList
• 手の識別情報のコレクション• PointableList
• Pointableの識別情報のコレクション• FingerList
• 指の識別情報のコレクション• ToolList
• ツールの識別情報のコレクション
• 主要メソッド• Gestures()
• 戻り値が GestureList(ジェスチャーのコレクションオブジェクト)
その他、「移動」や「回転」、「スケール(拡大・縮小)」といったモーション情報も含まれる
Gesture
•ジェスチャーの識別情報を格納したクラス• 4種類のジェスチャーを識別可能
• Circle 指で円を描く
• Swipe 指を直線的に移動させる
• Tap• Key Taps 指やツールを下方向へ曲げて戻す
• Screen Taps 画面方向へ向けて前後する
参考:タッチエミュレーション
•Leap Motion SDKのサンプル• Leap Motionを用いてTouchを識別する場合、仮想的なタッチパネルが存在するように実装する。•指の移動状態から触れていない状態(Hovering)と触れている状態(Touching)として、処理している
InteractionBoxクラス
•Leap Motionの可視領域上に下図のような箱状の領域を設けて、取得したPointableListオブジェクトをディスプレイの座標系に変換できる
まとめ
•Natural User Interface•人間の五感や人間が自然に行う動作による操作方法• Leap Motion, KINECTなど手軽に入手ができるようになった
•Leap Motion•手や指などの動作を識別することができる入力デバイス
• Frameを用いて認識情報を取得する
ご清聴ありがとうございました
Thank you!