基于ZLMediaKit实现多摄像头场景下的低延迟AI识别,是一项需要从采集、编码、传输、转发到AI推理全链路协同优化的系统工程。以下从架构设计、配置调优、AI链路优化、系统资源四个维度展开。
一、架构与协议选择
1. 拉流架构 vs 推流架构
传统方案采用AI推理后以RTMP推流给ZLMediaKit再转WebRTC播放,延迟普遍在2-5秒。根本原因是推流模式在发送端容易产生缓冲区堆积。
推荐方案:采用拉流架构——AI推理后的视频流封装为RTSP Server,由ZLMediaKit主动拉取,再转为WebRTC供浏览器播放。实测端到端延迟可降至50-100ms。
2. 多路视频分层设计
在多摄像头场景下,并非所有流都需要超低延迟。主控流与预览流分层是核心思路:
类型
延迟要求
码率
适用场景
主控流
<300ms
高码率、不转码
FPV、用户当前关注的主画面
预览流
普通延迟
低码率(720p/480p、5-15fps)
辅助预览、小窗展示
当用户选中某一路预览画面后,再将其升级为主控流。这能有效控制公网带宽和服务器成本。
3. 协议优先级
协议 ...
可以。当前我没法直接进入你的 Linux 主机执行命令,但你可以在 k3s 所在服务器上直接跑下面这一套,我把检查、启动、状态确认和安全清理未使用镜像都放进去了。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758echo "===== 1. k3s 服务状态 ====="sudo systemctl status k3s --no-pager -l || trueechoecho "===== 2. k3s 是否开机启动 ====="sudo systemctl is-enabled k3s || trueechoecho "===== 3. k3s 是否正在运行 ====="sudo systemctl is-active k3s || trueechoecho "===== 4. 磁盘空间 ====="df -hechoecho " ...
视频切片
本文记录如何使用 FFmpeg 将 MP4 视频切片为 HLS 格式,适用于 Web 播放、点播视频分发、移动端播放等场景。
1. 目标
将一个输入视频:
1input.mp4
转换为 HLS 点播资源:
123456index.m3u8init.mp4seg_00000.m4sseg_00001.m4sseg_00002.m4s...
其中:
index.m3u8 是 HLS 播放列表文件
init.mp4 是 fMP4 初始化文件
seg_00000.m4s、seg_00001.m4s 等是视频切片文件
最终可以通过支持 HLS 的播放器播放 index.m3u8。
2. FFmpeg 切片命令
12345678910111213141516ffmpeg -y -i input.mp4 \ -map 0:v:0 -map "0:a:0?" \ -r 30 -fps_mode cfr \ -c:v libx264 -preset veryfast -crf 23 \ -bf 0 -refs 1 \ -g 180 -keyint ...
Label Studio 导入 Roboflow COCO 数据集(S3 存储)最佳实践
本文档总结了一套已验证有效的流程,用于将 Roboflow Universe 导出的 COCO 格式数据集导入 Label Studio,并利用 S3 存储提供图片访问。
✅ 适用场景
数据集来源:Roboflow Universe 导出的 COCO JSON 格式(含 _annotations.coco.json 和图片)
存储方式:Amazon S3(或其他兼容 S3 协议的对象存储)
Label Studio 版本:社区版(已验证,支持 label-studio-converter 和 S3 源存储)
📋 前提条件
已安装 label-studio-sdk(包含 label-studio-converter 工具):
1pip install label-studio-sdk
或直接安装转换器:
1pip install label-studio-converter
具备 AWS S3 访问权限:
有读写(或至少读取)权限的 Access Key ID 和 S ...
🔍 内容详情
我老婆是杭州某公司开发人员,突然遭遇公司大规模裁员。
我此贴记录一下全过程。
离职纠纷记录
D+1天 公司突然谈话,说工资开到月底(给7天补偿,没有N+1),然后第二天人不用来了
D+2天 公司OA门禁系统被关闭。报警110,110核实到门禁被关闭了
D+3天 给公司发送《限期恢复劳动条件通知书》
D+3天 约见律师(这里为什么很简单的案子要找律师呢?因为我公司公积金只交最低金额,我们为了公积金额度高一点,选择按照自己工资全额缴纳,但是金额是从自己工资扣除,公司还是只承担最低的金额,这一笔金额数额较大,我们担心自己去打的话这一项仲裁委或者法院很难支持 )
D+3天 线上政务平台投诉社保和公积金,公积金中心回复需要按照克扣工资去劳动仲裁处理
D+4天 早上,公司签收《限期恢复劳动条件通知书》
D+4天 下午,公司以『不能胜任工作』直接解除劳动合同
D+6天 委托律师发送律师函,主张加班费、2n、应休未休节假日、公积金克扣项目等费用
D+6天 到税务局提交工资流水、社保缴费记录等材料
D+9天 到劳动监察大队投诉公司不给开具离职证明
D+18天 公司回复可以开离职证明,但是 ...
Linux 清理“内存/垃圾”可以分几类来做。先说重点:不要频繁手动清内存缓存,Linux 会自动把空闲内存拿来做缓存,这是正常的,不等于内存泄漏。
1. 查看内存占用
1free -h
重点看这一行:
1available
如果 available 还很多,就不用清。
也可以看进程:
1top
或者更舒服:
1htop
没有的话安装:
1sudo apt install htop
2. 临时清理内存缓存
这个会释放 page cache、dentries、inodes:
12sudo syncecho 3 | sudo tee /proc/sys/vm/drop_caches
也可以分开:
12345678# 只清 page cacheecho 1 | sudo tee /proc/sys/vm/drop_caches# 清 dentries 和 inodesecho 2 | sudo tee /proc/sys/vm/drop_caches# 全部清echo 3 | sudo tee /proc/sys/vm/drop_caches
一般用这个就够:
1sudo sync &am ...
12345678910111213141516171819202122232425results/yolo26s_epochs100_batch32_t4x2/yolo26s/weightsresults/yolo26s_epochs100_batch32_t4x2/yolo26s/weights/best.ptresults/yolo26s_epochs100_batch32_t4x2/yolo26s/weights/last.ptresults/yolo26s_epochs100_batch32_t4x2/yolo26s/args.yamlresults/yolo26s_epochs100_batch32_t4x2/yolo26s/BoxF1_curve.pngresults/yolo26s_epochs100_batch32_t4x2/yolo26s/BoxP_curve.pngresults/yolo26s_epochs100_batch32_t4x2/yolo26s/BoxPR_curve.pngresults/yolo26s_epochs100_batch32_t4x2/y ...
🔍 内容详情
如果最终要部署到边缘设备,不建议只训练 yolo26l。
你可以这样理解:
12A100 是训练机器,不代表最终部署机器边缘设备关心:推理速度、显存/内存、功耗、延迟
所以你的选择应该是:
目标
推荐模型
先验证最高效果
yolo26l
边缘设备平衡版
yolo26m
边缘设备实时优先
yolo26s
很弱的边缘设备
yolo26n
只在服务器/A100/T4/4090 跑
yolo26l / yolo26x
我的建议
你现在可以这样训练三版:
1231. yolo26l:作为高精度基准2. yolo26m:作为边缘主力模型3. yolo26s:作为实时兜底模型
最后拿同一个视频测试:
1234检测效果FPS漏检情况误检情况
再决定部署哪个。
边缘优先,先训练 yolo26m
你可以把正式训练改成:
12345678910!python scripts/train.py \ --train-img-dir data/VisDrone2019-DET-train/images \ --train-ann-dir data/VisD ...
🔍 内容详情
YOLO 检测模型不要只看“accuracy”,目标检测里主要看这几个参数:
1. 最重要:mAP50 和 mAP50-95
训练日志里这一列:
1Box(P R mAP50 mAP50-95)
重点看:
12mAP50mAP50-95
含义:
指标
含义
怎么看
mAP50
框和真实框 IoU ≥ 0.5 时的平均精度
宽松指标,表示“有没有大概框对”
mAP50-95
IoU 从 0.5 到 0.95 的综合平均精度
严格指标,表示“框得准不准”
一般判断:
1234567mAP50 > 0.5 初步可用mAP50 > 0.7 效果不错mAP50 > 0.8 很好mAP50-95 > 0.25 航拍小目标初步可用mAP50-95 > 0.35 不错mAP50-95 > 0.45 很不错
你这个航拍交通场景是小目标,mAP50-95 不会特别高,很正常。
2. 看漏检:Recall
1Recall / R
表示真实目标里,有多少被模型检出来。 ...
训练日志里最常见的是这一行:
1Class Images Instances Box(P R mAP50 mAP50-95)
1. P / Precision / 精确率
含义:模型检测出来的框里,有多少是真的。
公式大概是:
1Precision = 检测正确的框 / 所有检测出来的框
举例:
1Precision = 0.80
意思是模型检测出来的 100 个框里,大约 80 个是对的,20 个可能是误检。
特点:
12Precision 高:误检少Precision 低:误检多
在你的交通场景里:
1把树、阴影、路牌误检成车 → Precision 会低
2. R / Recall / 召回率
含义:真实存在的目标里,有多少被模型找出来了。
公式大概是:
1Recall = 检测正确的框 / 真实目标总数
举例:
1Recall = 0.38
意思是真实有 100 辆车/人,模型大概只检出了 38 个,漏了 62 个。
特点:
12Recall 高:漏检少Recall 低:漏检多
对你这个项目很重要:
123漏车 → 车辆跟踪断漏人 → 人流统计不准漏检 → 后面 ...
目标:
用 YOLO 做物品 / 人员检测,用 supervision 做追踪、标记、画框、视频流处理,再根据需要接入额外识别模型,最后把识别结果保存到数据库。
1. 这份文档解决什么问题
你现在的需求大概可以拆成几个部分:
1234561. YOLO 训练出来的标记怎么显示到画面上?2. YOLO 检测出来一个框之后,怎么继续接一个额外模型做识别?3. 怎么把画面里的目标标记成 学生1、学生2、学生3?4. 怎么把识别结果保存下来?5. 如果后面真的要做人脸比对,代码应该怎么接?6. 摄像头、RTSP、本地视频怎么传进去?
这份文档给你一个完整方案:
12345678910111213141516171819摄像头 / RTSP / 本地视频 ↓YOLO 主模型检测 ↓supervision.Detections ↓置信度 / 类别过滤 ↓ByteTrack 临时追踪 ↓显示:学生1、学生2、学生3 ↓可选:额外模型识别 ↓可选:人脸 embedding 比对 ↓画框 / 标签 / 轨迹 ↓SQLite 保存事件
2. 先 ...
1. supervision 是什么
supervision 是 Roboflow 开源的 Python 计算机视觉工具库。
它本身不是一个 YOLO 模型,也不是必须依赖云端的服务。
可以把它理解成:
1234567YOLO / 其他检测模型 ↓输出检测框、类别、置信度 ↓supervision.Detections ↓过滤、追踪、画框、计数、区域判断、视频保存
也就是说:
12模型负责识别supervision 负责把识别结果变成可用的业务逻辑
例如 YOLO 每一帧会输出:
123bbox: 框坐标class_id: 类别 IDconfidence: 置信度
supervision 可以继续帮你做:
123456789画框显示标签显示轨迹给目标分配 tracker_id判断是否进入某个区域判断是否越过某条线统计数量保存视频处理摄像头 / RTSP / 本地视频
2. 使用 uv 创建项目
12345mkdir supervision-democd supervision-demouv inituv add ultralytics supervision ope ...
准备一个30分钟内的英文课件,讲解参数化模型(Parametric Models),特别是围绕AR、MA、ARMA模型展开。结合你提供的两份参考资料,我为你梳理了内容框架与重点分析方向,帮助你高效组织课件:
课件结构建议(中英文对照)
1. 引言:什么是参数化模型?
定义:用有限参数描述数据分布或信号生成过程的模型。
与非参数模型的对比(如经典周期图法)。
优点:高分辨率、适用于短数据、理论完备。
2. 参数化谱估计的基本思想
信号 = 白噪声通过线性系统(LTI)生成。
系统函数 H(z) H(z) H(z) 描述信号特性。
目标:从观测数据估计 H(z) H(z) H(z) 的参数,进而估计功率谱。
3. 三大参数化模型详解
(1) AR 模型(自回归模型)
公式:x(n)=−∑aix(n−i)+w(n)\\x(n) = -\sum a_i x(n-i) + w(n) x(n)=−∑aix(n−i)+w(n)
系统函数:H(z)=1A(z) H(z) = \frac{1}{A(z)} H(z)=A(z)1(全极点模型)
优点: ...


















