ラベル RealSense の投稿を表示しています。 すべての投稿を表示
ラベル RealSense の投稿を表示しています。 すべての投稿を表示

2020-07-03

Python:RealsenseのDepthデータを16bit Grayscale Multi-Tiffで保存する

RealsenseのDepthデータを保存するには、
  1. Realsense Viewerで保存する
  2. 自前のプログラムで保存する
の2つの方法があります。前者については、Realsense Viewerの保存機能を利用することでROS-Bag形式で保存されるのですが、ファイルサイズがでかい。。。しかし、いつのまにかRealsense Viewerの保存オプションに圧縮というのがあって、それを使うと50%くらい圧縮してくれます。まあ、通常はこれをおすすめします。しかし、それでもでかいのでもっとファイルサイズを小さくできないか、、という後者の話が今日のネタです。

前提条件
今回の記事は、
  • Realsense ViewerでROS-Bagファイルとして保存しておく
  • そのROS-BagファイルをMulti-Tiffに変換する
という使い方を前提とします。本来であれば、リアルタイムにMulti-Tiffに変換できたらいいんですが、Pythonだとちょっと厳しい。。。フレームレートが半分以下になります。C#でマルチスレッドで処理すればいけそうですけど、暇な時にトライします(最近Pythonにどっぷりハマっているので、いつになるかは不明)

16bit Grayscale Multi-Tiffで保存する
いろいろ方法はあるのだと思いますが、今回は16bit Grayscale Multi-Tiffで保存する方法です。まあこれが一番ラクでしょう。Depthデータをそのまま放り込めばよくてしかも取り出しそのままでOK。
以下のサンプルプログラムの肝は
です。特に後者が大切です。この記事に限定する話ではないですが、これをFalseにしておかないと、非同期で処理が行われてしまい、フレームレートが落ちます。

画像の表示に注意
16bit Grayscale Multi-Tiffの画像は、
  • Windows10のフォトアプリ
  • ImageJ(オープンソースの画像処理系では有名なソフト)
などを利用することで表示できますが、個人的には後者がおすすめです。マウス操作で各ピクセルの画素値を表示してくれますので。なお、画像はほぼ真っ黒に見えると思います。その理由は、16bitだと0mm~65536mmの距離を記録できるわけですが、デプスデータは、せいぜい6000mmがMax。16bitの濃淡は表示される段階で8bitに変換されますので、ほぼ黒側(0側)に近いことになりますからね。目を凝らしてみると、黒の濃淡がわかるはずです。



2020-03-04

Python: RealsenseのRGBとデプスのカメラ映像をOpenCVを利用して表示する

おちラボではMicrosoft Kinectを利用したソフトウェア開発をしていますが、御存知の通りKinectは要求するマシンスペックが高いので、なかなか使いづらいというのがあります。単純にデプスカメラとして使うなら、IntelのRealSenseがオススメです。

SDKとライブラリのインストール
リンク先を見てもらえばわかりますが(特にpyrealsense2の方)、Windows環境では何も気にすることなくSDKをとってきて、ライブラリはpipでインストールできます。Macの場合、いろいろ手間がかかりますね。
なおSDKについては、旧ライブラリでは各種認識系のサンプルプログラムが掲載されていたようですが、2.0になってからはないようです。おそらく、認識系のやつはサードパーティの優秀なライブラリを使ってねということなんでしょう(OpenPoseとかOpenFaceとか)。

ソースコードとポイント
1. configの設定
ここでどのストリームを読み込むのかを設定します。解像度やフレームレートなどを決めますが、それ以外のパラメーターについてもconfigで設定するんだと思います。

2.開始後はループ処理で
pipelineクラスを呼び出してstart呼び出し後、ループでフレームを呼び出します。

3.フレームの変換
numpyのasanyarrayで配列変換。depthフレームの場合は、CV2.applyColorMapでカラーマップに変換

あとの処理は通常のOpenCVプログラミングの世界、、ということで思った以上に簡単です。C#でKinectのプログラムを書いたときは、もっと面倒だったような気がしますが。。。。
以下にサンプルを載せます。クリックで全表示です。