目标到底移动得有多快?我用 YOLO + ByteTrack 做了视频速度估计
项目地址yolo-object-detection-lab:基于 FastAPI 与 Ultralytics YOLO 的图像目标检测实验项目 - AtomGit前面几篇里这个项目已经从目标检测一路做到Single Image → Batch Images → Video → Tracking → Line Crossing → ROI Analysis → Trajectory Heatmap → Multi-ROI Flow做到这里之后已经可以回答目标是什么是不是同一个目标有没有经过某条线进入了哪个区域在区域里停留多久从哪个区域去了哪里但还有一个很自然的问题这个目标到底移动得有多快所以这一次我继续在 YOLO ByteTrack 的基础上加入第九种模式Speed Estimation用 Track ID 的连续位置变化估计目标在视频中的运动速度。一、这次做的不是“直接算车速”先说明一个很重要的问题。普通单目视频里如果没有真实世界尺度标定就不能直接把像素位移写成30 km/h 50 km/h因为图像里100 px到底代表 1 米还是 10 米取决于摄像机位置、透视关系和目标所在区域。所以这次我把速度分成两种Pixel Speed单位px/s以及完成尺度标定之后才允许使用的m/s km/h这次真实运行结果主要使用的是px/s 模式这样不会为了得到“看起来像真实车速”的数字而强行换算。二、速度怎么从 ByteTrack 轨迹算出来ByteTrack 已经能够给每个目标一个稳定的 Track ID。例如person #13 car #15 car #16每一帧都会得到这个目标新的位置。和前面 ROI、Line Crossing 一样这次仍然使用Bottom-center Anchor也就是 Bounding Box 底部中心anchor_x (x1 x2) / 2 anchor_y y2原因也很直接对于行人它更接近脚落在地面的位置对于车辆它也更接近车辆在道路上的实际位置。三、Pixel Speed 的计算假设同一个 Track 在两帧中的位置分别是P1 (x1, y1) P2 (x2, y2)像素位移distance_px sqrt((x2 - x1)^2 (y2 - y1)^2)再根据两帧时间差delta_time计算speed_px_s distance_px / delta_time最终单位就是px/s比如80 px/s表示这个目标在图像平面中每秒大约移动 80 个像素。四、为什么不能直接显示单帧速度目标检测框不是完全稳定的。即使目标实际运动很平滑bbox 也可能出现左抖一下 右抖一下 突然跳几像素如果直接拿每两帧的位置算速度就很容易出现30 42 38 160 35 40这种明显抖动。所以这次加入了Smoothing Window我实际使用5并采用Moving Average也就是用最近 5 个速度样本求平均。最终页面主要展示的是Smoothed Speed而不是完全依赖单帧瞬时值。五、还需要过滤异常位移除了普通抖动还有一种更严重的情况Track 在某一帧突然跳到了很远的位置。这种情况可能来自检测框变化 遮挡 Track 重关联 目标重新出现所以这次增加了Max Pixel Jump真实测试设置为200 px如果单帧位置跳变超过这个范围就不会直接把这次异常位移纳入正常速度统计。这样可以避免一个异常帧把整个 Track 的平均速度拉得特别高。六、真实测试参数这次继续使用前面几篇一直测试的道路视频Resolution: 1920×1080 FPS: 29.97 Total Frames: 962 Duration: 32.10 s实际参数Confidence Threshold: 0.55 Frame Interval: Every Frame Smoothing Window: 5 Smoothing Method: Moving Average Max Pixel Jump: 200 px Speed Threshold: 0 Display Unit: px/s Show Track Trails: ON Trail Length: 30七、962 帧完整跑完最终运行结果962 / 962 Frames 100%处理时间74.9 sTracking 得到Unique Tracks: 37 Tracks With Speed: 34也就是说整个视频一共识别到 37 个不同 Track其中 34 个拥有足够连续的位置数据可以计算速度。八、真实速度统计结果最终 Speed SummaryUnique Tracks: 37 Tracks With Speed: 34 Average Pixel Speed: 80.8 px/s Max Pixel Speed: 2047.1 px/s这里要注意2047.1 px/s不是2047 km/h它只是图像平面中的像素速度峰值。像素速度会受到透视关系 目标距离摄像机远近 检测框尺寸变化 目标运动方向等因素影响。所以它更适合同一视频 同一区域 相同摄像机条件下的相对速度分析。九、每一个 Track 都能单独看速度这次页面还增加了Track Speed Table每个目标都会记录Track ID Class Frames Average Speed Max Speed Distance Duration例如一个 Car Track 可以看到Average: xx px/s Max: xx px/s Distance: xxx px Duration: x.xx s而 Person、Car 等不同类别也可以分别查看。这就比单纯显示Current Speed更有用因为它能够看完整个 Track 生命周期中的运动情况。十、结果视频里可以直接看实时速度最终 Result Video 中仍然保留Bounding Box Track ID Class Confidence Trajectory Speed这样在视频播放过程中就能看到目标位置变化和速度统计同步更新。相比只看最后的表格视频更容易判断为什么这个 Track 某一段速度突然变快某个目标是不是因为靠近摄像机导致像素速度明显增加十一、为什么有 37 个 Track但只有 34 个能算速度因为速度至少需要两个有效时间点如果某个目标只出现很短时间例如1 帧或者缺乏连续有效位置那么就没有办法计算Δdistance / Δtime所以Unique Tracks和Tracks With Speed本来就不应该完全相同。这次实际是37 ↓ 34属于正常结果。十二、还加入了两点尺度标定除了 px/s这次也实现了一个简单的Two-point Calibration用户可以在视频首帧上点击P1 P2然后输入这两个点在真实世界中的已知距离。例如5 m系统就可以得到一个局部近似比例meters_per_pixel之后理论上可以把px/s转换为m/s km/h不过这种两点标定需要谨慎使用。因为道路视频存在明显透视远处 100 px和近处 100 px通常并不代表相同的真实距离。所以这种方法更适合在比较小的局部平面区域内做近似尺度估计。如果需要更严格的真实速度还应该进一步加入Homography Perspective Transform Birds-eye View做道路平面标定。十三、为什么这篇主要展示 px/s这也是我这次刻意保留的设计。如果没有足够可靠的标定信息程序就只显示px/s而不是自动生成一个xx km/h因为后者看起来更“高级”但很容易产生误导。这次真实测试中Average Pixel Speed 80.8 px/s这个数字虽然不是实际道路车速但它是从真实 Track 位置和真实视频 FPS 中计算出来的。它可以用于同一场景下比较快慢 发现异常运动 轨迹行为分析 后续标定前的数据验证十四、Speed Threshold这次还预留了Speed Threshold可以设置100 px/s或者标定以后设置10 km/h当 Track 超过阈值时可以生成SPEED_THRESHOLD Event不过这次实际测试中设置为0所以Speed Events 0没有启用阈值事件。这里也没有把它写成“超速事件”因为除非用户提供真实道路限速和可靠标定否则这里只能叫Speed Threshold Event而不是交通意义上的“超速”。十五、支持结果导出Speed Estimation 也支持Export Speed JSON Export Tracks CSV Export Speed Events CSVJSON 可以保存video metadata settings calibration speed summary tracks eventsTracks CSV 则适合后续用Excel Pandas继续统计平均速度 最大速度 运动距离 持续时间而且导出使用的是当前已经完成的结果不会重新跑 YOLO。十六、391 个测试全部通过加入 Speed Estimation 以后项目完整测试增加到391 pytest passed前端257 assertions passed新增测试主要覆盖Bottom-center Anchor Pixel Distance px/s delta_time Moving Average Median Outlier Filter Track History Average / Max Speed Distance Calibration m/s km/h Threshold Event 0 Track Stale Result Reset YOLODetectorError而之前所有模式Single Image Batch Images Video Tracking Line Crossing ROI Heatmap Multi-ROI都没有回归。十七、现在这个项目已经有 9 种模式做到这里以后整个项目已经变成Single Image ↓ Batch Images ↓ Video Detection ↓ ByteTrack Tracking ↓ Line Crossing ↓ ROI Occupancy Dwell ↓ Trajectory Heatmap ↓ Multi-ROI Flow ↓ Speed Estimation每一步其实都在回答一个新的问题。最开始这是什么后来它是不是刚才那个目标再后来它去了哪里经过了哪里在哪里停留最常走哪些区域从哪个区域去了哪个区域而现在它移动得有多快总结这次真实运行结果962 Frames 37 Unique Tracks 34 Tracks With Speed Average Pixel Speed: 80.8 px/s Max Pixel Speed: 2047.1 px/s Processing Time: 74.9 s整个速度估计链路可以概括成YOLO ↓ ByteTrack ↓ Track ID ↓ Bottom-center Anchor ↓ Frame-to-frame Distance ↓ delta_time ↓ Pixel Speed ↓ Smoothing ↓ Outlier Filtering ↓ Speed Statistics同时还加入了可选的两点尺度标定为后续px/s → m/s → km/h预留了接口。项目地址yolo-object-detection-lab:基于 FastAPI 与 Ultralytics YOLO 的图像目标检测实验项目 - AtomGit下一步如果继续往下做我准备进一步加入Perspective Calibration Birds-eye View把现在的像素速度估计继续往更接近真实世界尺度的运动分析推进。

