【Raspberry pi 5×カメラ】YOLOv8 リアルタイム推論 | USBカメラ/Picameraモジュール

python
  • 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でも、リアルタイムで推論することができました。
以上、お疲れさまでした。

タイトルとURLをコピーしました