close
YOLOv8 圖像目標檢測教學:從安裝到結果保存
在本篇教學中,我們將一步步引導你如何使用 YOLOv8 執行圖像目標檢測,從安裝環境到保存檢測結果。以下內容適合初學者快速上手 YOLOv8。
1. 環境準備
首先,確保你的 Python 環境已安裝以下必要的庫。你可以使用以下命令來完成安裝:
pip install ultralytics opencv-python matplotlib
2. YOLOv8 的基本結構
YOLOv8 提供了簡單易用的 API,以下是典型的使用流程:
- 加載 YOLO 模型。
- 對圖像或視頻進行目標檢測。
- 保存並可視化檢測結果。
3. YOLOv8 檢測完整範例
以下是一個 YOLOv8 的完整範例程式碼,涵蓋從模型加載到結果保存的所有步驟。
from ultralytics import YOLO import os import cv2 import matplotlib.pyplot as plt # 創建保存結果的目錄 save_dir = 'results/' os.makedirs(save_dir, exist_ok=True) # 加載 YOLO 模型 (使用 COCO 預訓練權重) model = YOLO('yolov8n.pt') # 使用 Nano 模型 # 推理:對單張圖片進行目標檢測 image_path = 'image.jpg' # 替換為您的圖片路徑 results = model(image_path) # 執行目標檢測 # 1. 可視化檢測結果 annotated_image = results[0].plot() # 繪製帶有檢測結果的圖片 # 使用 Matplotlib 顯示結果 plt.imshow(cv2.cvtColor(annotated_image, cv2.COLOR_BGR2RGB)) plt.axis('off') plt.show() # 2. 保存檢測結果圖片 cv2.imwrite(os.path.join(save_dir, 'detected_image.jpg'), annotated_image) print(f"Saved detection result to {os.path.join(save_dir, 'detected_image.jpg')}") # 3. 打印檢測到的所有類別名稱 detected_classes = set() # 用集合儲存類別,避免重複 for box in results[0].boxes: cls_id = int(box.cls[0]) # 類別 ID class_name = model.names[cls_id] # 類別名稱 detected_classes.add(class_name) print("Detected Classes:") for cls in detected_classes: print(f"- {cls}")
4. 程式碼解析
步驟 1: 加載模型
以下代碼加載 YOLOv8 的 Nano 模型,該模型輕量且速度快,適合入門使用。
model = YOLO('yolov8n.pt')
步驟 2: 圖片檢測
執行目標檢測,並將結果儲存在 results
中:
results = model(image_path)
步驟 3: 可視化檢測結果
使用 results[0].plot()
方法繪製檢測結果:
annotated_image = results[0].plot()
步驟 4: 保存檢測結果
將繪製好的結果圖片保存到本地:
cv2.imwrite(os.path.join(save_dir, 'detected_image.jpg'), annotated_image)
步驟 5: 打印檢測到的類別
列出圖片中所有被檢測到的物體類別名稱:
detected_classes = set()
for box in results[0].boxes:
cls_id = int(box.cls[0])
class_name = model.names[cls_id]
detected_classes.add(class_name)
5. 測試圖片的效果
當使用 COCO 預訓練模型時,YOLOv8 可以檢測圖片中的 80 種常見物體,例如:
- person
- car
- dog
- bicycle
例如,對一張街道圖片檢測後,輸出可能如下:
Detected Classes:
- person
- car
- bicycle
6. 進階功能
檢測多張圖片
一次性對多張圖片進行目標檢測:
image_paths = ['image1.jpg', 'image2.jpg']
results = model(image_paths)
for i, result in enumerate(results):
result.save(save_dir=os.path.join(save_dir, f'image_{i}'))
設置置信度閾值
過濾掉置信度低於閾值的檢測結果:
confidence_threshold = 0.5
for box in results[0].boxes:
if box.conf[0] > confidence_threshold:
print(f"Class: {int(box.cls[0])}, Confidence: {box.conf[0]:.2f}")
7. 注意事項
- 確保圖片文件存在,且路徑正確。
- 如果保存結果時遇到權限問題,請檢查保存目錄的寫入權限。
- 如果檢測速度較慢,可以使用輕量級模型(如
yolov8n.pt
),或安裝 GPU 支持的 PyTorch 版本進行加速。
結語
通過這篇教學,你應該已經掌握了如何使用 YOLOv8 進行圖片目標檢測。如果有任何問題,請隨時留言交流!
註: 目前yolo8不支援python 12,請使用python 11安裝, 以下為測試用圖片
文章標籤
全站熱搜