📢 公告:OpenCV 系列文章重構完成(75%)。專案實作篇仍在製作中,完成時間未定,敬請期待!→ 查看文章索引

Like Share Discussion Bookmark Smile

J.J. Huang   2026-04-06   Python OpenCV 07.物件偵測與辨識篇   瀏覽次數:次   DMCA.com Protection Status

Python | OpenCV YOLOv8 介紹與環境安裝

📚 前言

從分類到偵測 — YOLOv8 系列介紹 中說明了分類與偵測任務的差異,以及這個子系列的學習路線。
如果你的目標是「在圖片中找出物件的位置」,也就是物件偵測任務,就需要不同的模型與訓練方式。

YOLOv8 是目前最主流的即時物件偵測框架,由 Ultralytics 開發與維護。
這個系列文章將帶你從環境安裝開始,一路到用自己的資料集訓練出專屬的偵測模型。

🔎 什麼是 YOLO?

YOLO(You Only Look Once)是一系列即時物件偵測模型的統稱。
與傳統的兩階段偵測器(如 Faster R-CNN)不同,YOLO 只需一次前向傳播就能同時預測所有物件的位置與類別,速度極快。

YOLOv8 是第八代,由 Ultralytics 在 2023 年發布,相較前代有以下特點:

  • 更高的偵測準確度(mAP)
  • 更快的推論速度
  • 統一的 Python API,支援偵測、分割、分類、姿態估計等多種任務
  • 內建訓練、驗證、推論、匯出等完整工具鏈

🧠 模型規格與選擇


圖:YOLOv8 五種模型規格比較 ─ 從 nano 到 extra 的參數量、準確度、速度與推薦情境

💡 建議先用 yolov8nyolov8s 跑通訓練流程,確認資料沒問題後,再換較大的模型提升準確度。

🛠️ 環境安裝

本系列後續所有範例皆以 GPU 執行為主。

相關環境安裝文章:

1
2
# 安裝 ultralytics
pip install ultralytics

💻 驗證安裝

1
2
3
4
5
6
7
8
9
10
# verify_install.py
import torch
import ultralytics

# 確認 GPU 可用
print(torch.cuda.is_available()) # True
print(torch.cuda.get_device_name(0)) # 顯卡名稱

# 確認 ultralytics 環境
ultralytics.checks()

正常輸出範例(GPU):

1
2
3
4
True
NVIDIA GeForce RTX XXXX
Ultralytics YOLOv8.x.x 🚀 Python-3.10.x torch-2.x.x CUDA:0 (NVIDIA GeForce RTX XXXX, XXXXMB)
Setup complete ✅ (8 CPUs, 16.0 GB RAM, 100.0 GB disk)

💡 若 torch.cuda.is_available() 回傳 False,代表 PyTorch 的 GPU 版本未正確安裝,請重新確認 CUDA 版本並參照 pytorch.org 安裝對應版本。

💻 使用預訓練模型快速測試

安裝完成後,我們可以用 Ultralytics 提供的 CLI(指令列)方式快速測試 YOLOv8 是否正常運作。
YOLOv8 的 CLI 非常方便,適合快速驗證環境與模型效果。

💡 以下範例使用的 yolov8n.pt 是以 COCO 資料集預訓練的權重,能偵測 80 種常見物件(人、車、動物、家電、食物、家具等)。若目標物件不在這 80 類內,則需要自行蒐集資料訓練自訂模型,這正是後續幾篇要介紹的重點。

🔹 使用指令列(CLI)快速測試

🔸 偵測單張圖片

  • ⌨ 指令:
    1
    2
    # 偵測圖片(使用 Ultralytics 官方測試圖片,第一次執行會自動下載模型權重)
    yolo detect predict model=yolov8n.pt source="https://ultralytics.com/images/bus.jpg"
  • 🖥️ 輸出:
    1
    2
    3
    4
    5
    6
    7
    8
    Ultralytics 8.4.26  Python-3.10.11 torch-2.11.0+cu130 CUDA:0 (NVIDIA GeForce RTX 2060 SUPER, 8192MiB)
    YOLOv8n summary (fused): 72 layers, 3,151,904 parameters, 0 gradients, 8.7 GFLOPs

    Found https://ultralytics.com/images/bus.jpg locally at bus.jpg
    image 1/1 D:\PythonWorkspace\opencv-tutorial\bus.jpg: 640x480 4 persons, 1 bus, 1 stop sign, 27.1ms
    Speed: 1.9ms preprocess, 27.1ms inference, 12.6ms postprocess per image at shape (1, 3, 640, 480)
    Results saved to D:\PythonWorkspace\opencv-tutorial\runs\detect\predict
    Learn more at https://docs.ultralytics.com/modes/predict

    📝 說明:這是測試環境是否正常的最簡單方式。模型會自動偵測圖片中的物件,並在終端機顯示偵測到的類別與信心度,同時會把結果圖片儲存到 runs/detect/predict 資料夾。

🔸 偵測本地圖片

  • ⌨ 指令:
    1
    2
    # 偵測本地圖片(street.jpg 為「OpenCV 與深度學習框架整合」篇使用的 Pexels 街景素材)
    yolo detect predict model=yolov8n.pt source=assets/street.jpg
  • 🖥️ 輸出:
    1
    2
    3
    4
    5
    6
    7
    Ultralytics 8.4.26  Python-3.10.11 torch-2.11.0+cu130 CUDA:0 (NVIDIA GeForce RTX 2060 SUPER, 8192MiB)
    YOLOv8n summary (fused): 72 layers, 3,151,904 parameters, 0 gradients, 8.7 GFLOPs

    image 1/1 D:\PythonWorkspace\opencv-tutorial\assets\street.jpg: 448x640 1 person, 7 cars, 2 buss, 28.7ms
    Speed: 2.2ms preprocess, 28.7ms inference, 12.0ms postprocess per image at shape (1, 3, 448, 640)
    Results saved to D:\PythonWorkspace\opencv-tutorial\runs\detect\predict
    Learn more at https://docs.ultralytics.com/modes/predict

    📝 說明:把 source 改成你本機的圖片路徑即可。結果圖片會自動儲存,並在終端機顯示偵測到的物件數量與類別。