相关新闻

无人自助拼豆系统核心功能实现与全链路部署实战开发指南

无人自助拼豆系统核心功能实现与全链路部署实战开发指南

无人自助拼豆系统核心功能实现与全链路部署实战开发指南 无人自助拼豆是面向线下DIY娱乐场景的无人化解决方案,针对传统拼豆店需要专人值守、营业时间受限、人力成本高的痛点,结合物联网、移动开发技术实现全流程自助化,用户到店扫码即可开启…

2026/10/14 18:09:36 阅读更多 →
数据中心智能巡检机器人:轮式方案选型与部署实战

数据中心智能巡检机器人:轮式方案选型与部署实战

简介:这份PDF文档围绕智能巡检机器人在数据中心的应用展开分析,面向数据中心运维工程师、智能化改造方案设计者及人工智能技术学习者,帮助解决机房安全运维复杂度高、人工巡检频次大等实际问题。资源包共1个PDF文件,约898KB&#…

2026/10/14 18:09:36 阅读更多 →
调节阀CV计算与流量系数选型:从公式到现场避坑指南

调节阀CV计算与流量系数选型:从公式到现场避坑指南

简介:调节阀CV值计算是工业自动化中流量控制与阀门选型的关键基础,决定了系统调节品质与设备运行稳定性。文档以Word格式整理了调节阀口径计算的发展脉络,从1915年FISHER GOVERNER公司的图表法,到1962年FCI 58-2流量测定方法&…

