Roboflow Supervision 完整教學:用 Python 輕鬆做物件追蹤、區域計數與影片分析(2026)

Roboflow Supervision 是免費開源的 Python 電腦視覺工具庫(GitHub 4.8 萬星),與模型無關,支援 YOLO 等任何偵測模型。本文教你用 sv.Detections 統一偵測結果、ByteTrack 做多物件追蹤、PolygonZone/LineZone 做區域與穿越計數,並提供可直接執行的程式碼,讓監控、人流統計、車流分析一次搞定。

  • Dennis
  • 6 分鐘閱讀
Roboflow Supervision 完整教學:用 Python 輕鬆做物件追蹤、區域計數與影片分析(2026)

Roboflow Supervision 是免費開源的 Python 電腦視覺工具庫(GitHub 4.8 萬星、MIT 授權),用統一的 sv.Detections 介面接住任何偵測模型的輸出,再以三行程式碼完成標框、追蹤、計數與影片分析。以下完整教學帶你從安裝到實作。

什麼是 Roboflow Supervision?

一句話答案:Supervision 是「電腦視覺應用層的工具箱」——它不訓練模型,而是把 YOLO、Transformers、RF-DETR 等任何模型的偵測結果,變成可以標註、追蹤、計數、分析的完整應用。

過去做電腦視覺專案,最花時間的不是訓練模型,而是模型之後的工程:把各種框架的輸出格式轉來轉去、寫標框繪製、寫追蹤器、寫計數邏輯、處理影片 I/O。Supervision 把這些全部封裝成模組化元件,讓你把精力放在「應用本身」而不是「基礎建設」。

flowchart LR
    A[偵測模型<br/>YOLO / RF-DETR / Transformers] --> B[sv.Detections<br/>統一格式]
    B --> C[Annotators<br/>標框/遮罩/標籤]
    B --> D[ByteTrack<br/>多物件追蹤]
    B --> E[PolygonZone / LineZone<br/>區域與穿越計數]
    B --> F[VideoSink<br/>影片輸出]
    C & D & E --> G[應用:監控/人流/車流]
    style B fill:#7C3AED,color:#fff

核心數據(2026 年 8 月)

