close

YOLOv8 圖像目標檢測教學:從安裝到結果保存

在本篇教學中,我們將一步步引導你如何使用 YOLOv8 執行圖像目標檢測,從安裝環境到保存檢測結果。以下內容適合初學者快速上手 YOLOv8。

1. 環境準備

首先,確保你的 Python 環境已安裝以下必要的庫。你可以使用以下命令來完成安裝:

pip install ultralytics opencv-python matplotlib

2. YOLOv8 的基本結構

YOLOv8 提供了簡單易用的 API,以下是典型的使用流程:

  1. 加載 YOLO 模型。
  2. 對圖像或視頻進行目標檢測。
  3. 保存並可視化檢測結果。

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安裝, 以下為測試用圖片

Lesson 36 YOLOv8 圖像目標檢測教學(使用CO

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

    劉老師的跨域創想工坊

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