close

使用 PyCamera2 與 YOLOv8 實現即時目標偵測

在本教學中,我們將介紹如何使用 Raspberry Pi 的 PyCamera2 相機模組與 YOLOv8 實現即時目標偵測。該程式適合用於 Raspberry Pi 或其他支援 PyCamera2 的設備。

1. 工具與環境準備

在開始之前,請確認您已完成以下準備:

  • 硬體: Raspberry Pi(搭配官方相機模組,例如 Camera Module 2)。
  • 作業系統: Raspberry Pi OS,並啟用 libcamera 支援。
  • Python 環境: Python 版本需為 3.7 或以上。

從系統上安裝包含system-site-package的虛擬環境

python3 -m venv my_env --system-site-packages

啟用虛擬環境

source my_env/bin/activate

確認 pip list 顯示系統模組

pip list

在虛擬環境下安裝YOLO(ultralytics)

pip install ultralytics opencv-python

使用Thonny指定虛擬環境

Open Thonny

  1. Launch Thonny IDE on your Raspberry Pi.
  2. Go to Tools > Options.

Configure Virtual Environment

  1. Navigate to the Interpreter tab.
  2. Select "Alternative Python 3 executable or virtual environment".
  3. Click on "Locate" and choose the path where you want your virtual environment.

使用完成可退出虛擬環境

deactivate

2. PyCamera2 與 YOLOv8 即時偵測完整程式碼

以下是完整的 Python 程式碼,用於即時捕獲畫面並進行目標偵測:

from picamera2 import Picamera2, Preview
from ultralytics import YOLO
import cv2

# 初始化 YOLO 模型
model = YOLO('yolov8n.pt')  # 使用輕量級 YOLO Nano 模型

# 初始化 PiCamera2
picam2 = Picamera2()
config = picam2.create_preview_configuration(main={"format": "RGB888", "size": (640, 480)})
picam2.configure(config)

# 啟動攝影機
picam2.start()

print("按下 'Ctrl + C' 退出程式")

try:
    while True:
        # 獲取攝影機畫面
        frame = picam2.capture_array()

        # 使用 YOLO 模型進行推理
        results = model(frame)

        # 繪製檢測結果
        annotated_frame = results[0].plot()

        # 使用 OpenCV 顯示結果
        cv2.imshow("YOLOv8 Real-Time Detection", annotated_frame)

        # 按下 'q' 鍵退出
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

except KeyboardInterrupt:
    print("\n程式已中止")

# 停止攝影機並釋放資源
picam2.stop()
cv2.destroyAllWindows()

3. 程式碼解析

  • 初始化 YOLO 模型: 使用 YOLOv8 Nano 模型進行目標偵測,該模型輕量且適合實時運行。
    model = YOLO('yolov8n.pt')
  • 配置 PiCamera2: 設置圖像格式為 RGB888,解析度為 640x480
    picam2 = Picamera2()
    config = picam2.create_preview_configuration(main={"format": "RGB888", "size": (640, 480)})
    picam2.configure(config)
  • 捕獲畫面並處理: 使用 capture_array() 獲取畫面,並傳入 YOLO 模型進行推理。
    frame = picam2.capture_array()
    results = model(frame)
  • 顯示檢測結果: 使用 OpenCV 繪製並顯示檢測結果。
    annotated_frame = results[0].plot()
    cv2.imshow("YOLOv8 Real-Time Detection", annotated_frame)
  • 退出條件: 按下 q 鍵退出程式,或通過 Ctrl + C 停止程式。
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

4. 執行結果示例

執行程式後,您將看到來自 PiCamera2 的即時畫面,畫面中標註了檢測到的物體類別(如 personcar)及其邊界框。按下 q 鍵即可退出程式。

5. 注意事項

  • 請確保您的 Raspberry Pi 已正確連接相機模組,並啟用 libcamera 支援。
  • 若畫面處理速度較慢,建議降低解析度或使用更輕量級的模型。
  • 如需更高性能,請安裝支援 GPU 的 PyTorch 版本。
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118

6. 適用場景

本程式適合以下場景:

  • 即時監控系統:行人檢測、車輛識別。
  • 嵌入式系統:用於 Raspberry Pi 或其他單板電腦的即時目標檢測應用。
  • 教育與研究:作為物體偵測與相機技術的實驗範例。

結語

通過本篇教學,您應該已經掌握如何結合 PyCamera2 與 YOLOv8 實現即時目標偵測。如果有其他問題或需要進一步指導,歡迎留言交流!

arrow
arrow
    創作者介紹
    創作者 liusming 的頭像
    liusming

    劉老師的跨域創想工坊

    liusming 發表在 痞客邦 留言(4) 人氣()