忘年会続きの師走、aptpod Advent Calendar 2018の20日目。今回で4記事目(笑)とまあまあ頑張ったほうなのですが、実は今回の記事が一番書きたかったネタです
深度カメラ「intel RealSense D435i」とは
深度カメラとは、映像だけでなく物体までの奥行きがセンサーで検出できるカメラ
です。有名所でいうとKinectも深度カメラの一つです。ですがKinectは2017年11月に生産終了となり(記事「米マイクロソフトがKinectの生産を終了。販売分についてはサポート継続」)、Amazonでも定価よりも高い価格で販売されていたりと世の中から確実に数を減らしています。
Kinectの次はどの深度カメラがいいのか? と世の中がザワザワしている中で、新たな選択肢としてintel RealSenseが候補として上がってきました。Kinectの生みの親MicrosoftもKinectのSDKページで「開発者の間では Kinect ハードウェアからの移行が進んでいるため、Microsoft では、開発者の皆様に Intel RealSense デプス カメラを検討することをお勧めしています。
」とおすすめしているほどです。
intel RealSenseにも様々なモデルがあるのですが、2018年11月13日に発表されたD435i
に心奪われ、酔った勢いでポチりました(後悔はしていない)。惹かれたポイントとしては、IMU(慣性計測ユニット)が初めて搭載された
ことです。これにより、元々の物体までの奥行きに加え、カメラのピッチ、ヨー、ロールの回転を計測できるようになりました。
※intel RealSense D432iはUSB3.0搭載の端末が対象です
そんなintel RealSense D435iを、JavaScript(Node.js)でアクセスできるようになるまでの流れをまとめました(ハマったところがありすぎた...特にWindows...)。
※この記事ではソースコードなどの詳細な解説は含みません。いろいろ試してみてノウハウが貯まってきたら別途記事書きます!
▲Windows10でIntel® RealSense™ Viewerを試した様子
まずは接続確認したい
せっかく手元にあるので1秒でも早く映像出したい! 手元の端末がWindowsでしたら、GitHubページで公開されているアプリ「Intel® RealSense™ Viewer」をダンロードして確認できます。macOSの場合はSDKをダウンロードして手元でビルドする必要があります。
執筆時点(2018/12/20)では、macOS(Mojave 10.14.2)でうまくビルドできませんでした... ですが、Node.jsから試すとサンプルは動作したのでこのまま突き進んじゃいます... この件は引き続き調査します...
Node.jsでアクセス!
Node.jsからintel RealSenseへアクセスするためにはWrapperを使います。Node.jsの他にもPythonやUnity、Unreal Engine 4など様々なWrapperが用意されています。
Node.jsのWrapperを使ってintel RealSenseへアクセスする方法をmacOS、Windowsの環境で紹介します。
- macOS Mojave 10.14.2
- Windows 10
執筆時点(2018/12/20)でWindows 10でうまくサンプルが動かず... ライブラリのダウンロードまではうまくいったので情報は残しておきます... この件も引き続き調査します...
macOS
ビルド環境を整える
XCode 6.0以上とHomebrewを端末にインストールし、次のコマンドで必要なパッケージをインストールします。
brew install libusb pkg-config
brew install homebrew/versions/glfw3
brew install cmake
npm install -g jsdoc
node-librealsenseをダウンロード
作業するフォルダーを任意の場所に用意し、次のコマンドを実行します(npm init
などでpackage.json
は用意していてください)。同時にSDKもビルドされるので少々時間がかかります。
npm install --save node-librealsense
サンプルを動かす
node_modules/node-librealsense/examples/
以下にサンプルファイルが格納されているので深度データをキャプチャするサンプル「nodejs-save-to-disk.js」を試してみます。
cd node_modules/node-librealsense/examples
npm install
node nodejs-save-to-disk.js
▲こんな画像が生成されたら成功です!
APIのドキュメント
node-librealsenseのダウンロード時に、node_modules/node-librealsense/docs/
以下にドキュメントが生成されます。
Windows
ビルド環境を整える
Python2.7系をインストール
Python 2.7.15のダウンロードページで、32bitならWindows x86 MSI installer
、64bitならWindows x86-64 MSI installer
をダウンロードする。ここでのハマりポイントは、3系ではなく2.7系をインストールするということです。インストール時にPATHも通すのを忘れずに。
▲Add python.exe to Path
を忘れずにチェック
Visual Studio 2017 Communityをインストール
Visual Studio 2017 CommunityをインストールしPATHを通します。
※システムの詳細設定 > 詳細設定 > 環境変数 > システム環境変数 > Path
へC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin
を追加します
CMakeをインストール
インストール時にAdd CMake to the system PATH for all users
かAdd CMake to the system PATH for the current user
を選んでインストールします。
必要なパッケージをインストール
npm install -g node-gyp
npm install -g jsdoc
node-librealsenseをダウンロード
作業するフォルダーを任意の場所に用意し、次のコマンドを実行します(npm init
などでpackage.json
は用意していてください)。同時にSDKもビルドされるので少々時間がかかります。
npm install --save node-librealsense
サンプルを動かす
ここから怪しい空気に...
node_modules/node-librealsense/examples/
以下にサンプルファイルが格納されているので深度データをキャプチャするサンプル「nodejs-save-to-disk.js」を試してみます。
cd node_modules/node-librealsense/examples
npm install
npm install
実行時に脆弱性があると怒られた...
audited 237 packages in 1.415s
found 6 vulnerabilities (5 moderate, 1 high)
run `npm audit fix` to fix them, or `npm audit` for details
次のコマンドを実行して脆弱性解消
npm audit fix
サンプルを実行!
node nodejs-save-to-disk.js
ん? エラー...
Error: Unrecoverable! error native function rs2_pipeline_start: No device connected
検索したりいろいろ試行錯誤しましたが解消されることはありませんでした...悔しい
Node.jsでやってみたいならmacOSが今の所よさそう...
残念ながらWindowsにてサンプルがうまく動かないという悲しい結果になりました... Node.jsからintel RealSense D435iへアクセスしたいときは今の所macOSがよさそうです... 引き続き調査しますので、解決でき次第本記事を更新します。Unityなどの他のWrapperで試すとうまくいくのかな...?
参考URL
どなたかご存知の方いらっしゃいましたら...
macOS(Mojave 10.14.2)でうまくビルドできませんでした...
Node.jsのWrapperではなく本体のintel RealSense SDK2を直接ビルドしてViewerを試してみたかったのですが、XCodeで次のようなエラーが出てしまいビルドを断念しました... 解決方法をご存知の方がいらっしゃいましたらご教示いただけると嬉しいです...
Windows 10でうまくサンプルが動かず...
今回の一番悔しい思い出... エラーを見た感じだとNode.jsからうまくintel RealSense D435iへアクセスできていないようです。あまり情報がなく悔しい...
Error: Unrecoverable! error native function rs2_pipeline_start: No device connected