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 Stars | 48,869 ⭐ |
| Forks | 4,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 分鐘內跑通第一個專案。
延伸閱讀
- Whisper 語音轉文字完整教學:AI 自動逐字稿與字幕(另一個台灣開發者必備的開源 AI 工具)
- MinerU:開源 PDF 文件解析與資料擷取工具(文件處理管線的好幫手)
- MarkItDown 教學:Microsoft 官方 PDF、Office 轉 LLM 友善 Markdown(把文件餵給 LLM 前的標準流程)
