深度センサーXtion2を使って、深度センサーを使用するための準備と設定についてご紹介します。深度センサーは人や物を立体として捉えることで、身振り手振りだけでゲームソフトを操作したり、顔認証システムや人数の検出など、様々な場面、分野での活用が広がっています。

チャレンジ&ナレッジ最終更新日: 20181211

深度センサー Xtion2を使ってみよう

  • このエントリーをはてなブックマークに追加

みなさんは深度センサーという言葉をご存知でしょうか?「深度センサー」という名前は知らなくても、数年前にゲーム機Xbox 360の周辺機器として登場した「Kinect(キネクト)」をご存知の方はいるかもしれません。深度センサーは人や物を立体として捉えることで、身振り手振りだけでゲームソフトを操作したり、顔認証システムや人数の検出など、様々な場面、分野での活用が広がっています。 今回はASUSTeK COMPUTER INC.の深度センサー「Xtion2」を使って、深度センサーを使用するための準備と設定についてご紹介します。

深度センサーとは

深度センサーは3Dセンサ―等とも呼ばれ、人や物などの対象物の形状を立体として捉えることができるセンサーです。

深度センサーにはいくつかの方式がありますが、今回使用するASUSの「Xtion2」では、下図のように赤外線などのレーザー光を対象物に当て、はね返ってくるまでの時間で対象物との距離を計測します。
近くにあるものは短い時間で、遠くにあるものは長い時間で光がはね返ってくるため、物同士の位置関係を把握することができます。

対象物に当てたレーザー光がはね返ってくる時間で距離を計測する対象物に当てたレーザー光がはね返ってくる時間で距離を計測する

また、レーザー光を細かく位置を変えて対象物に当てることで、どの部分が膨らんでいて、どの部分が凹んでいるかも測定することができ、測定を繰り返し行うことで物の形状や動きを把握することが可能となります。

RGBカメラによる画像(右)と深度センサーによる画像(左)RGBカメラによる画像(右)と深度センサーによる画像(左)

冒頭で触れたMicrosoftの「Kinect」などでは、この深度センサーを用いて、コントローラーを持たなくても身振りだけでゲームを楽しんだり、パソコンのソフトウェアの操作を可能にするプログラムが開発されていました(下図)。

Kinectを用いたコンテンツ例Kinectを用いたコンテンツ例

今回使用するXtion2は2017年に登場したASUSの深度センサーで、深度センサーを活用したソフトウェア開発で用いられている「OpenNI」というオープンソースのライブラリに対応していたり、USBポートからの電力供給のみで動作するなど、開発者にとっても扱いやすい小型の深度センサーです。

今回使用するASUSの深度センサー「Xtion2」今回使用するASUSの深度センサー「Xtion2」

深度センサーを使ってみよう

それでは早速、Xtion2をつないで深度センサーを使ってみましょう。
まず、Xtion2に同梱されているCD-ROMを読み込むか、Xtion2のサポートページへ接続し、右下の「OSを選択してください」から使用しているパソコンのOSを選択し、表示された枠内の「ダウンロード」ボタンをクリックします。

“Xtion 2 Driver & Tools | 3Dセンサー | ASUS 日本”. ASUSTeK Computer Inc.
https://www.asus.com/jp/3D-Sensor/Xtion-2/HelpDesk_Download/

OSを選択後、「ダウンロード」ボタンをクリックOSを選択後、「ダウンロード」ボタンをクリック

ダウンロードしたファイルを解凍し、「OpenNI-2.2_x64 with Xtion2 .msi」をダブルクリックしてインストールを開始します。

「OpenNI-2.2_x64 with Xtion2 .msi」をダブルクリックしてインストールを開始「OpenNI-2.2_x64 with Xtion2 .msi」をダブルクリックしてインストールを開始

画面の指示に沿ってインストールを進めると、最後に再起動するかどうか確認するダイアログが表示されますので、「Yes」をクリックします。

再起動後、Xtion2をパソコンに接続し、デスクトップの「ASUS_NIViewer2_(x64)」をダブルクリックして開きます。

デスクトップの「ASUS_NIViewer2_(x64)」をダブルクリックして開くデスクトップの「ASUS_NIViewer2_(x64)」をダブルクリックして開く

プログラムの読み込み中のような画面が表示されたあと、下図のような画面が表示されます。

「OpenNI-2.2_x64 with Xtion2 .msi」

表示されたのは、Xtion2開発元のASUSが作成したサンプルプログラムが実行された画面で、画面の右側がRGBカメラ(通常のWebカメラと同様の仕組み)で捉えた画像、左側が深度センサーの情報を元に生成された画像です。

