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
- Launch Thonny IDE on your Raspberry Pi.
- Go to Tools > Options.
Configure Virtual Environment
- Navigate to the Interpreter tab.
- Select "Alternative Python 3 executable or virtual environment".
- 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 的即時畫面,畫面中標註了檢測到的物體類別(如 person
或 car
)及其邊界框。按下 q
鍵即可退出程式。
5. 注意事項
- 請確保您的 Raspberry Pi 已正確連接相機模組,並啟用
libcamera
支援。 - 若畫面處理速度較慢,建議降低解析度或使用更輕量級的模型。
- 如需更高性能,請安裝支援 GPU 的 PyTorch 版本。
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
6. 適用場景
本程式適合以下場景:
- 即時監控系統:行人檢測、車輛識別。
- 嵌入式系統:用於 Raspberry Pi 或其他單板電腦的即時目標檢測應用。
- 教育與研究:作為物體偵測與相機技術的實驗範例。
結語
通過本篇教學,您應該已經掌握如何結合 PyCamera2 與 YOLOv8 實現即時目標偵測。如果有其他問題或需要進一步指導,歡迎留言交流!
文章標籤
全站熱搜