Armadilloフォーラム

デモアプリケーションランチャのねじ検知ソフトの検知対象に名称ラベルを付与したい

yuki.shigefuji

2023年2月7日 19時57分

お世話になっております。

表題の通りデモアプリケーション内のねじ検知ソフトで、ねじを検知した際のバウンディングボックスに名称を付与したく思っています。
screw_detection.pyをviで編集するつもりなのですが検出時どの部分でボックスを表示しているのでしょうか。
またラベルを付与する際classに合わせて検出できればと思っていますがそちらを実施したことがあればご教授お願いいたします。

コメント

at_akihito.irie

2023年2月8日 10時42分

入江です。

> screw_detection.pyをviで編集するつもりなのですが検出時どの部分でボックスを表示しているのでしょうか。
> またラベルを付与する際classに合わせて検出できればと思っていますがそちらを実施したことがあればご教授お願いいたします。

/usr/share/armadillo-demo-experience/AI-demo/screw_detection/screw_detection.py の 56行目

boxes, scores, class_names, pred_time = self.infer_result

にて、推論結果を取得しています。

boxes、scores、class_namesは、検出した物体の個数の要素数を持つリストです。

例えば、
boxes[0]は1個目に検出した物体のバウンディングボックスの左上の座標(x1, y1)と右下の座標(x2, y2)をもつリストです。

print(boxes[0])
[50, 25, 100, 50] # [x1, y1, x2, y2]の形式でboxの座標を示します。

これを数行後のcv2.rectangleで描画しています。

scores[0]は1個目に検出した物体の確度(0~1)です。

print(scores[0])
0.969

class_names[0]は1個目に検出した物体が何であるかを表す文字列です。

print(class_names[0])
"screw"

そのため、変数class_namesを名称ラベルとして描画するといいと思います。
推論モデルからの出力は、0始まりのインデックス番号でどの物体を検出したかが返ってきますが、
yolov5_tflite_inference.py内で、インデックス番号→文字列に変換して出力しています。
インデックス番号と文字列は、/usr/share/armadillo-demo-experience/AI-demo/screw_detection/class_names.txt
の行番号(0始まり)と対応しています。

ネジ検出デモでは検出する物体はネジのみなので、class_names.txtの中身は1行で「screw」のみです。
そのため、このデモでネジを検出すると推論モデルから得られるインデックス番号は0になり、class_names.txt
に記されている0個目の物「screw」に変換されて返ってきます。

ちなみに、このclass_names.txtは、YOLOv5で転移学習する際に生成されるファイルです。