🔸 偵測影片

  • ⌨ 指令:
    1
    2
    # 偵測影片(street.mp4 同上)
    yolo detect predict model=yolov8n.pt source=assets/street.mp4
  • 🖥️ 輸出:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Ultralytics 8.4.26  Python-3.10.11 torch-2.11.0+cu130 CUDA:0 (NVIDIA GeForce RTX 2060 SUPER, 8192MiB)
    YOLOv8n summary (fused): 72 layers, 3,151,904 parameters, 0 gradients, 8.7 GFLOPs

    video 1/1 (frame 1/93) D:\PythonWorkspace\opencv-tutorial\assets\street.mp4: 384x640 8 persons, 2 cars, 3 traffic lights, 1 handbag, 20.4ms
    video 1/1 (frame 2/93) D:\PythonWorkspace\opencv-tutorial\assets\street.mp4: 384x640 8 persons, 2 cars, 3 traffic lights, 1 handbag, 7.6ms
    ... 省略 ...
    video 1/1 (frame 91/93) D:\PythonWorkspace\opencv-tutorial\assets\street.mp4: 384x640 15 persons, 1 car, 3 traffic lights, 7.6ms
    video 1/1 (frame 92/93) D:\PythonWorkspace\opencv-tutorial\assets\street.mp4: 384x640 12 persons, 1 car, 2 traffic lights, 7.4ms
    video 1/1 (frame 93/93) D:\PythonWorkspace\opencv-tutorial\assets\street.mp4: 384x640 12 persons, 1 car, 2 traffic lights, 7.4ms
    Speed: 1.3ms preprocess, 7.8ms inference, 1.6ms postprocess per image at shape (1, 3, 384, 640)
    Results saved to D:\PythonWorkspace\opencv-tutorial\runs\detect\predict
    Learn more at https://docs.ultralytics.com/modes/predict

    📝 說明:YOLOv8 會逐幀處理影片,並在終端機顯示每幀的偵測結果。處理完後會自動把帶有偵測框的影片儲存起來。

🔸 即時攝影機偵測

  • ⌨ 指令:
    1
    2
    # 即時攝影機偵測(需有攝影機,0 代表預設裝置)
    yolo detect predict model=yolov8n.pt source=0
  • 🖥️ 輸出:
    1
    2
    3
    4
    5
    6
    7
    Ultralytics 8.4.26  Python-3.10.11 torch-2.11.0+cu130 CUDA:0 (NVIDIA GeForce RTX 2060 SUPER, 8192MiB)
    YOLOv8n summary (fused): 72 layers, 3,151,904 parameters, 0 gradients, 8.7 GFLOPs

    [ WARN:0@0.001] global cap_ffmpeg_impl.hpp:1217 open VIDEOIO/FFMPEG: Failed list devices for backend dshow
    [ERROR:0@2.857] global obsensor_uvc_stream_channel.cpp:163 cv::obsensor::getStreamChannelGroup Camera index out of range
    ... 省略 ...
    ConnectionError: 1/1: 0... Failed to open 0

    📝 說明:如果出現類似錯誤,通常是因為沒有連接攝影機,或攝影機被其他程式占用。解決方式:確認攝影機已連接,並關閉其他可能使用攝影機的程式(例如 Zoom、Teams、Camera App)。成功時會開啟一個視窗,即時顯示偵測結果。

🔹 Python API 方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# inference.py
from ultralytics import YOLO

# 載入預訓練模型(自動下載 yolov8n.pt)
model = YOLO("yolov8n.pt")

# 對圖片推論(使用 Ultralytics 官方測試圖片)
results = model("https://ultralytics.com/images/bus.jpg")

# 顯示結果
results[0].show()

# 查看偵測到的物件
for box in results[0].boxes:
cls_id = int(box.cls)
conf = float(box.conf)
label = model.names[cls_id]
print(f"偵測到:{label},信心度:{conf:.2f}")


圖:使用 YOLOv8 Python API 載入預訓練模型對圖片推論並輸出偵測到的物件類別與信心度

⚠️ 注意事項

  • 第一次執行會自動下載模型權重yolov8n.pt 約 6MB,yolov8x.pt 約 130MB,需要網路連線。
  • ultralytics 會將下載的模型快取在 ~/.cache/ultralytics/(或 Windows 的 %USERPROFILE%\.cache\ultralytics\)。
  • PyTorch 版本需與 CUDA 版本對應:安裝時請至 pytorch.org 確認當前 CUDA 版本對應的 --index-url,版本不符會導致安裝到 CPU 版本。

📊 應用場景

  • 快速驗證可行性:用預訓練模型先測試偵測效果,確認方向後再進入自訓練流程。
  • 直接部署通用偵測:若目標物件恰好在 COCO 80 類別內,可直接使用預訓練模型而無需訓練。

🎯 結語

YOLOv8 的環境設定相當簡單,pip install ultralytics 就能擁有完整的工具鏈。
下一步是 YOLOv8 資料集準備,學習如何組織自己的資料,讓 YOLOv8 能夠讀取並訓練。

📖 如在學習過程中遇到疑問,或是想了解更多相關主題,建議回顧一下 Python | OpenCV 系列導讀,掌握完整的章節目錄,方便快速找到你需要的內容。

註:以上參考了
Ultralytics YOLOv8 官方文件
Ultralytics GitHub