GitHub 日榜第一、月下载 110 万:supervision 出现之前,写计算机视觉代码是什么感觉

我统计了一下,大概是 300 行废话

情绪 Dashboard 上线之后,我加了一个功能:用卫星遥感图像做农产品的区域监测。YOLO 检测农田边界、识别作物覆盖类型,模型本身跑得挺好。

但模型之外的事情让我想骂人。

画 bounding box,要写。把检测结果格式化,要写。多帧追踪同一块农田,要写。按区域统计覆盖率,要写。输出带标注的视频,又要写。

每件事单独拿出来都不难,加在一起大概 300 行,全是"把模型输出变成可用结果"的胶水代码。

最烦的不是写,是每个项目都要重新写一遍。

这两天 GitHub Trending 日榜第一蹦出来:supervision,Roboflow 出品,副标题一句话------

"democratising computer vision"

PyPI 月下载量:1.1M

我看到 1.1M 这个数字愣了一秒,因为这个体量意味着大概整个用 Python 做计算机视觉的圈子里,有相当比例的人在用同一个包处理同一类问题。

点进 README,第一行代码示例里,我之前花了大概 40 分钟写的 bounding box 标注逻辑,用 supervision 是三行。

我往椅背上靠了一下,回想了一下过去写的那 300 行胶水代码。

属于是把自己架空了。

这个项目目前搭配claude code使用,国内订阅确实有点困难。给大家参考一个网站:claudemax.shop

先说结论

评分:9.5 / 10。用 Python 做计算机视觉的,不管什么场景,pip install supervision 这条命令应该出现在你每个项目的第一步。

用了两周,几个关键数字:

  • 替代掉我自己维护的 CV 工具函数:约 280 行胶水代码 → 21 行 supervision 调用
  • 多目标追踪接入:从"查文档 + 调 ByteTrack 参数"到"换一行 tracker 初始化代码"
  • 与 Claude Code 的配合:supervision 输出的数据结构标准化程度很高,Claude Code 生成的接入代码几乎不需要修改

唯一的但是:它是后处理工具库,不包含模型本身。你还是得自己搞 YOLO / SAM / GroundingDINO,supervision 负责"模型输出之后的所有事情"。

先跑起来

复制代码
pip install supervision

装完,用三行代码画出你人生中第一个用 supervision 的 bounding box:

ini 复制代码
import supervision as sv

detections = sv.Detections(xyxy=boxes, confidence=scores, class_id=class_ids)
annotator = sv.BoxAnnotator()
frame = annotator.annotate(scene=frame, detections=detections)

就这样。模型跑完,把结果塞进 sv.Detections,剩下的交给 supervision。

支持 YOLO 全系列、SAM、GroundingDINO、Transformers、MMDetection......主流检测框架的输出格式 supervision 基本都有原生转换器,不需要手写格式转换代码。

它把什么问题解决了

300 行胶水代码,压缩成 21 行

这不是夸张,我做了实际统计。

之前我的卫星遥感后处理模块里,有这些自己手写的工具函数:

  • draw_bboxes(frame, boxes, labels, colors) --- 画框,处理颜色映射,处理标签位置溢出
  • apply_nms(boxes, scores, iou_threshold) --- 手动实现 NMS,因为不同模型输出格式不同
  • format_detections(raw_output, class_names) --- 把 YOLO 输出格式化成自己的数据结构
  • track_objects(detections_history, current) --- 手撸的 IoU 追踪,逻辑很脆
  • count_in_zone(detections, polygon_zone) --- 按多边形区域统计检测数量

全部加起来,约 280 行。每次新项目就把这个文件复制过去,然后发现新场景里有些地方对不上,再改。改了这个项目的,下个项目又是旧版本。

换成 supervision 之后,这五件事的代码量:

ini 复制代码
import supervision as sv

# 1. 格式转换(从 ultralytics 输出直接转)
detections = sv.Detections.from_ultralytics(result)

# 2. NMS(一行)
detections = detections.with_nms(threshold=0.5)

