pip でインストールした yolov5 を使用します

今回使用するモジュール

画像(動画)データ

yolov5

1. model を読み込む

 load() でmodelをloadすることができます
 引数: 学習モデル, cpu or cuda
 学習モデルは 2021/10/18 の時点で10個ほどあります: 公式GitHub
 このmodelにはいくつかのメソッドが用意されているので気になった方は調べてみてください

.show(), .save(), .crop(), .pandas(), etc...

2. 画像から物体検出

 先程loadしたmodelに推論したい画像データを渡せば結果が返ってきます
 yolov5 に用意されている .show() メソッドは おそらく RGB なので画像の色が正しくありません

 yolov5 のモデルの戻り値には注意が必要で、戻り値をそのまま imshow() してもエラーになります
 画像データだけでなく、いろいろな情報も入っているので、model から返ってきた値をそのまま画像として保存したい場合には .display(render=True) を使用します
 .display(render=True) メソッドを使用した後、 imshow() の引数に渡す画像に .imgs[0] をすることで表示させることができます

3. カメラ入力でリアルタイム推論

 opencv の VideoCapture() を使用することでカメラの映像を読み込むことができます
 引数: PCに接続されているカメラの番号(ID)
 カメラの番号は、内蔵カメラが0、さらにUSBで追加のカメラを接続すると1のように基本的には0から順番に割り当てられているはずなので使いたいカメラになるまで順番に試してください(公式ドキュメントのチュートリアルによると-1の場合もあるとのこと)

4. 動画を推論

 カメラを使用するときと同じ VideoCapture() で動画の読み込みができます
 引数: 動画のパス
 cap.isOpened() は動画が読み込めた場合True、読み込めなかった場合Falseを返すメソッド

5. yolov5 で検出したオブジェクトの様々なデータを取得する

 yolov5モデルの戻り値に .xyxy[0] を使用すると取得することができます
 抽出される値は [xmin, ymin, xmax, ymax, confidence, class] となっています
 1つの画像内で検出したオブジェクトの数上記のリストが取得されます

[
    [xmin, ymin, xmax, ymax, confidence, class],
    [xmin, ymin, xmax, ymax, confidence, class],
    ...
    [xmin, ymin, xmax, ymax, confidence, class]
]

 xmin, ymin, xmax, ymax : バウンティボックス4点の座標
 confidence : 検出したオブジェクトがどれくらいの精度で合っているのか(%)
 class : 検出したオブジェクトの識別(0: person)


  yolov5 は Pytorch を使用していて torch.Tensor 型のデータになっています
 この torch.Tensor から要素を出得するには .item() というメソッドを使用することで取得できます
 ただし、単一の要素のみに使用でき、リスト等に使用するとエラーになります