Intel RealSenseをMax OSやLinuxでも使える librealsense が公開されていました。公式のSDKではないようですが、Intel RealSense labの実験的プロジェクトということです。準公式くらいでしょうか(位置づけは不明です)。
2016/01/31更新:公式から「公式じゃないよ」とのアナウンス。
2015年にIntel RealSenseをMac OSやLiunxでも動かせるようにというアナウンスがあったので、それが実現した形です。もちろん、Windowsでも動かせます。
リポジトリの説明は「Cross-platform camera capture for Intel® RealSense™ F200, SR300 and R200」となっており、Intel RealSenseのF200、R200および今年発売予定の前面型SR300をクロスプラットフォームで動作させるライブラリになります。
ライセンスは「Apache License Version 2.0」とのことで利用については特に問題ないかと思います。
現状では、Color、IR、Depthストリームの取得のみで、公式SDKのようなコンピュータービジョン系の機能はありません。OpenCVやOpenGL、PCLとの連携はできるので、上の層はそれらを使うことがメインになるでしょうか。イメージとしてはOpenNIになります。
librealsense独自の機能として、1アプリケーションから複数のRealSenseセンサーにアクセスできます。現状で4台までの同時動作は確認しており、この4台でのF,Rの内訳はなんでも良いようです。
概要
リポジトリのREADMEから概要を抜き出します。
対応デバイス
- RealSense R200
- RealSense F200
- RealSense SR300
対応プラットフォーム
- Windows 8.1 (Visual Studio 2013 Update 5)
- Ubuntu 14.04.03 LTS x64 (GCC 4.9 toolchain)
- Mac OS X 10.7+ (Clang toolchain)
インストールについて
- Linux はV4L2(video4linux2) 経由でカーネルスペースからUVC デバイスとしてアクセスする
- Linux とMac OS X は libuvc (とlibusb)経由でユーザースペースから UVC デバイスとしてアクセスする
- Windows 8.1以降は Windows Media Foundation 経由でカーネルスペースから UVC デバイスとしてアクセスする
インストール手順はこちらを参照してください
librealsense/installation.md at master · IntelRealSense/librealsense · GitHub
Max OSとWindowsでビルド、実行しましたが、非常に簡単です。
Mac OSではlibusbとglfw3をインストールしたあとに、サンプルプロジェクトをXCodeでビルドすれば動きました。
Windowsについては、コードを取得してVisual Studioでビルドすれば、すぐに利用可能です(ドライバなどのインストールはおそらく不要です)。DCM(Depth Camera Manager)および公式のIntel RealSense SDKも不要です。
機能概要及びサンプルプロジェクト
プロジェクトを開くと次のような構成になっています。Libraryフォルダにある「realsense」がライブラリ本体になります。インタフェースはCおよびC++になってます。C APIが提供されているので、C#やUnityなどほかの言語や環境にも持って行きやすいかと思います。
最初は「C++ Tutorials」および「Examples」を見ればよいでしょう。
C++ TutorialsはColor、Depth、IRストリームの取得、表示および、PointCloud(点群)の取得、表示となっています。自分が知っている中では初めてAPIから直接PointCloudが取り出せるライブラリです(いままではDepthデータからCameraデータ(PointCloud)に変換していた)。
Examplesはlibrealsenseの機能紹介となっています。
cpp-alignimages
Color座標とDepth座標の位置合わせです。Depth座標にあわされたColorデータと、Color座標にあわされたDepthデータが表示されます。
cpp-capture
Color、Depth、IRデータの表示です。右下はF200では無表示、R200のIR画像が入ります(R200はIRのステレオのため)。
cpp-config-ui
Intel RealSenseカメラの設定を変更します。
面白いのがIRレーザーの強さを変えられます。0にするとレーザーが照射されなくなるので、Depthは取得できず、IR画像もほぼ黒くなります。
cpp-enumerate-devices
Intel RealSenseカメラの解像度とフレームレートを表示します。
cpp-headless
起動30フレーム後のColor、Depth、IRの画像をPNGファイルに保存します。
cpp-multicam
複数のIntel RealSenseセンサーを動かします。センサーの向きによっては、DepthデータがIRの干渉でうまく取れなくなるため、先ほどのIRレーザーの強さを変えることで複数台のセンサーからDepthデータを取り出せます。
cpp-pointcloud
PointCloud(点群)表示のサンプルです。マウスで回転させると立体的に表示されることがわかります。librealsenseではDepthデータからX,Y,Zの点群を取り出せます。そこにColorのRGBを合わせる方法は「cpp-tutorial-3-pointcloud」を参考にしたほうがよさそうです。こちらの色情報はOpenGLにテクスチャーとして渡しているようです。
cpp-restart
ストリームデータの再起動の方法を示します。
所感
Windows以外のMax OS、Linuxで動くこと、軽量なこと、インストールが簡単であることから、非常に楽しいライブラリです。SDKにない機能として、1アプリ複数センサーもできるので、これまで以上に利用の幅が広がります。
USB 3.0接続がネックですが、今年はUSB 3.0の搭載されたスヒックPCの予定もありますので、バスパワーで動作するRealSenseセンサーとともにバッテリーで動作するDepthセンサー環境ができるようになるでしょう。
手軽かつ、いまの公式SDK環境に干渉することもないので、Intel RealSenseセンサーを持っている人は、一度試してみることをオススメします。
- WindowsのNUCにF200を4台接続して動かした(USB 3.0のハブに4つつながってます)
- R200の画角に広げて、カメラのデータをつなげてみた