最近の3Dカメラだと、利用例がどれだけ充実しているかが重要なポイントになる。
・物体検出プログラムとの連携
・物体検出(セグメンテーション)
・物体検出結果の3Dとしての解釈
・camera座標とworld座標
・物体の追跡機能
・人のポーズ推定
・顔検出
・SLAMなどの機能
比較対象とするZED SDK の場合
body tracking/
camera control/
camera streaming/
depth sensing/
global localization/
object detection/
plane detection/
positional tracking/
recording/
spatial mapping/
tutorials/
今回の調査対象 OrbbecSDK
まずは、3Dカメラ自体としての性能が引き出せるSDKになっているのか。
いいSDKは満たすべき項目が似てくるから、
SDKの実装状況の差を見比べてみるとよい
github OrbbecSDK python binding
注意点:
-
orbbecは方式の異なる3Dカメラを開発しているので、提供されているスクリプトが、どの3Dカメラシリーズに対応しているのかに注意が必要。
-
recorder.py: Demonstrates how to record the depth and color streams to a file.
-
playback.py: Demonstrates how to play back recorded streams.
データの保存と再生がこのライブラリにも用意されている。
depth_color_sync_align_viewer.py:Demonstrates how to synchronize the depth and color streams.
ということは、工夫をしないとdepth 画像とcolor 画像の同期はとれていないのかもしれない。
それぞれのデータの取得時刻はどうなっているのか気になる。
IRのactive stereo画像とRGB画像では、カメラの取り付け位置の違い、画角の違いがある。
ある程度遠方ならば、対応点マッチングで視野角をそろえることはできる。
しかし、近距離側の場合、stereo のleft画像のカメラ位置とRGBのカメラ位置の違いが無視できなくなると予測する。
2024の時点では、まだStereolabs のZED SDK ほどの豊富なサンプルの状況にはなっていないようだ。
OrbbecSDK ROS2 wrapper
ROS2 に向けたコードもあるようだ。
私見(3Dカメラの選び方)
- ハードウェアやSDKのライブラリがEOLにならずに、最新のOS,C/C++、Pythonのバージョンに対してサポートし続けるのがいい。
- ユーザーが工夫しなくて使えるモジュールが多数あるものを使いたい。
- 複数の処理を実行した時に、マルチスレッドのことを考えてくれるとうれしい。
- 個々の検出処理のアルゴリズムは、今後も改定されていくことを念頭においた、インタフェースになっていてくれること。
自分のしたいことが既に十分に明らかになっている場合
必要な範囲の性能・機能が既にその製品とSDKが満たしている場合、複数の選択肢の中から、量産時の導入が簡単なものを選ぶということが可能だ。
使わない機能が実装されていないくても、なんら問題はない。
自分のしたいことに曖昧さが残っている場合
必須であるライブラリの他に、関連するアプリケーションが動作できることを気にしてよいと思う。
関連するアプリケーションが多い方が、使い方についての理解が進む。
そのため、例題が既に多数ある3Dカメラを選んで着手したほうがいい。
検討用の候補の購入はケチらないほうがいい
仕様上の性能と実際に達成される性能とは異なる
仕様上では明記されていない要因によって性能が制約されることは多い
例:フレームレートは出るが、遅延(レイテンシ)が大きい
例:使い方では、近距離側の測定不能領域が何10cmまで我慢できるのかを、作ってみて使ってみるまでわからないことがある。(画像計測技術の問題というよりも製品企画の問題である。)
画像計測屋のできることとは、〇〇 cm 以遠を計測できる△△という機種を見つけましたということ。
数100ドルの価格帯で購入できる3Dカメラの場合、候補の購入はケチらないほうがいい
使ってみることで分かることは大きい。