如何用 supervision 估算视频中目标的速度
发布时间:2026/9/10 7:12:13 锦皓数字建站

如何用 supervision 估算视频中目标的速度【免费下载链接】supervisionWe write your reusable computer vision tools. 项目地址: https://gitcode.com/GitHub_Trending/su/supervision这篇文章解决的任务是速度估算给定一段交通监控视频对每帧运行目标检测模型用 ByteTrack 持续跟踪每个目标把目标位置投影到地面平面再根据位移与时间差算出速度最后输出一份带 km/h 速度标注的视频。supervision 仓库在 examples/speed_estimation 目录下提供了现成的 speed estimation 示例本文按该示例走完整流程。前提条件Python 环境要求 Python 3.10supervision 的安装要求见 README如果使用 Roboflow Inference 变体需要 Roboflow API key通过--roboflow_api_key参数或ROBOFLOW_API_KEY环境变量提供。这个示例如何估算速度先理解管线因为输出视频里的速度值来自下面几个环节完整实现见 rfdetr_example.py检测对每帧运行模型。推荐模型是 RF-DETR其predict方法直接返回Detections对象无需转换步骤。RF-DETR 脚本还按VEHICLE_CLASS_IDS [3, 4, 6, 8]只保留车辆相关类别再用with_nms(thresholdiou_threshold)去重。区域过滤sv.PolygonZone(polygonSOURCE)用一个画在画面上的四边形SOURCE圈出地面分析区域只保留锚点落在区域内的检测。跟踪sv.ByteTrack(frame_ratevideo_info.fps, ...)为每个车辆分配持久的tracker_id。透视投影ViewTransformer用cv2.getPerspectiveTransform把每个框的BOTTOM_CENTER锚点目标接地点从图像平面投影到TARGET平面。示例中TARGET尺寸是TARGET_WIDTH x TARGET_HEIGHT25 x 250这一步用于校正镜头透视变形。速度计算为每个tracker_id维护一个deque(maxlenint(video_info.fps))的历史队列记录目标平面上的 y 坐标与帧号。当历史足够长至少 2 帧且首末帧间隔不小于fps的一半时用distance / elapsed_time * 3.6得到 km/h 速度标签显示为#tracker_id speed km/h历史不足时只显示#tracker_id。也就是说视频里的速度是目标平面位移 时间跨度算出的估算值其准确度取决于SOURCE/TARGET的标定质量。准备环境与视频数据克隆仓库并进入示例目录文档指定develop分支git clone --depth 1 -b develop https://gitcode.com/GitHub_Trending/su/supervision cd supervision/examples/speed_estimation可选用uv创建并激活虚拟环境文档标注此步为 optionaluv venv source .venv/bin/activate安装依赖uv pip install -r requirements.txtrequirements.txt 一次性包含 RF-DETR、Ultralytics、Inference 和 legacy YOLO-NAS 各变体的依赖其中super-gradients3.5.0只用于保留的 YOLO-NAS 参考脚本。接着下载示例视频。video_downloader.py调用supervision.assets的download_assets(VideoAssets.VEHICLES)创建data/目录并把vehicles.mp4下载到其中python video_downloader.py判断成功的依据是data/vehicles.mp4文件存在VEHICLES资产对应的就是vehicles.mp4见 assets 列表。如果你想用自己的视频把它放到任意位置后用--source_video_path指过去即可但要先阅读文末的标定说明。运行速度估算主路径RF-DETR文档给出的运行命令python rfdetr_example.py \ --source_video_path data/vehicles.mp4 \ --target_video_path data/vehicles-result.mp4 \ --confidence_threshold 0.3 \ --iou_threshold 0.5参数说明以 README 的 script arguments 一节为准--source_video_path必填要分析的视频--target_video_path输出视频路径不传时结果实时显示、不保存文件--confidence_threshold检测置信度阈值默认0.3同时作为 ByteTrack 的track_activation_threshold--iou_thresholdNMS 阈值默认0.7文档运行命令里用的是0.5--device可选仅 rfdetr / ultralytics 变体支持取值cpu、mps、cuda默认cpu。其余变体是可选分支按你手边的模型选择其一Inference 变体需要 API key默认模型rfdetr-smallpython inference_example.py \ --roboflow_api_key ROBOFLOW_API_KEY \ --source_video_path data/vehicles.mp4 \ --target_video_path data/vehicles-result.mp4 \ --confidence_threshold 0.3 \ --iou_threshold 0.5--roboflow_api_key不传时脚本会尝试读取ROBOFLOW_API_KEY环境变量两者都没有时脚本直接抛出ValueError。--model_id可以换 Roboflow 模型 ID。Ultralytics 变体脚本内固定使用 YOLO 权重见 ultralytics_example.pypython ultralytics_example.py \ --source_video_path data/vehicles.mp4 \ --target_video_path data/vehicles-result.mp4 \ --confidence_threshold 0.3 \ --iou_threshold 0.5YOLO-NAS 变体yolo_nas_example.py仅作为 legacy 参考保留文档不建议新项目使用这里不再展开。一处文档不一致需要留意README 的参数说明把--source_weights_pathYOLO 模型权重路径列为必填但同一 README 的运行命令没有传它当前示例脚本的函数签名中也没有该参数。以 README 运行命令一节为准执行即可。验证结果脚本跑完后按两点核对输出文件data/vehicles-result.mp4生成每帧画有目标框、轨迹和标签。其中TraceAnnotator的trace_length取int(video_info.fps * 2)大致显示最近 2 秒的轨迹。标签内容跟踪历史积累足够的车辆标签变为#tracker_id 整数 km/h的形式如#4 57 km/h标签格式来自示例代码具体数值随视频内容而定刚进入区域、历史不足的目标只显示#tracker_id。实时显示模式下未传--target_video_path标注帧出现在名为frame的窗口里按q键退出。换成自己的视频前必须知道的限制README 中有明确的 IMPORTANT 提示如果你要在自己的视频上运行速度估算脚本必须调整SOURCE和TARGET配置而且要针对每个摄像头视角单独标定。示例中的SOURCE四边形np.array([[1252, 787], [2298, 803], [5039, 2159], [-550, 2159]])和 25 x 250 的TARGET平面是专为vehicles.mp4的画面标定的SOURCE是图像平面上的地面参考四边形TARGET是它对应的标定后地面平面两者成对作为ViewTransformer的输入。不重新标定就直接跑自己的视频得到的数值没有意义。另外两个限制sv.ByteTrack已被文档标记 deprecated官方 Track Objects 指南 建议使用外部trackers包中的ByteTrackTracker替代其更新方法名为update()不是update_with_detections()。速度估算示例目前仍使用sv.ByteTrack照着跑没有问题如果你基于示例改管线注意这一差异。PolygonZone是锚点式的判定默认检查BOTTOM_CENTER锚点是否落在多边形内不是严格的框与多边形相交检测。对这个任务来说这正是预期行为——参与速度计算的本来就是车辆的接地锚点。【免费下载链接】supervisionWe write your reusable computer vision tools. 项目地址: https://gitcode.com/GitHub_Trending/su/supervision创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。