第三部: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-1
  • OAK-D

デモ用プログラムの動作検証は、パソコンの画面に表示した写真を撮影するかたちで行いました。検出の精度についてはあくまで参考程度となりますのでご了承願います。なお、実行したプログラムを終了するには、実行結果が表示されているウィンドウをアクティブにした状態でキーボードの「q」キーを押してください。

①DepthAIの標準モデル使って物体を検出する

1-1)オプションを指定しないで実行

まずは何もオプションを使用せずにコマンドを実行してます。これにより、RGBカメラの映像に対し標準モデルでの物体検出が行われます。

python depthai_demo.py

実行結果

300px角ほどの小さなウィンドウが表示され、カメラ映像上に検出結果が境界ボックスで表示されました。

001
OAK-Dの検出結果画面
004
OAK-1の検出結果画面

OAK-1、OAK-Dの両方で試しましたが、検出精度や画質などに違いは見られませんでした。境界ボックスには分類されたモデル名と一致率、座標などが表示されるようです。検出結果が正しいかどうかは、あらためて別の機会に検証を行いたいと思います。

1-2)-dd オプションを追加

python depthai_demo.py -dd

実行結果

同じようにRGBカメラの映像と検出結果が表示されましたが、境界ボックスには物体の座標情報の表示がなくなっています。-dd オプションにより、深度計算が無効になっています。

001
-dd オプションなし
002
-dd オプションあり

単純に物体の分類だけを行いたい場合には便利なオプションです。

1-3)-ff オプションを追加

python depthai_demo.py -ff

実行結果

今回は、ウィンドウ自体のサイズはこれまでと同じですが、RGBカメラの映像が横方向に圧縮されています。-ff オプションにより、カメラのアスペクト比が維持されない代わりに、全視野を検出対象にすることができます。

001
-ff オプションなし
003
-ff オプションあり

表示される検出対象の縦横比が実際と異なる点が気にならなければ、このオプションを使用した方がより広範囲の検出ができるため便利です。

1-4)標準モデルで検出可能な物体について

標準搭載の検出モデルは、PASCAL VOC 2007のデータセットでトレーニングされたモデルということなので、以下の22項目を対象とした分類が可能です。

PASCAL VOC 2007で使用されているオブジェクトクラス

  • Person: person
  • Animal: bird, cat, cow, dog, horse, sheep
  • Vehicle: aeroplane, bicycle, boat, bus, car, motorbike, train
  • Indoor: bottle, chair, dining table, potted plant, sofa, tv/monitor
参考記事

②他のトレーニング済みモデルを使用する

DepthAIでは、標準の検出モデル以外に、OpenVINO™の事前トレーニング済みモデルが利用できます。

参考記事

2-1)運転支援のための車両検出

-cnn オプションを使って、検出モデル名を指定します。

python depthai_demo.py -dd -cnn vehicle-detection-adas-0002

実行結果

運転席から見た風景に近いものを用意し、OAK-1で撮影しました。やや大きめのウィンドウが表示され、RGBカメラの映像上にしっかり検出結果が境界ボックスで表示されました。

005
vehicle-detection-adas-0002:運転支援のための車両検出

遠くに見える小さな対向車や縦列駐車しているため、重なって写っている車も認識されています。

2-2)車両とナンバープレートの検出

同じ用に -cnn オプションを使って、検出モデル名を指定します。

python depthai_demo.py -dd -cnn vehicle-license-plate-detection-barrier-0106

実行結果

こちらの検出結果は、小さなウィンドウで表示されました。「ナンバープレート」の検出は単体で行われるのではなく、「車に取り付けられたナンバープレート」のようです。確認のため、ナンバープレートだけが写ったものものと比較してました。

006
ナンバープレートだけでは対象外
007
車に取り付けたられたナンバーはOK

紹介した写真以外でも色々試した結果、軽自動車の「黄色」や、広告写真用に取り付けられた「色付き」のダミープレートが比較的よく認識されました。憶測ですが、学習用に使用されたナンバープレートのサンプルが、日本のものと異なる派手なカラーリングが多い海外のものだったのかも知れません。

2-3)複数のモデルを組み合わせて使用する

-cnn オプションで1つ目の検出モデル、-cnn2 オプションで2つ目の検出モデルを指定することができます。1つ目のモデルでの検出領域が2つ目のモデルの検出対象の領域に使用されるため、2つのモデルの組み合わせはよく考えて使用する必要があります。

python depthai_demo.py -dd -cnn face-detection-adas-0001 -cnn2 facial-landmarks-35-adas-0002

こちらは、まず(運転支援用の)「顔認証」を行い、その結果を利用して「顔のランドマーク検出」を実行せるためのコマンドです。

実行結果

人物の写真を使って試したところ、このように「顔」の部分が境界ボックスで示され、その領域に対し「目、鼻、口、輪郭」のキーポイントのランドマーク座標が表示されています。

008
「顔認証」→「顔のランドマーク検出」の順で実行される

コード実行中、フレームレートが13fps程度まで落ちていましたが、特に気にならないレベルでした。また、複数の顔が認証された場合は、「一致率が最大の顔」に対しランドマーク検出が行われ、顔が全く認証されなかった場合は、ランドマーク検出も行われませんでした。

2-4)利用可能なトレーニング済みモデルについて

デモ用プログラムに含まれているOpenVINO事前トレーニング済みモデルは以下のとおりです。なお、OpenVINO事前トレーニングモデルの一部が、こちらのリポジトリからダウンロードできます。

デモ用プログラムで使用可能な検出モデル

  • age-gender-recognition-retail-0013
  • deeplabv3p_person
  • emotions-recognition-retail-0003 *
  • face-detection-adas-0001
  • face-detection-retail-0004
  • facial-landmarks-35-adas-0002 *
  • human-pose-estimation-0001
  • landmarks-regression-retail-0009 *
  • mobilenet-ssd
  • mobileNetV2-PoseEstimation
  • pedestrian-detection-adas-0002
  • person-detection-retail-0013
  • person-vehicle-bike-detection-crossroad-1016
  • tiny-yolo-v3
  • vehicle-detection-adas-0002
  • vehicle-license-plate-detection-barrier-0106
  • yolo-v3

注)*印のモデルのみが、-cnn2 オプションでも使用できます。

ヘルプの表示

python depthai_demo.py -h

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

参考記事