yoloを使ってリアルタイムの物体検知を行います。
“yolo” とは、コンピュータビジョン(コンピュータが画像情報から必要な情報を取り出す技術)におけるアルゴリズムの名前です。
また、「You Only Look Once(一度しか見ない)」 の頭文字を取ったものになります。
今回はそのyoloの中でも2023年1月に発表されたv8を使用しますが、現在公開されている中で一番最新のものになります。
追記
2024年2月にyolov9が発表されました。
【2024年最新】yolov9をGoogle Colaboratory上で試してみた
Ultralytics YOLOv8 は、以前の YOLO バージョンの成功に基づいて構築され、パフォーマンスと柔軟性をさらに高めるための新機能と改善が導入された最先端の最先端 (SOTA) モデルです。 YOLOv8 は、高速、正確、そして使いやすいように設計されており、幅広いオブジェクトの検出と追跡、インスタンスのセグメンテーション、画像分類、姿勢推定タスクに最適です。
https://github.com/ultralytics/ultralytics より引用
動画で確認をしたい方はこちら
YouTubeに動画をあげています。動画で流れを確認したい方はこちらをご活用ください。
動作環境
Windows11(64bit)
anaconda
python3.9
anacondaの環境構築がまだの方はこちら
仮想環境を作成してログインする
Anaconda Promptを開いて仮想環境を作成し、ログインします。
yolov8を使う準備
作成した仮想環境でyolov8を使う準備をします。
cloneとはリポジトリ(ファイルやプログラムなどの保管場所)を自身のローカル環境にコピーすることをいいます。
実際に物体検出してみる
準備が完了したらWebカメラでリアルタイム検出を行います。
Pythonと入力して、Pythonを起動し以下のコードを実行します。
Webカメラが起動すれば成功です。
検出できる物体はGitHubに公開されています。
0: person
https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/coco128.yaml より引用
1: bicycle
2: car
3: motorcycle
4: airplane
5: bus
6: train
7: truck
8: boat
9: traffic light
10: fire hydrant
11: stop sign
12: parking meter
13: bench
14: bird
15: cat
16: dog
17: horse
18: sheep
19: cow
20: elephant
21: bear
22: zebra
23: giraffe
24: backpack
25: umbrella
26: handbag
27: tie
28: suitcase
29: frisbee
30: skis
31: snowboard
32: sports ball
33: kite
34: baseball bat
35: baseball glove
36: skateboard
37: surfboard
38: tennis racket
39: bottle
40: wine glass
41: cup
42: fork
43: knife
44: spoon
45: bowl
46: banana
47: apple
48: sandwich
49: orange
50: broccoli
51: carrot
52: hot dog
53: pizza
54: donut
55: cake
56: chair
57: couch
58: potted plant
59: bed
60: dining table
61: toilet
62: tv
63: laptop
64: mouse
65: remote
66: keyboard
67: cell phone
68: microwave
69: oven
70: toaster
71: sink
72: refrigerator
73: book
74: clock
75: vase
76: scissors
77: teddy bear
78: hair drier
79: toothbrush
リアルタイムの検出以外にも、画像ファイルや動画ファイルも指定することができます。
Source | Argument | Type | Notes |
image | 'image.jpg' | str or Path | Single image file. |
URL | ‘https://ultralytics.com/images/bus.jpg’ | str | URL to an image. |
screenshot | 'screen' | str | Capture a screenshot. |
PIL | Image.open('im.jpg') | PIL.Image | HWC format with RGB channels. |
OpenCV | cv2.imread('im.jpg') | np.ndarray | HWC format with BGR channels uint8 (0-255) . |
numpy | np.zeros((640,1280,3)) | np.ndarray | HWC format with BGR channels uint8 (0-255) . |
torch | torch.zeros(16,3,320,640) | torch.Tensor | BCHW format with RGB channels float32 (0.0-1.0) . |
CSV | 'sources.csv' | str or Path | CSV file containing paths to images, videos, or directories. |
video ✅ | 'video.mp4' | str or Path | Video file in formats like MP4, AVI, etc. |
directory ✅ | 'path/' | str or Path | Path to a directory containing images or videos. |
glob ✅ | 'path/*.jpg' | str | Glob pattern to match multiple files. Use the * character as a wildcard. |
YouTube ✅ | 'https://youtu.be/LNwODJXcvt4' | str | URL to a YouTube video. |
stream ✅ | 'rtsp://example.com/media.mp4' | str | URL for streaming protocols such as RTSP, RTMP, TCP, or an IP address. |
multi-stream ✅ | 'list.streams' | str or Path | *.streams text file with one stream URL per row, i.e. 8 streams will run at batch-size 8. |
検出数を出力することもできます。
検出結果はultralytics\runs\detect\predictに保存されています。
まとめ
yolov8でリアルタイムの物体検知を行いました。anacodaの環境構築が終わっていれば10分程度で実装可能かと思います。
混雑状況の把握や在庫管理などに活用できると思いますので是非お試しください。
【図解】Python 基礎文法の教科書を執筆しました!
本書は、これからPythonを学ぶ方や初学者の方でも無理なく勉強を進められるように、図解や画像を豊富に使って説明をしています。
内容はPythonチュートリアル(公式のドキュメント)に準拠しているため、理解必須の部分をこの1冊ですべて網羅することができます。
・エンジニアを目指したい
・プログラミングを1から習得したい
・リスキリングしてスキルアップしたい
そんな方は是非ご活用ください。
コメント