物体検出

システムにはお菓子の物体検出をするAIが入っています。

infer.pyを実行すると、AIが検出した物体の位置を青い点で表示します。

python infer.py
_images/ai.png

最初のinfer.pyの実行では、モデルファイルをダウンロードするので時間がかかります。

プログラムを終了するには、カメラ表示のウインドウで q キーを入力します。

AIの学習

物体検出にはNVIDIAのODTK( Object Detection Toolkit )を使いました。

Detecting Rotated Objects Using the NVIDIA Object Detection Toolkit

ODTKを使った理由は物体の回転の角度まで取得できるからです。

回転した物体をつかむにはハンドの手首を回転させる必要があるのですが、この機能は未実装です。

OpenVINO

NVIDIAのGPUがないパソコンでも推論ができるように、ONNXとOpenVINOを使っています。

手順は以下のとおりです。

1. 学習済みのモデルをONNX形式のモデルに変換します。 1. ONNX形式のモデルをOpenVINOで読み込んで、推論を実行します。

OpenVINOはIntel製の無料のツールで、CPUに内臓されているGPUを使って計算をします。

独自の物体検出モデルの組み込み

物体検出はinfer.pyのinfer_imgでしています。

def infer_img(img_que : Queue, result_que : Queue):

    while True:
        # キューから画像を受け取る。
        bmp = img_que.get()

        # 物体検出を実行

        # 物体の中心のXY座標をキューに入れる。
        result_que.put((center_x, center_y))

infer_imgは別プロセスで実行され、img_queで画像を受け取り、result_queに結果を返します。

独自の物体検出モデルを組み込む場合はinfer_imgを書き換えてください。

画像アノテーション

ディープラーニングでは大量の学習データが必要ですが、学習データを手作業で作るのは大変なので、自動的に学習データを作成するツールを作りました。

詳細は以下のQiitaの記事をご覧ください。

物体検出の学習データを自動生成