- Raspberry pi 5と各種カメラによってYOLOv8のリアルタイム推論を実施するためのコード
この記事では、以下のような様々なカメラを使ってYOLOv8の動画撮影中のリアルタイム推論を実施していきます。
USBカメラ (HOZAN L835)
RaspberryPi HQカメラ
RaspberryPi カメラモジュール
まだラズベリーパイにYOLOv8の環境構築ができてない場合はこちらの記事を参考にインストールしてください。
カメラの認識確認
まずはカメラの認識確認を行います。
USBカメラ、RaspberryPiカメラの場合でコマンドが違いますので、2つに分けて記載します。
USBカメラの認識確認
ターミナルを開いて、以下のコマンドを入力します。
lsusb
・出力
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 002: ID 04f2:a007 Chicony Electronics Co., Ltd USB Camera L-835
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 002: ID 04f2:a007 Chicony Electronics Co., Ltd USB Camera L-835
と表示されているのでUSBカメラが認識できています。
RaspberryPiカメラの認識確認
RaspberryPiカメラの場合は以下のコマンドで確認できます。
libcamera-still --list-cameras
接続しているカメラの情報が表示されていればOKです。
Available cameras
-----------------
0 : imx477 [4056x3040 12-bit RGGB] (/base/axi/pcie@120000/rp1/i2c@80000/imx477@1a)
Modes: 'SRGGB10_CSI2P' : 1332x990 [120.05 fps - (696, 528)/2664x1980 crop]
'SRGGB12_CSI2P' : 2028x1080 [50.03 fps - (0, 440)/4056x2160 crop]
2028x1520 [40.01 fps - (0, 0)/4056x3040 crop]
4056x3040 [10.00 fps - (0, 0)/4056x3040 crop]
認識できていなければ、「No cameras available!」と表示されます。
YOLOv8によるリアルタイム推論の実装コード
カメラの認識が確認できれば、USBカメラ、RaspberryPiカメラそれぞれ以下のコードで実装することができます。
USBカメラ
from ultralytics import YOLO
# Load the YOLOv8 model
model = YOLO("yolov8n.pt")
results = model(0, show=True) #カメラ番号を入力
for i in enumerate(results):
print(i)
RaspberryPiカメラ
import cv2
from picamera2 import Picamera2
from ultralytics import YOLO
# Initialize the Picamera2
picam2 = Picamera2()
picam2.preview_configuration.main.size = (1280, 720)
picam2.preview_configuration.main.format = "RGB888"
picam2.preview_configuration.align()
picam2.configure("preview")
picam2.start()
# Load the YOLOv8 model
model = YOLO("yolov8n.pt")
while True:
frame = picam2.capture_array()
results = model(frame)
annotated_frame = results[0].plot()
cv2.imshow("Camera", annotated_frame)
if cv2.waitKey(1) == ord("q"):
break
ラズパイのような安価なスペックのPCでも、リアルタイムで推論することができました。
以上、お疲れさまでした。