2026/10/14 18:09:36 阅读更多 →

最新新闻

区间DP解“拿糖果”:从贪心误区到最优策略实战解析

区间DP解“拿糖果”:从贪心误区到最优策略实战解析

说实话,我第一次看到“拿糖果”这道题的时候,差点把它当成热身题给秒了。题面本身非常朴素:有 n 堆糖果排成一行,每堆糖果数量用一个整数数组表示,两个人轮流从最左端或最右端拿走一整堆,直到全部取完&…

2026/10/15 0:46:40 阅读更多 →
光通信技术突破:陶瓷封装与智能光功率控制解析

光通信技术突破:陶瓷封装与智能光功率控制解析

1. 光通信行业现状与易天定位光纤通信作为现代信息社会的基石,其市场规模在过去五年保持着年均12%的复合增长率。根据行业调研数据显示,2023年全球光模块出货量已突破1.8亿只,其中数据中心互连场景占比达到47%。在这个快速扩张的市场中&#…

2026/10/15 0:46:40 阅读更多 →
CEC2010到CEC2017:进化计算基准测试集完整指南与避坑经验

CEC2010到CEC2017:进化计算基准测试集完整指南与避坑经验

简介:面向进化计算与智能优化领域的研究者、工程师及高校学生,这份测试集汇总了CEC2010、CEC2013、CEC2014、CEC2015、CEC2017等历届单目标实参数优化竞赛的基准问题,可用于验证和对比各类新颖优化算法的寻优能力与收敛性能。压缩包内共516个…

2026/10/15 0:45:39 阅读更多 →
Z源逆变器仿真建模与PWM控制策略详解

Z源逆变器仿真建模与PWM控制策略详解

1. Z源逆变器概述与仿真意义Z源逆变器作为电力电子领域的重要拓扑结构,近年来在新能源发电、电动汽车和工业驱动等领域展现出独特优势。与传统电压源型和电流源型逆变器不同,Z源网络通过独特的阻抗网络实现了升降压功能,同时避免了传统拓扑中…

2026/10/15 0:45:39 阅读更多 →
普通程序员有没有必要学习 Agent 开发?从零手写 ReAct Agent 到 LangGraph 实战

普通程序员有没有必要学习 Agent 开发?从零手写 ReAct Agent 到 LangGraph 实战

一、先说结论:有必要,而且窗口期就在当下 如果你是一个每天写 CRUD、调接口、改 Bug 的普通后端 / 前端 / 全栈程序员,看到「Agent」「智能体」这些词,第一反应很可能是:“这不就是调一下大模型 API 吗?跟我…

2026/10/15 0:45:39 阅读更多 →
深入理解 Claude Code:CLAUDE.md、Hooks、Skills、Subagents 全解析

深入理解 Claude Code:CLAUDE.md、Hooks、Skills、Subagents 全解析

1. 引言 Claude Code 是 Anthropic 推出的命令行 AI 编程助手,它不仅能理解自然语言指令,还能通过一系列机制实现高度可定制、可扩展的自动化编码工作流。对于想要真正驾驭 Claude Code 的开发者来说,仅仅会提问远远不够,理解其四…

2026/10/15 0:45:39 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →