22
Leap Motion ではじめる NUI プログラミング 博之(もり ひろゆき) 極東 IT - Engineers / RIA アーキテクチャ研究会

Leap MotionではじめるNUIプログラミング

Embed Size (px)

DESCRIPTION

Leap MotionではじめるNUIプログラミング 2013年8月24日開催  プログラミング生放送 at 日本マイクロソフト株式会社 品川本社 31F セミナールーム C+D

Citation preview

Page 1: Leap MotionではじめるNUIプログラミング

Leap MotionではじめるNUIプログラミング

森博之(もりひろゆき)極東IT-Engineers / RIAアーキテクチャ研究会

Page 2: Leap MotionではじめるNUIプログラミング

自己紹介

•森 博之(もり ひろゆき)• MS開発技術を専門としたフリーランスエンジニア

• Microsoft MVP for Visual C#

• 極東IT-Engineers 代表

• ブログ:もり ひろゆきの日々是勉強• http://moriblog.kit-eng.com

• Twitter

• Windows8対応[基本+実用]

Windowsストアアプリ開発入門 好評発売中!

Page 3: Leap MotionではじめるNUIプログラミング

Agenda

•Natural User Interface概要

•Leap Motion概要

•C#によるLeap Motionプログラミング

Page 4: Leap MotionではじめるNUIプログラミング

Natural User Interface概要

Page 5: Leap MotionではじめるNUIプログラミング

NUIって?

•Natural User Interface• Computingにおけるユーザーインターフェースの中で自然な・直感的な動作で操作可能な仕組みや方法は仕組みのこと。

•人間の五感や人間が自然に行う動作による操作方法

•主にIT関連のデザイナーや開発者で使われている用語

Page 6: Leap MotionではじめるNUIプログラミング

My First NUI

•Project Natal(のちのKINECT)• Microsoft ResearchのNUI研究成果の1つ

• 2009年 6月2010 International CESの基調講演で公開

Page 7: Leap MotionではじめるNUIプログラミング

KINECT for Windows

•3つのセンサーとSDKを使ってユーザーの骨格・距離・方向・音声・表情などを入力

Page 8: Leap MotionではじめるNUIプログラミング

その他のNUIデバイス

•Creative Interactive Gesture Camera DK• ¥25,000程度• Webカメラ・深度センサー・デュアルアレイマイク• Intel Perceptual Computing SDKなどで開発

•Oculus Rift• $300•ヘッドマウントディスプレイを使ったVRゲーミングデバイス現在、開発者向けSDKのみ

Page 9: Leap MotionではじめるNUIプログラミング

Leap Motion 概要

Page 10: Leap MotionではじめるNUIプログラミング

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

Page 11: Leap MotionではじめるNUIプログラミング

付属ツール

•Control Panel• Leap Motionの設定

•Airspace• Leap Motionのホームアプリ

•Visualizer• Leap Motionの識別情報を視覚化

•Airespace STORE• Leap Motion対応アプリのストア

Page 12: Leap MotionではじめるNUIプログラミング

C#によるLeap Motionプログラミング

Page 13: Leap MotionではじめるNUIプログラミング

Leap Motionから取得できるデータ

•モーショントラッキング(動作追跡)•センサーの視界領域にある手や指を追跡•具体的には・・・

• 視界内のすべての手の識別(Hands)

• 視界内のすべての指の識別(Fingers)

• 視界内のすべて指とその座標位置(Pointables)

• 視界内のツール(指より長い棒状のもの)(Tools)

• ジェスチャーの開始・終了または更新(Gestures)

Page 14: Leap MotionではじめるNUIプログラミング

Leap Motionで利用する主要クラス

• Controller• Leap Motion自体の制御を行うクラス

• Listener• ControllerからEventによって通知を受けるための仮想クラス

• Hand• 手の識別情報が格納されるクラス

• Finger• 指の識別情報が格納されるクラス

• Tool• ツールの識別情報が格納されるクラス

• Gesture• ジェスチャーの識別情報が格納されるクラス

Page 15: Leap MotionではじめるNUIプログラミング

Controller

•Leap Motionの制御や情報取得を行う

•Frame情報はこのクラスを用いて取得する•取得方法

• Pollingによる取得• controller.Frameメソッドを利用

• 戻り値がFrameオブジェクト

• Callbackを受けて取得• Listenerを登録し、Callbackを受ける

Page 16: Leap MotionではじめるNUIプログラミング

Listener

• デバイスの状態をListenするために利用• メンバーのメソッドをoverrideして実装する

• 主要メンバー• OnInit

• コントローラーの初期化を行ったときに呼び出される• OnConnect

• Leap Motionの接続したときに呼び出される• OnDisconnect

• コントローラーがLeap Motionとの接続を解除したときに呼び出される

• OnExit• リスナーがコントローラーから削除されたとき• コントローラーそのものが破棄されたとき

• OnFrame• 新しいFrameの取得が可能になったとき

Page 17: Leap MotionではじめるNUIプログラミング

Frame

• 主要プロパティ• HandList

• 手の識別情報のコレクション• PointableList

• Pointableの識別情報のコレクション• FingerList

• 指の識別情報のコレクション• ToolList

• ツールの識別情報のコレクション

• 主要メソッド• Gestures()

• 戻り値が GestureList(ジェスチャーのコレクションオブジェクト)

その他、「移動」や「回転」、「スケール(拡大・縮小)」といったモーション情報も含まれる

Page 18: Leap MotionではじめるNUIプログラミング

Gesture

•ジェスチャーの識別情報を格納したクラス• 4種類のジェスチャーを識別可能

• Circle 指で円を描く

• Swipe 指を直線的に移動させる

• Tap• Key Taps 指やツールを下方向へ曲げて戻す

• Screen Taps 画面方向へ向けて前後する

Page 19: Leap MotionではじめるNUIプログラミング

参考:タッチエミュレーション

•Leap Motion SDKのサンプル• Leap Motionを用いてTouchを識別する場合、仮想的なタッチパネルが存在するように実装する。•指の移動状態から触れていない状態(Hovering)と触れている状態(Touching)として、処理している

Page 20: Leap MotionではじめるNUIプログラミング

InteractionBoxクラス

•Leap Motionの可視領域上に下図のような箱状の領域を設けて、取得したPointableListオブジェクトをディスプレイの座標系に変換できる

Page 21: Leap MotionではじめるNUIプログラミング

まとめ

•Natural User Interface•人間の五感や人間が自然に行う動作による操作方法• Leap Motion, KINECTなど手軽に入手ができるようになった

•Leap Motion•手や指などの動作を識別することができる入力デバイス

• Frameを用いて認識情報を取得する

Page 22: Leap MotionではじめるNUIプログラミング

ご清聴ありがとうございました

Thank you!