RGBカメラの画像は人間の見た目に近い画像になっていますが、深度センサーのように距離を測定しているわけではないので、画面上の見た目のまま、2次元(平面)の画像として処理されています。
一方、深度センサーの画像は距離と形状を測定しており、データ上も立体物として処理をされています。色や質感は処理されないので、純粋に撮影されたものの位置と形だけが見えている状態の画像になっています。

なお、RGBカメラと深度センサー部分は先の写真の通りXtion2の前面に横並びに取り付けられており、カメラの中に写り込む範囲も若干異なるため、上図の通り画面上に表示される領域も若干異なるものになっています。

深度センサーを使った開発のための準備と設定

サンプルプログラムを動かすことで、実際に深度センサーが捉えた対象物の画像を見ることができましたが、深度センサーの値の処理の仕方により、例えば通常のカメラでは背景と人の判別が難しいような暗い部屋で人だけを抽出したり、空間の中に何人の人がいるかをカウントするなど、様々な処理が可能となります。

OpenNI / OpenNI 2とは

Xtion2の深度センサーを使用したプログラムの開発には、「OpenNI」というライブラリを用います。
OpenNIはKinectに搭載されている深度センサーを開発した会社などが中心となって開発が進められ、オープンソースのソフトウェアとして公開されています。現在はプログラム間のデータのやり取りに関する仕様が整理された「OpenNI 2」が登場しており、Xtion2もこのOpenNI 2 に対応しています。

Visual Studio Communityのインストール

Open NI 2は開発言語としてC、C++、JAVAをサポートしています。これらの言語を用いた開発を行う環境として、今回は「Visual Studio Community 2017」を用いる場合の手順をご紹介します。

※Visual Studio Communityの使用条件に関しては下記をよく確認してください
“マイクロソフト ソフトウェア ライセンス条項MICROSOFT VISUAL STUDIO COMMUNITY 2017”. Microsoft. 2017.
https://visualstudio.microsoft.com/ja/license-terms/mlt553321/

Visual Studio Communityをインストールするには、下記のサイトにアクセスして画面左の「Visual Studio IDE」ボタンにマウスポインタを乗せると現れる「Community 2017」をクリックして、ダウンロードを開始します。

“Visual Studio IDE、コード エディター、VSTS、App Center – Visual Studio” . Microsoft.
https://visualstudio.microsoft.com/ja/

上図赤枠「Community 2017」をクリックしてダウンロードを開始する上図赤枠「Community 2017」をクリックしてダウンロードを開始する

ダウンロードしたファイルをダブルクリックします。

ダウンロードしたファイルをダブルクリックダウンロードしたファイルをダブルクリック

途中で「このアプリがデバイスに変更を加えることを許可しますか?」というダイアログが表示された場合は「はい」をクリック、その後「Visual Studio Installer」の起動画面が表示されるので「続行」をクリックすると、インストールが始まります。

上図の画面が表示されたら「はい」をクリック上図の画面が表示されたら「はい」をクリック

Visual Studio Installer起動画面で「続行」をクリックVisual Studio Installer起動画面で「続行」をクリック

インストール中の画面インストール中の画面

インストールの途中で、下図のような画面が表示されます。「ワークロード」とは、開発の用途や使用する言語に合わせて必要な機能をまとめたものですが、今回はOpenNIがサポートするC++を利用できるよう、「C++によるデスクトップ開発」右上のチェックボックスをオンにして、右下「インストール」ボタンをクリックします。

「C++によるデスクトップ開発」を選択して「インストール」ボタンをクリック「C++によるデスクトップ開発」を選択して「インストール」ボタンをクリック

インストールが進むと、下図のようなサインインを促す画面が表示されますので、「サインイン」ボタンをクリックし、画面の指示に従ってMicrosoftアカウントの情報を入力し、ログインします。

「サインイン」をクリックしてMicrosoftアカウントでログイン「サインイン」をクリックしてMicrosoftアカウントでログイン

ログインに成功すると「準備しています。」という画面に切り替わり、準備が完了すると下図の画面が表示されます。画面の配色テーマを切り替えたい場合は選択して右下「Visual Studioの開始」をクリックします。

画面の配色テーマを切り替えたい場合は選択して「Visual Studioの開始」をクリック画面の配色テーマを切り替えたい場合は選択して「Visual Studioの開始」をクリック

サンプルコードを開いて実行してみよう

Visual Studioが起動してスタートページが表示されたら、「ファイル>開く(O)>プロジェクト/ソリューション(P)…」をクリックします。

スタートページで「ファイル>開く(O)>プロジェクト/ソリューション(P)…」をクリックスタートページで「ファイル>開く(O)>プロジェクト/ソリューション(P)…」をクリック

