supervision 升级到 0.30 后如何选择并验证 OpenCV 后端
【免费下载链接】supervisionWe write your reusable computer vision tools. 💜项目地址: https://gitcode.com/GitHub_Trending/su/supervision
从 0.30.0 开始,supervision 不再安装 OpenCV,也不再提供 OpenCV extra。标准安装自带一套基于 NumPy、Pillow、SciPy 和 PyAV 的 fallback 后端,用于支撑图像、绘制和文件视频 API;如果环境里已经装了一个兼容的cv2,supervision 会在进程导入包时选中它并沿用整个进程生命周期。升级后真正要做的事只有两件:决定你的应用用哪类后端,再在一个全新的 Python 进程里验证实际选中的是哪个。
开始前先确认环境满足 0.30 的前提:0.30.0 终止了对 Python 3.9 的官方支持,最低支持版本为3.10。如果你还在 Python 3.9 上,需要先升级环境再更新 supervision(见 changelog 中 0.30.0 的说明)。
选择后端:默认 fallback 还是 OpenCV wheel
两条路径对应两种应用情况,先判断你的应用是否在 supervision 之外也依赖 OpenCV。
路径一:保持默认 fallback(应用不依赖 OpenCV)
如果应用本身不需要 OpenCV,直接安装 supervision 即可:
pip install supervisionfallback 会让 supervision 的既有 API 保持可用,不需要额外安装任何 OpenCV 包。需要知道的一个边界是:部分文本和抗锯齿绘制像素可能与 OpenCV 存在差异,因此如果你在验证图像级基线(比如像素对比),要在同一后端下完成,不要混用两个后端的结果互相校验。
路径二:优先使用 OpenCV 行为(应用依赖 OpenCV)
如果应用依赖 supervision 之外的 OpenCV,或者需要它的原生行为,则安装且只安装一个 OpenCV wheel 家族:
# 服务器和容器等没有 OpenCV GUI 模块的环境 pip install opencv-python-headless supervision # 需要 OpenCV GUI 模块的桌面应用 pip install opencv-python supervision选择依据是运行环境:无 GUI 的服务器、容器用opencv-python-headless;需要 GUI 模块的桌面应用用opencv-python。
有两条硬性约束:
- 不要同时安装
opencv-python和opencv-python-headless。 - 如果环境里的其他依赖(例如某个模型运行时)已经提供了兼容的
cv2,保留那份安装即可,不要再叠加第二个 wheel 家族。
验证选中的后端
后端选择在 import 时发生,并且对当前进程有效。所以每次改动依赖后,必须在一个全新的 Python 进程里运行以下命令来验证:
python -c "from supervision import _cv2; print(_cv2.BACKEND_NAME)"判定方式:
- 未安装 OpenCV 时输出
fallback,表示走的是内置后端; - 环境里存在
cv2时输出 OpenCV 后端名(源码中为opencv,见 src/supervision/_cv2/init.py)。
注意_cv2是私有模块,这条命令只应作为安装诊断使用,不要把它写进应用代码当作 API。
走 fallback 时,import 阶段还会打印一条警告,提示 supervision 正在使用纯 NumPy fallback 后端,且部分操作可能更慢或行为略有不同——看到这个警告说明环境里没有被识别到可用的cv2,与上面的验证命令输出fallback是一致的现象。
可选分支:摄像头与桌面显示
两条与后端选择相关的补充路径,按需采用。
实时摄像头采集仍由应用负责。supervision 的视频辅助只覆盖文件路径(两种后端都支持);实时采集不在 supervision 范围内。如果你的应用使用cv2.VideoCapture(0),需要自行安装所选的 OpenCV wheel:
import cv2 import supervision as sv capture = cv2.VideoCapture(0) annotator = sv.BoxAnnotator()桌面显示可以用sv.ImageWindow替代cv2.imshow/cv2.waitKey。0.30.0 新增的sv.ImageWindow基于 tkinter + Pillow,无论装没装 OpenCV wheel 都能用(见 changelog 与 docs/utils/image_window.md)。用它需要系统层面的python3-tk(不是 pip 包):Debian/Ubuntu 上是sudo apt-get install python3-tk,macOS Homebrew/pyenv 是brew install tcl-tk。这与 cv2 的已知差异:wait_key()返回 tkinter keysym 字符串(如"q")或None而不是int,原有key == ord("q")要改成key == "q";鼠标回调签名为(x, y, event_type),且只捕获左键事件。
限制与回退
- 像素级差异只影响对比基线时的可比性,不是 fallback 不可用:标准安装下 supervision 的文档内 API 都保持工作。
- 如果下游图像基线要求迁移前的包行为,可以暂时钉回 0.30 之前的版本,然后单独规划后端迁移:
pip install "supervision<0.30.0"- 依赖层面:0.30.0 为 fallback 视频能力引入了
av>=14.2的依赖要求(见 pyproject.toml 的dependencies),标准安装会自动带上,无需单独处理;另外从 0.30.1 起,选中 OpenCV 后端时import supervision不再加载 PyAV 的原生库,避免了 macOS 上同时装av和opencv-python时的libavdevice重复加载警告。
完成以上步骤后,你得到的状态是:一个明确的后端选择(fallback 或单一 OpenCV wheel 家族)、一条在新进程中输出fallback/opencv的诊断命令,以及一条必要时钉回supervision<0.30.0的回退路径。后续如需了解其他安装问题,可参考 FAQ;完整的迁移背景见 OpenCV 迁移指南。
【免费下载链接】supervisionWe write your reusable computer vision tools. 💜项目地址: https://gitcode.com/GitHub_Trending/su/supervision
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考