指標數值
GitHub Stars48,869 ⭐
Forks4,615
授權MIT(完全免費商用)
最新版本0.30.0(pip install supervision
Python 版本3.10+
首次發布2022 年 11 月
模型支援模型無關(YOLO、Transformers、MMDetection、RF-DETR、Roboflow Inference 等)

安裝:一行搞定

pip install supervision

需要搭配模型的話,以 YOLO 為例:

pip install supervision ultralytics opencv-python

快速開始:統一偵測結果

Supervision 的核心是 sv.Detections——一個標準化的偵測容器,內含 xyxy(邊框座標)、confidence(信心度)、class_id(類別)、tracker_id(追蹤 ID)、mask(分割遮罩)等欄位。任何模型輸出一律轉成這個格式,之後的操作全部共用同一套 API。

範例:用 Ultralytics YOLO 偵測圖片

import supervision as sv
from ultralytics import YOLO

model = YOLO("yolov8n.pt")
result = model("path/to/image.jpg")[0]

# 關鍵:轉換成 supervision 統一格式
detections = sv.Detections.from_ultralytics(result)

print(len(detections))       # 偵測到幾個物件
print(detections.xyxy)       # 邊框座標
print(detections.class_id)   # 類別 ID

範例:用 RF-DETR(Roboflow 的開源偵測模型)

import supervision as sv
from PIL import Image
from rfdetr import RFDETRSmall

image = Image.open("path/to/image.jpg")
model = RFDETRSmall()
detections = model.predict(image, threshold=0.5)

print(len(detections))  # 例如 5

Supervision 支援的模型連接器還包括 Transformers、MMDetection、Roboflow Inference(需 API key)等。甚至 Hugging Face 上的模型也能用。

標註:Annotators 讓畫面「講話」

偵測到物件之後,最常見的需求是把結果畫在圖片上。Supervision 提供超過 20 種 Annotator,全部是「吃進偵測結果、吐出標註圖」的標準元件:

import cv2
import supervision as sv

image = cv2.imread("path/to/image.jpg")
# 假設 detections 來自模型
detections = sv.Detections(...)

box_annotator = sv.BoxAnnotator()
label_annotator = sv.LabelAnnotator()

annotated = box_annotator.annotate(scene=image.copy(), detections=detections)
annotated = label_annotator.annotate(scene=annotated, detections=detections)

常用 Annotator 一覽

Annotator用途適合場景
BoxAnnotator畫矩形邊框基本物件偵測視覺化
RoundBoxAnnotator圓角矩形邊框美觀的 UI 呈現
MaskAnnotator畫分割遮罩實例分割結果
LabelAnnotator顯示類別名稱+信心度標籤必備
DotAnnotator畫中心點人流/車流位置標記
HaloAnnotator光暈效果強調重點物件
TraceAnnotator畫運動軌跡追蹤路線可視化
HeatMapAnnotator熱力圖停留熱區分析
PolygonAnnotator畫多邊形輪廓任意形狀標註

物件追蹤:ByteTrack 讓物件「有身份」

靜態偵測只能告訴你「畫面裡有東西」,追蹤則能告訴你「這個東西從哪裡來、要到哪裡去」。Supervision 內建 ByteTrack 追蹤器,用 IoU 與外觀特徵在連續影格間比對,賦予每個物件唯一的 tracker_id

範例:影片多物件追蹤(附軌跡)

import supervision as sv
from ultralytics import YOLO

model = YOLO("yolov8n.pt")
tracker = sv.ByteTrack()          # 初始化 ByteTrack

video_info = sv.VideoInfo.from_video_path("input.mp4")
trace_annotator = sv.TraceAnnotator()
box_annotator = sv.BoxAnnotator()

with sv.VideoSink("output.mp4", video_info) as sink:
    for frame in sv.get_video_frames_generator("input.mp4"):
        result = model(frame)[0]
        detections = sv.Detections.from_ultralytics(result)

        # 關鍵:把偵測結果交給 ByteTrack,取得追蹤 ID
        detections = tracker.update_with_detections(detections)

        annotated = trace_annotator.annotate(scene=frame, detections=detections)
        annotated = box_annotator.annotate(scene=annotated, detections=detections)

        sink.write_frame(annotated)

追蹤是監控、人流、車流應用的核心——只有知道「同一個人在連續影格中出現」,才能算出人數、速度與動線。Roboflow 官方也提供基於此技術的 車速估算停留時間分析 教學(見文末連結)。

區域計數:PolygonZone 統計「進入特定區域的物件」

想像你在百貨公司想知道「上午 10 點到 11 點,櫃位前方區域經過多少人」,這就是 PolygonZone 的典型場景:定義一個多邊形區域,統計進入該區域的偵測物件數量。

import supervision as sv
from ultralytics import YOLO
import numpy as np

model = YOLO("yolov8n.pt")
tracker = sv.ByteTrack()

# 定義感興趣區域(多邊形頂點座標,順時針或逆時針皆可)
zone_polygon = np.array([
    [100, 400], [600, 400], [600, 600], [100, 600]
])
zone = sv.PolygonZone(polygon=zone_polygon)
zone_annotator = sv.PolygonZoneAnnotator(
    zone=zone, color=sv.Color.GREEN
)

for frame in sv.get_video_frames_generator("input.mp4"):
    result = model(frame)[0]
    detections = sv.Detections.from_ultralytics(result)
    detections = tracker.update_with_detections(detections)

    # 關鍵:過濾出「區域內」的物件
    zone.trigger(detections)
    print(f"區域內物件數:{len(zone.current_count)}")

    annotated = zone_annotator.annotate(scene=frame)
    # ...輸出到 VideoSink

穿越計數:LineZone 統計「越過這條線的人」

店家想知道「今天有多少人進門」,最準確的做法是統計穿越門口一條虛擬線的物件——這就是 LineZone(穿越線計數器):

import supervision as sv

line_start = sv.Point(50, 400)   # 線段起點
line_end = sv.Point(1250, 400)   # 線段終點

line = sv.LineZone(start=line_start, end=line_end)
line_annotator = sv.LineZoneAnnotator(
    thickness=4, text_thickness=4, text_scale=2
)

# 在每一幀中:line.trigger(detections) 即可自動更新計數
# line.in_count / line.out_count 分別是「進」與「出」的次數

計數工具比較

工具統計什麼典型應用
PolygonZone區域內同時存在的物件數櫃位駐留人數、停車格占用
LineZone穿越線段的累計次數(進/出分開)店面人流、閘門進出
HeatMapAnnotator空間熱力分布賣場熱區分析
TraceAnnotator + 追蹤個別物件的完整軌跡動線規劃、異常行為

資料集工具:讀寫 COCO / YOLO 格式

除了推理與視覺化,Supervision 也內建資料集工具——讀取、分割、合併、轉換 COCO、YOLO、Pascal VOC 格式的標註資料,做模型訓練前的資料準備:

import supervision as sv

# 讀取 COCO 格式
ds = sv.DetectionDataset.from_coco(
    images_directory_path="data/train",
    annotations_path="data/train/_annotations.coco.json",
)

# 分割成 train / test / valid
train, rest = ds.split(split_ratio=0.7)
test, valid = rest.split(split_ratio=0.5)

# 轉換成 YOLO 格式匯出
ds.as_yolo(
    images_directory_path="yolo_out/images",
    annotations_directory_path="yolo_out/labels",
    data_yaml_path="yolo_out/data.yaml",
)

其他實用元件還包括 InferenceSlicer(把大圖切成小塊推理,解決小物件偵測問題)、DetectionsSmoother(平滑抖動的偵測框)、CSVSink(把追蹤結果輸出成 CSV 供後續分析)與 ConfusionMatrix(評估模型)。

常見問題

Q:Supervision 需要 GPU 嗎? 不需要。Supervision 本身只做後處理與視覺化,CPU 就能跑;效能瓶頸在於你搭配的偵測模型。

Q:可以用在商用專案嗎? 可以。MIT 授權允許自由商用,不需付費。

Q:跟 OpenCV 的關係? Supervision 底層使用 OpenCV 做影像處理(cv2),你可以把它視為「OpenCV 之上的高階電腦視覺元件庫」,兩者完全相容。

Q:跟 Roboflow 雲端服務的關係? Supervision 是獨立開源專案,不綁定 Roboflow 雲端;你可以完全離線使用。Roboflow 雲端(標註工具、模型訓練)只是它的「親戚」生態,非必要。

結語

Supervision 解決的是電腦視覺專案「最後一哩路」的工程問題:統一的偵測格式、20 多種視覺化標註、內建 ByteTrack 追蹤、區域/穿越計數與資料集工具,全部開源免費。如果你正在做 YOLO 相關的監控、人流統計、車流分析或任何偵測應用,它就是那個能幫你省下數天開發時間的工具箱。官方提供的 Colab Notebook 與影片教學(車速估算、停留時間分析)可以讓你 10 分鐘內跑通第一個專案。

延伸閱讀

資料來源

📬 訂閱 most.tw 電子報

每週精選 AI 工具教學與技術乾貨,直接送到你的信箱。免費、隨時可退訂。