「プロジェクトを開く」ダイアログで「C:¥Program Files¥OpenNI2¥Samples¥SimpleViewer」内にある「SimpleViewer.vcxproj」を選択し、「開く(O)」をクリックします。

「SimpleViewer.vcxproj」を選択し、「開く(O)」をクリック「SimpleViewer.vcxproj」を選択し、「開く(O)」をクリック

ファイルを開く途中で「アクセス許可を引き上げてアプリケーションを再起動しますか?」というダイアログが表示された場合は「異なる資格情報でこのアプリケーションを再起動」をクリックしてください。この場合、再度Visual Studioが起動した後に、あらためて上記「SimpleViewer.vcxproj」を開いてください。

上図ダイアログが表示されたら「異なる資格情報でのこのアプリケーションを再起動」をクリック上図ダイアログが表示されたら「異なる資格情報でのこのアプリケーションを再起動」をクリック

再度「SimpleViewer.vcxproj」を開く際、「ソリューション操作の再ターゲット」ダイアログ(下図)が表示された場合は、「Windows SDKバージョン」を「10.xxxx」に設定してください。

上図ダイアログが表示されたら「異なる資格情報でのこのアプリケーションを再起動」をクリック上図ダイアログが表示された場合は「Windows SDKバージョン」を「10.xxxx」に設定

ファイルが開いたら、ウィンドウ上部のデバッグメニュー下にあるプルダウンメニューを「x86」から「x64」に変更してください。

画面上部のプルダウンメニュー「x86」を「x64」に変更する画面上部のプルダウンメニュー「x86」を「x64」に変更する

続いて、画面端にある「ソリューションエクスプローラ」ウィンドウ内の「SimpleViewer」を右クリックして、「プロパティ」をクリックしてください。

「SimpleViewer」を右クリック後、「プロパティ」をクリック「SimpleViewer」を右クリック後、「プロパティ」をクリック

開いたプロパティページの左列にある「VC++ディレクトリ」をクリックし、右側に表示された「インクルードディレクトリ」をクリックすると、行の右端に「∨」ボタンが表示されます。これをクリックして表示される「<編集…>」をクリックして編集画面に入ります。

SimpleViewer
「VC++ディレクトリ」をクリックして表示される「インクルードディレクトリ」の編集画面に入る

「インクルードディレクトリ」の編集画面上部にある空白行をダブルクリックすると右端に「…」と書かれたボタンが表示されるので、ボタンをクリックして「C:¥Program Files¥OpenNI2¥Include」ディレクトリを選択し、「フォルダーの選択」ボタンをクリックします。

「インクルードディレクトリ」画面上部の空白行をダブルクリックして「…」ボタンをクリック「インクルードディレクトリ」画面上部の空白行をダブルクリックして「…」ボタンをクリック

「ディレクトリの選択」画面で「C:¥Program Files¥OpenNI2¥Include」ディレクトリを選択
「ディレクトリの選択」画面で「C:¥Program Files¥OpenNI2¥Include」ディレクトリを選択

同様に「ライブラリディレクトリ」に「C:¥Program Files¥OpenNI2¥Lib」を設定すると、下図のような設定になります。

インクルードディレクトリとライブラリディレクトリの設定を終えた状態
インクルードディレクトリとライブラリディレクトリの設定を終えた状態

続いて左カラムの「C/C++」をクリックし、「警告をエラーとして扱う」をクリックし、「いいえ」に設定を変更し、右下「OK」ボタンを押してプロパティページを閉じます。

「C/C++」の「警告をエラーとして扱う」を「いいえ」に変更「C/C++」の「警告をエラーとして扱う」を「いいえ」に変更

設定を終えたら、右下「OK」を押してプロパティページを閉じる設定を終えたら、右下「OK」を押してプロパティページを閉じる

設定を終えたところで、画面上部の「ローカルWindowsデバッガー」をクリックしてプログラムを実行しようとすると、画面の左上あたりに一瞬黒いウィンドウが表示されますがすぐに消えてしまいます。
これはプログラムの実行に必要なファイルがプログラム側で指定している場所になく、プログラムがすぐに終了してしまったためです。

実行画面上部の「ローカルWindowsデバッガー」をクリックしてプログラムを実行しようとするが…

実行すぐに終了してしまった

必要なファイルは「C:¥Program Files¥OpenNI2¥Tools¥OpenNI2」内「drivers」フォルダにありますので、「drivers」フォルダごと「C:¥Program Files¥OpenNI2¥Samples¥SimpleViewer¥x64¥Debug¥OpenNI2」内にコピーします。
すでに「C:¥Program Files¥OpenNI2¥Samples¥SimpleViewer¥x64¥Debug¥OpenNI2」内に「drivers」フォルダがあれば削除した上でコピーしてください。
逆に「C:¥Program Files¥OpenNI2¥Samples¥SimpleViewer¥x64¥Debug」内に「OpenNI2」フォルダがない場合は、「C:¥Program Files¥OpenNI2¥Tools」フォルダ内にある「OpenNI2」フォルダを「C:¥Program Files¥OpenNI2¥Samples¥SimpleViewer¥x64¥Debug」内にコピーしてください(下図)。

実行「C:¥Program Files¥OpenNI2¥Tools」フォルダ内にある「OpenNI2」フォルダを「C:¥Program Files¥OpenNI2¥Samples¥SimpleViewer¥x64¥Debug」内にコピー

実行コピー後の状態

でコピーを終えたら、もう一度Visual Studioに戻って、「ローカルWindowsデバッガー」をクリックしてみます。
今度は先ほど一瞬で消えてしまった黒いウィンドウに「ASUS Xtion2 RGB Camera Detected…」等の文字が表示されていき、処理が終わると最初にサンプルプログラムを実行したときと同様に、深度センサーの計測値をもとにした対象物の画像が表示されます。

処理中の画面処理中の画面

「ソリューション エクスプローラー」で「main.cpp」をクリックすると、コードの中身が表示されたサンプルプログラムを起動した時と同様の画像が表示された

なお、先ほど設定を行った「ソリューション エクスプローラー」ウィンドウ内「SimpleViewer」をクリックすると表示される「main.cpp」や「Viewer.cpp」をクリックすると、プログラムのコードの中身が表示され、編集することも可能です。

「ソリューション エクスプローラー」で「main.cpp」をクリックすると、コードの中身が表示された「ソリューション エクスプローラー」で「main.cpp」をクリックすると、コードの中身が表示された

OpenNIに同梱されているサンプルコードの種類

ここまで、OpenNIのサンプルプログラムである「SimpleViewer」について見てきましたが、他にもいくつかのサンプルコードが「C:¥Program Files¥OpenNI2¥Samples」内に同梱されています。
それぞれのサンプルコードの名称と内容について下記に挙げておきます。

SimpleViewer
 深度データ、カメラデータを表示する(キーボードの「1」~「3」で切り替える)
 (使用技術:OpenNI、OpenGL)

SimpleViewer.java
 Javaで書かれたSimpleViewer
 (使用技術:OpenNI、Java)

SimpleRead
 深度データをストリームで取得して、中心点の値をCUIで表示する
 (使用技術:OpenNI)

MultipleSteramRead
 深度データとカメラデータを同時にストリームで取得して、中心点のそれぞれの値をCUIで表示する
 (使用技術:OpenNI)

MultiDepthViewer
 2台のデバイスの深度データを可視化して表示する
 (使用技術:OpenNI)

EventBasedRead
 デバイスの接続・切断等のステータス変更イベント、深度データの更新イベントを取得する
 (使用技術:OpenNI)

MWClosestPoint
 深度データの中から最もデバイスに近い座標(X、Y、奥行き)を探すクラス
 (使用技術:OpenNI)

MWClosestPointApp
 MWClosestPointで作ったクラスを使って、最もデバイスに近い座標の値をCUIで表示する
 (使用技術:OpenNI)

ClosestPointViewer
 深度データを表示し、最もデバイスに近い点を赤色で表示する
 (使用技術:OpenNI、OpenGL)

まとめ

今回はASUSの深度センサー「Xtion2」をパソコンにつないで、OpenNIのサンプルプログラムを動かしたり、プログラムのコードをVisual Studio上で開いて処理を実行する手順についてご紹介しました。

最初にお伝えしたとおり、OpenNIは深度センサーを用いたプログラムを制作する際に幅広く用いられているライブラリですので、上記サンプルコードの他にも様々なコードや情報がインターネット上で公開されています。

この記事を参考に基本設定ができたら、様々なコードを実際に動かしてみたり、オリジナルのプログラムづくりにも挑戦してみてください!

ライタープロフィール 合同会社 4D Pocket
石郷祐介

大学卒業後、公設研究機関勤務を経て、「情報科学芸術大学院大学[IAMAS]」に入学。
専門学校講師を経て、企業の研究開発をコンセプトから開発まで支援する「合同会社4D Pocket」代表、エンジニアを養成するフリースクール「一般社団法人HOPTER TECH SCHOOL」代表理事、「名古屋文理大学」及び「名古屋造形大学」非常勤講師。

記事を
シェア