# 3. 画框 + 标签
box_ann   = sv.BoxAnnotator()
label_ann = sv.LabelAnnotator()
frame = box_ann.annotate(frame, detections)
frame = label_ann.annotate(frame, detections, labels=[...])

# 4. 追踪(换一行就换算法)
tracker   = sv.ByteTracker()
detections = tracker.update_with_detections(detections)

# 5. 区域统计
zone = sv.PolygonZone(polygon=roi_polygon)
in_zone = zone.trigger(detections=detections)

21 行,包括注释。原来 280 行。

这个压缩比是因为 supervision 把这些模式封装得非常标准------sv.Detections 是整个库的核心数据结构,所有工具都围绕它转,格式一致,没有阻抗。

多目标追踪:换算法只改一行

这是让我实际感受到"工程质量"的功能。

卫星遥感场景里,我需要追踪农田里的移动农机------不同时间点的卫星过境,把同一台农机的检测框关联起来,估算作业进度。

之前的方案是手撸 IoU 追踪,简单但脆,遮挡一下就追丢。改成 ByteTracker 之前,我花了大概半天时间搭环境、理解参数、调 track_thresh / match_thresh / frame_rate......

supervision 里,ByteTracker 是一行初始化:

ini 复制代码
tracker = sv.ByteTracker(
    track_activation_threshold=0.25,
    lost_track_buffer=30,
    minimum_matching_threshold=0.8
)

更关键的是:如果我想换成 SORT 或者其他追踪器,只改这一行。追踪器接口是统一的,tracker.update_with_detections(detections) 这个调用不变。

这才是库设计层面真正有价值的地方------不是给你一个算法,是给你一套可替换的算法接口。换算法成本接近零,你可以真正做实验而不是做迁移。

接进金融图表处理管道:意外的好用

这个场景我没预料到,但测了一下效果不错,值得单独说。

情绪 Dashboard 有一个需求:自动提取财经新闻截图里的 K 线图位置,裁出来喂给 Kronos 分析。以前这步是手动的,或者用 OpenCV 写了一堆边缘检测 + 轮廓提取的代码,很脆。

换成 supervision + GroundingDINO 的方案:

ini 复制代码
# GroundingDINO 检测"K-line chart"区域
result = grounding_dino.predict("K-line chart", image)
detections = sv.Detections.from_groundingdino(result)

# 按置信度过滤 + 裁图
detections = detections[detections.confidence > 0.6]
charts = [sv.crop_image(image, box) for box in detections.xyxy]

六行,把 K 线图从任意财经截图里裁出来,准确率比我之前的 OpenCV 方案高不少。

Claude Code 帮我把这个接进了 Dashboard 的图像处理管道,前后花了大概 20 分钟。supervision 的数据结构标准,Claude Code 生成的接入代码几乎不需要改------这个配合比我预期的顺。

1.1M 月下载背后的设计哲学

这个数字值得认真看一下。

PyPI 上月下载量过百万的 Python 包不多。能到这个量级,要么是基础设施(requests、numpy),要么是解决了一个极高频的真实痛点。

supervision 属于后者。

它瞄准的是"每个做 CV 的人都在写、但没有一个人想再写的那些代码"。画框、格式转换、追踪、区域统计、视频处理......这些东西不复杂,但零散、重复、难以维护。没有 supervision 之前,每个人都有一个自己的 utils.py,代码质量参差不齐,跨项目没法复用。

supervision 做的事是定义标准 ------sv.Detections 是什么,各种标注器怎么接口,追踪器怎么接口------然后用这个标准把整个 CV 后处理生态连起来。

1.1M/月的下载量告诉你:整个 CV 圈子接受了这个标准。

这件事 Roboflow 做对了。

说实话,也有几个坑

它不包含模型,只做后处理。 这既是设计选择,也是使用门槛------你得先搞定检测模型(YOLO 安装、权重下载、推理环境),supervision 才有发挥的空间。对纯 Python 背景、没接触过 CV 模型的人,上手顺序不能搞反。

视频处理 API 变化较快。 v0.28.0 里视频相关的部分跟几个版本前有 breaking changes,如果你在网上找到一年以前的教程,代码很可能直接跑不起来。建议认准官方文档,不要依赖第三方博客代码。

GPU 依赖通过模型传导,不能省。 supervision 本身是纯 Python,对 GPU 没有要求,但你接的检测模型通常需要 CUDA。如果是 CPU-only 的部署环境,检测速度会是瓶颈,supervision 这层不是瓶颈所在。

标注样式自定义有时需要查文档。 LabelAnnotator 的字体、颜色、位置选项比较多,想做非默认样式需要查 API 文档,不是很直觉。不算大问题,但第一次用的时候会花一点时间。

对量化和金融 AI 程序员意味着什么

计算机视觉进量化这件事,在往前走。

卫星遥感信号、财经新闻截图解析、交易所大厅监控数据、上市公司产能的卫星监测......这些场景里,CV 是数据接入层,不是目的本身。量化程序员通常不想在 CV 工程上花太多时间,他们想要的是"给我一个能快速接上的工具,然后我去做信号"。

supervision 提供的正是这个角色:标准化的 CV 后处理层,接上检测模型,接下量化管道,两边都能快速对上。

配合 Claude Code,接入效率进一步提升------因为 supervision 的接口设计很规整,Claude Code 生成的调用代码几乎不需要修改。我自己的经验是,Claude Code + supervision 搭一个新的视觉处理场景,从想法到跑通大概 30-40 分钟,这个速度在以前是不可能的。

你是哪种情况

在做量化视觉信号(卫星遥感、图表解析、文档提取)的:直接装,跑通一个最简单的检测 + 可视化场景,感受一下 sv.Detections 的数据结构,再决定怎么接进你的管道。如果你之前有自己的 CV 工具函数,把那个文件拿出来对比一下------大概率会有"这能删掉"的念头。

用 Claude Code 写 Python、偶尔需要处理图像数据的:supervision 是值得让 Claude Code 记住的工具库之一。在 CLAUDE.md 里加一条"处理计算机视觉任务时优先使用 supervision",后续 Claude Code 生成的 CV 代码会规整很多。

刚开始接触计算机视觉、不知道从哪里学起的:先装 ultralytics(YOLO),再装 supervision,跟官方 notebook 跑一遍目标检测 + 追踪的完整流程。这是目前上手最快、工程质量最高的入门组合。

最后

把重复的事情标准化,把标准化的事情做成库,把库做到 1.1M 月下载。

supervision 用这条路证明了一件事:计算机视觉里最有价值的工程贡献,不一定是更好的模型,也可以是更好的胶水。强烈推荐。

如果你也在做量化视觉信号或者金融 AI 的图像处理管道,评论区聊。

相关推荐
m0_535817551 小时前
告别海外账号!Claude Code Windows完整部署指南:从Node.js到api对接(附避坑)
windows·gpt·node.js·api·claude·claudecode·88api
南宫萧幕1 小时前
HEV能量管理策略 Simulink 实战:从零搭建 Rule-based 与 A-ECMS 对比模型及排错指南
人工智能·算法·matlab·simulink·控制
闵孚龙1 小时前
AI Agent 长上下文压缩全解析:自动压缩、记忆治理、Prompt Cache、上下文工程,让长会话不跑偏
人工智能·架构·prompt·claude
WBluuue2 小时前
Codeforces 1095 Div2(ABCDE)
c++·算法
IT当时语_青山师__JAVA技术栈2 小时前
数组与链表深度解析:从内存布局到工业级实践
java·算法·面试
吃着火锅x唱着歌2 小时前
LeetCode 496.下一个更大元素I
算法·leetcode·职场和发展
不知名的忻2 小时前
关键路径(Java)
java·数据结构·算法·关键路径
大大杰哥2 小时前
2025ccpc南昌补题笔记(前六题)
c++·笔记·算法
手写码匠2 小时前
手写 AI 智能路由系统:从零构建多模型调度与负载均衡
人工智能·深度学习·算法·aigc