第四部:DepthAI APIを試してみた(深度ストリーム編)

開発元のLuxonis社から公開されている、DepthAI APIのPython用テストプログラムの使い方を、事例を使って紹介いたします。

OpenCV AI KIT (以下OAK)をインストールしたWindow10を使い、デモ用プログラムでどんなことができるのかを試してみました。今回は【深度ストリーム編】です。

作業を行った環境

  • Windows 10 Home 1903(18362.778)
  • Python 3.7.5
  • DepthAI API 0.4.0.0

動作対象デバイス

  • OAK-D

なお、実行したプログラムを終了するには、実行結果が表示されているウィンドウをアクティブにした状態でキーボードの「q」キーを押してください。

①3種類の深度マップを表示する

1-1)Depthモード

python depthai_demo.py -s depth

または、

python depthai_demo.py -s depth_raw

実行結果

大きなウィンドウ(ステレオカメラの解像度相当のサイズ)が表示され、景色の深度マップがリアルタイムで表示されました。

Depthモード
Depthモードで表示した深度ストリーム

疑似カラー処理には、OpenCVのカラーマップ「COLORMAP_HOT」が使われています。映像は部屋を縦方向に撮影したもので、右奥と左手前に棚があり一番奥の壁際にベットがある風景です。

1-2)Disparty Colorモード

python depthai_demo.py -s disparity_color

実行結果

こちらのモードを使用すると、深度マップがカラーで表示されます。

Disparty Colorモード
Disparty Colorモードで表示した深度ストリーム

Depthモードより、立体感があるため、目視で見る際にはこちらのモードの方が役立ちそうです。

1-3)Dispartyモード

python depthai_demo.py -s disparity

実行結果

今度はグレースケールのままで表示されました。疑似カラー処理が施されていない、オリジナルの深度マップのようです。

Dispartyモード
Dispartyモードで表示した深度ストリーム

3種類のモードが選択できるため、目的に応じて使い分ける事ができ便利です。

②複数のストリームを表示する

2-1)RGBカメラの映像と深度ストリームを同時に表示

python depthai_demo.py -s previewout depth

実行結果

このように、-s オプションを使用することで、RGBカメラの映像と深度ストリームを同時に表示することができます。

RGBカメラと深度ストリーム
左:深度ストリームと右:RGBカメラ映像

2-2)RGBカメラの映像に推論結果を表示

python depthai_demo.py -s metaout previewout depth

実行結果

metaoutストリームを追加すると、RGBカメラの映像に推論結果が表示されます。

RGBカメラ(推論あり)と深度ストリーム
左:深度ストリームと右:RGBカメラ映像(推論あり)

2-3)深度ストリーム側にも推論結果を表示

python depthai_demo.py -s metaout previewout depth -bb

実行結果

さらに-bb オプションを追加すると、深度ストリーム側にも推論結果が表示されます。

両方に推論結果が表示
深度ストリームとRGBカメラ映像の両方に推論結果が表示できる

2-4)推論結果だけを深度ストリームに表示

python depthai_demo.py -dd -s metaout depth -bb -ff

実行結果

previewoutストリームを省略したため、RGBカメラの映像は表示されなくなりました。しかし、-bb オプションによって、深度ストリーム側への推論結果の表示は維持されています。なお、今回は深度情報(XYZの座標情報)を無効にするための -dd オプションも追加しました。

深度ストリームに推論結果を表示
推論結果だけを深度ストリームに表示することもできる

ここでキーになるのが、-ff オプションです。このオプションがないと、推論の対象領域が画面全体になりませんので注意してください。-ff オプションについては、【】で説明していますので参考にしてください。

2-5)利用可能なストリームについて

ストリームの指定に使用できる名称には以下のものがあります。

利用可能なストリーム

  • metaout - Meta data results from the neural network
  • previewout - Small preview stream from the color camera
  • color - 4K color camera, biggest camera on the board with lens
  • left - Left grayscale camera (marked L or LEFT on the board)
  • right - Right grayscale camera (marked R or RIGHT on the board)
  • rectified_left - Rectified left camera frames
  • rectified_right - Rectified right camera frames
  • depth - Depth in uint16 (see here for the format)
  • disparity - Raw disparity
  • disparity_color - Disparity colorized on the host (JET colorized visualization of depth)
  • meta_d2h - Device die temperature (max temp should be < 105C)
  • object_tracker - Object tracker results

※previewout、color、left/right、rectified_left/rightはカメラ入力のストリームです。

※depth、disparity、disparity_colorは深度マップ用のストリームです。

2-6)ストリームごとのフレームレートを制限する方法

ホスト側の処理や、USB2接続での転送に負荷がかかったときなどに、ストリームのフレームレートを制限する必要があります。そのような場合、-s オプションを使用したストリーム指定の際、最大のフレームレートを設定することができます。なお、未指定の場合は30fps(最大フレームレート)となります。

python depthai_demo.py -s left,2 right,2 previewout depth,5

例えばこのようなコマンドを使用すると、最大フレームレートが、leftとrightで2fps、previewoutで30fps、depthで5fpsに制限されたストリームがそれぞれのウィンドウに表示されます。

ヘルプの表示

python depthai_demo.py -h

で、ヘルプコマンドで表示された内容がご覧いただけます。

参考記事