LoginSignup
18
26

【AI】YOLOv8をpython openCVでちゃちゃっと物体検出してみる

Last updated at Posted at 2023-06-24

__YOLO v8__をpython openCVでちゃちゃっと動かしてみる.png

YOLOv8を自分のコードで使ってみたい

タイトルの通り数あるYOLOモデルの最新バージョンであるv8をちゃちゃっと使ってみたかったのですが、記事を書いてる皆さんのレベルが高すぎて自分が理解できなかったり、わかりやすそうな記事が有料だったり、そもそも新しすぎて情報が出きってなかったりしてました。頑張って解読してちゃちゃっと物体検出ができるチュートリアルを書いてみます。
YOLOv8についての説明はもういいですよね?2023年6月時点のつよつよはやはやお手軽物体検出ライブラリです。ちゃちゃっと行きます。

前提

  • pythonを実行できる環境
  • pipが入っている
  • YOLO v8は下記YOLOと書きます。
  • これを目指します。↓
    image0.jpg

まずは学習モデルをダウンロードする。

公式が出してる学習モデルのファイル名はyolov8*.ptです。yolov8の後に続く接尾辞で検出精度や得意不得意が変わります。
リンクが切れてなければ公式gitHub下のちゃちゃっと動かせるモデルの直リン↓
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt
または公式ドキュメントからを開いてお好きなモデルをダウンロード
ultralytics YOLOv8 Docs
image.png

実行準備

新しいフォルダにダウンロードしたモデルファイル(YOLOv8*.pt)と物体検出させたい画像ファイルをぶち込み、yolo-test.pyを作成。インプットする画像の用意が無ければ下記の画像をbus.jpgで保存してください。
image.png
bus.jpg

インストール

YOLOopenCVをインストールします。openCVは無くても検出だけなら出来ますが入力する画像をごにょごにょしてYOLOで検出したり、検出された画像をopenCVでごにょごにょしたりすると思うのでopenCVを使うことを想定して書きます。(PILでも可能です。)

pip install ultralytics
pip install opencv-python

実行

このままyolo-test.pyに下記のコードを記述します。

yolo-test.py
from ultralytics import YOLO
import cv2

# モデル読み込み
model = YOLO("yolov8n.pt")

# 入力画像
results = model('bus.jpg',save=True) 

modelのyolov8n.ptbus.jpgはご自身の環境に合わせて変更してください。
実行するとrun\detect\predictというフォルダが生成され、入力されたファイル名と同じファイル名でラベルが上書きされた画像が出力されます。
image.png

model('bus.jpg',save=True) の第2引数以降は下記の通りに指定することができます。

引数 デフォルト 内容
save False 推論画像を保存
show False 推論画像を表示
save_txt False 結果をテキストファイルに保存
save_conf False スコアをテキストファイルに保存
save_crop False 検出された画像をクロップ
hide_labels False ラベルを非表示にする
hide_conf False スコアを非表示にする
vid_stride False 動画のフレームレートのストライド
line_thickness 3 バウンディングボックスの太さ
visualize False モデルの特徴を視覚化
augment False 拡張推論
agnostic_nms False クラスに依存しないNMS
retina_masks False 高解像度マスク(セグメンテーション時)

出力

次は試しに今作っているサービスの画像を使って且つsave_text=truesave_conf=Trueを追加してみます。クマ自体はstable diffutionに付け加えてもらいました。

yolo-test.py
from ultralytics import YOLO
import cv2

# モデル読み込み
model = YOLO("yolov8n.pt")

# 入力画像
results = model('bear.png', save=True, save_txt=True, save_conf=True) 

bear.png
2回目以降の実行はruns\detect\predict2というようにpredictの後に数字がされる形で出力フォルダが増えていきます。
今回はこれに加えてlabelsというフォルダも生成されました。
image.png
中を見るとスペース区切りで数字が羅列されているテキストファイルが入っています。
image.png
読み方は以下の通りです。

読み方
1番目がクラスID(検出された物体)
2番目が検出された物体を囲む矩形の左上のx座標
3番目が      〃      左上のy座標
4番目が      〃      右下のx座標
5番目が      〃      右下のy座標
最後が検出の精度です。

クラスIDは使用するモデルにより異なると思いますが、yolov8nの場合下記の様に特定の物体に紐づいています。今回の画像ではクラスIDが21となっているので下記のリストと照らし合わせて93%の精度で検出されたと分かりますね。

クラスID クラス名 日本語名
0 person
1 bicycle 自転車
2 car
3 motorcycle バイク
4 airplane 飛行機
5 bus バス
21 baer
79 toothbrush 歯ブラシ

他のIDも知りたい場合は下記の記事を参照してください。

動画

パスを.mp4などの動画を指定すれば簡単に検出してくれます。

まとめ

ここまで実行できればYOLOv8の入門は出来たのではないでしょうか。
他のモデルを使ったり、学習させてみるのもできれば面白そうですね。
お疲れ様でした。ではまた。

参考文献

18
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
26