第1回 Kinect for Windows SDKとは?:連載:Kinect for Windows SDK(ベータ版)開発入門(1/3 ページ)
体の動きや音声をアプリの入力方式に採用。KinectセンサーをPCに接続して活用できるマイクロソフト純正SDKを解説。
マイクロソフト製のゲーム機「Xbox360」向けの入力デバイスであるKinectセンサー(以後、単に「Kinect」)はPCにも接続可能だ。そして、Microsoft Researchが提供する「Kinect for Windows SDKベータ版」を用いれば、C#で記述したプログラムによりKinectを制御できる。本連載では、これらの開発環境とKinectを使って、実際にどのようなことができるのかを紹介していく。
第1回目となる今回は、Kinect for Windows SDKベータ版を開発環境のPCに導入し、そのPCにKinectをUSB接続してハードウェアとして認識させ、Kinect for Windows SDKベータ版に付属するサンプルを動作させるところまでを扱う。
ところで、Xbox360向けの入力デバイスであるKinectを、皆さんは体験してみただろうか? 例えばKinectをXbox360で利用すると、全身を使ったゲームが家庭で気軽に楽しめる。動画などで見るのと実際にゲームを体感してみるのには差があるので、ぜひ実際に試してKinectの面白さを実感してもらいたい。
それではまず、Kinectを手に入れよう。Kinectを入手するには、以下のいずれかの製品を購入すればよい。
- Xbox360 4GB + Kinect
- Xbox360 250GB + Kinect
- Xbox360 Kinectセンサー(単体)
大きく分けると、Kinectが梱包(こんぽう)された最新型のXbox360を購入するか、あるいはKinect単体で購入するかである。
KinectをPCに接続するには、電源コード付きのUSB変換ケーブル(以後、「USB電源ケーブル」と称する)が必要となる。もし、Kinectを単体で購入していれば、このケーブルが付属しているので、そのままPCに接続できる。しかし、Kinectが梱包(こんぽう)された最新型のXbox360の場合、USB電源ケーブルがないため、USB電源ケーブルを別途入手する必要がある。マイクロソフトのXboxサポートに問い合わせをすれば有料で入手可能とのことである。詳しくは、「XBOX SUPPORT(電話する)」へお問い合わせいただきたい。
USB電源ケーブルのことを考えれば、新規購入であればKinect単体で購入する方が便利だ。
それでは、Kinect for Windows SDKベータ版の概要について説明していこう。また、KinectをPC上で取り扱えるSDK(ソフトウェア開発キット)はほかにも存在するので、これらについても簡単に紹介する。
■Kinect for Windows SDKとは?/そのほかのKinect用SDKについて
いま現在、Kinect用のSDKとして利用できるものには、次の3つがある。
- OpenKinect(ハッキング・コンテストの成果)
- OpenNI(PrimeSense社も参加するOpenNI組織から)
- Kinect for Windows SDKベータ版(マイクロソフト社から)
ここでは簡単に、Kinectに関する歴史とSDKの登場について記載したい。各SDKの概要を把握していると、SDKが提供する機能の違いを把握でき、思いついたKinectアプリケーションを実現する際の設計上のヒントになるからである。
●Kinect用のSDKの種類と歴史について
○OpenKinectの登場について
Xbox360で利用できるKinectであるが、Kinectの登場と同時にPCでの利用(いわゆる、Kinectハック)が検討されたことは、Kinectハッカーたちの行動を見ていても分かる。「Open Kinect Project」というKinectハックのプロジェクトが米国のKinect発売日当日に立ち上がり、そこでハッキング・コンテストが開催されるほど、Kinect登場当時から注目されていた。
このハッキング・コンテストは、KinectをPCで利用できるようにするコンテストであった。そのため、最初はマイクロソフト社も良い顔をしなかったが、後にKinect内部にアクセスしないことや、Xbox360の改造をしないことを条件に、このKinectハックの流れを容認したようだ。このコンテストの結果である「OpenKinect」により、Kinect購入者がいち早くPCでKinectを利用できるようになったのは事実である。
* 余談になるが、わたしも、ニュース・サイトでOpen Kinect Projectを知り、Kinectに興味を持ち始めた1人である。2010年11月20日(日本の発売日)には、思わず、Kinectの単体をインターネット通信販売で注文してしまった。周りからは、「Xbox360も持っていないのに、なぜ買うのか?」という疑問の声も寄せられたが……。
○OpenNIの登場について
Kinect発売前、Kinect自体は「Project Natal」と呼ばれるプロジェクトであった。その当時、「このプロジェクトに、PrimeSense社がセンサー技術を提供する」というニュースが流れていた。つまり、Kinectのセンサー技術は、PrimSense社の技術を基盤にしているのだ。
Kinect発売後、このPrimeSense社などがナチュラル・インタラクション(NI:人間とコンピュータで自然なやり取り)アプリケーションの市場への導入を加速させるために、「OpenNI(Open Natural Interaction)」というオープンソースのライブラリの提供を始めた。これが、2010年12月8日のことである。なお、このOpenNI組織のメンバーは、PrimeSense、Willow Garage、Side-kickなどの企業である。
Open Kinect Projectはハッカーによるプロジェクトであるのに対し、OpenNIはKinect開発元が関係する組織から提供されるライブラリなので比較的信頼できる。また、PrimeSense社は開発/検証用の装置も提供している。
ただし、このOpenNI組織が提供するOpenNIのドライバはKinectには対応しておらず、別途、Kinectに対応したドライバを導入する必要があった。そのため、若干、ハードルが高いと感じられる。
このように、若干、導入にハードルが高い環境ではあるが、「PCから容易に利用できる」という点では優れているため、2010年末にはOpen Kinect ProjectやOpenNIを利用したさまざまな作品がインターネット上に公開された。
○Kinect for Windows SDKベータ版の発表と登場について
2011年4月13日、マイクロソフト社のイベント「MIX11」において「Kinect for Windows SDKベータ版が2011年春の終り(夏前)に出る」とアナウンスされた。このSDKが、「Kinect for Windows SDK from Microsoft Research」で、2011年6月17日にリリースされた。
今回は、このKinect for Windows SDKベータ版を紹介していく。
●Kinect for Windows SDKベータ版の提供機能
Kinect for Windows SDKベータ版は、主にドライバとNUI(ナチュラル・ユーザー・インターフェイス:NIが行えるUI) APIを含むNUIライブラリを提供する。『Kinect for Windows SDKベータ版プログラミング・ガイド(Programing Guide)』(英語)(以後、プログラミング・ガイド)には、以下のような図が示されている。
Kinectは、人の体の動き(=ジェスチャなど)や音声を認識するために、普通の動画を撮影できる「カメラ」(Image)、奥行きを計測できる「深度センサー」(Depth)、音を検知できる複数の「マイク・センサー」(Audio)という複数のセンサーで構成されている。Kinect for Windows SDKベータ版を導入すると、Kinectの各センサーからの情報(=イメージ、深度センサーのイメージ、音声)を、NUI API経由でアプリケーションから利用できるようになる。このNUIライブラリは、C++またはC#/VBなどの.NET言語から利用できる。
また、アプリケーションから各センサーの情報を取得する経路は、以下の図を参照されたい。
図の(1)部分は、Kinectのハードウェアを示している。このハードウェアはKinectの主要センサーとUSBハブで構成されており、1本のUSBケーブルでPCに接続される。
図の(2)部分は、Kinect for Windows用のドライバ(実質的にWindows 7専用)を示している。このドライバは、主に以下のような機能を備える。
- Kinectのマイク・センサー・アレイ(=横に4つ並んだ内蔵マイク・センサー群)をWindowsのAudio APIから使えるようにする機能
- カメラ・イメージと深度センサー・イメージをカメラ画像として流す機能
- PCに接続されたKinectデバイスを列挙する機能
図の(3)部分は、NUI APIを示す。ここを経由して、Kinectデバイスからのイメージ情報を受信する。
図の(4)部分は、Kinect Audio DMO(DirectX Media Object:COMベースのデータ・ストリーミング・コンポーネント)を示す。これにより、Kinectのマイク・センサー・アレイをサポートするように、Windows 7を拡張する。
以上のアーキテクチャにより、Kinect for Windows SDKベータ版を利用すると、アプリケーションはKinectのセンサー情報を、(Windows 7上のアプリケーションで)下記のようなAPIを経由してWindowsの流儀に従って取得できる。
(1)カメラ・イメージと深度センサー・のイメージは、(図の(3)部分の)NUI APIまたはDirectShowのAVキャプチャ機能などから
(2)音声(=オーディオ)は、(図の(5)部分の)Windows Core Audio APIとSpeech APIから
■Kinect for Windows SDKの特徴
Kinect for Windows SDKベータ版の特徴を列挙してみると、以下のようになる。ここでは、利点と欠点の両方を入り交えて記載しておく。
●[利点]Windows用のSDK
Kinect for Windows SDKベータ版以外のライブラリは、コミュニティによる実装部分が多少なりと存在していた。Kinect for Windows SDKは、Kinect提供元と同じマイクロソフトが提供者なので、「標準SDK」と捉えられる。
●[利点]Windows APIと親和性が高い
標準のWindows機能を経由してKinectセンサーの情報が取得できる。
●[欠点]Windows 7のみ対応
Windows 7より前のWindows OS(Windows XP/Vistaなど)や、そのほかのMacやLinuxなどでは動かない。Windows用のSDKだから仕方がないが、Kinect for Windows SDKベータ版以外のKinect用SDKでは、そのほかの環境でも利用できる場合がある。
●[利点]骨格情報を「ガッツボーズ」なしで取れる
別のKinect用SDKであるOpenNIでは、骨格情報を取得する際には、いわゆる「ガッツボーズ」を行う必要があったが、Kinect for Windows SDKベータ版は、その必要がない。骨格情報を取得するうえで、「ガッツボーズ」の制約がないので、すごく活用の幅が広がる。
●[欠点]ジェスチャ認識が(現時点では)ない
GUI部品をKinectで容易に操作するためには、手の動きなどをジェスチャとして認識する必要がある。その典型的なジェスチャにあらかじめSDK側で対応していると、より開発しやすい。例えば「手でスライダを操作する」や「バイバイの検出する」などのジェスチャが初めから用意されていれば、それらのジェスチャをGUIイベントに対応付けしやすい。
別のKinect用SDKのOpenNIには、ハンド・ジェスチャなどのミドルウェアを追加する機構がある。実際に追加すると、すぐにハンド・ジェスチャを認識できるようになり、それをGUIイベントと対応付けるのが容易であった。
しかし、Kinect for Windows SDKベータ版には、ジェスチャ認識が現在、提供されていない。その実現は、アプリケーション開発者の腕にかかっている(なお、第三者がオープンソースで開発したライブラリも出てきている。例:Kinect Toolkit ― CodePlex)。
以上が、Kinect for Windows SDKベータ版の概要である。次のページからは、実際にSDKをインストールして、その内容やサンプルを動かしてみる。
Copyright© Digital Advantage Corp. All Rights Reserved.