老周是工业园区的“活监控”。白天,他在汽车车间巡查工人的操作是否规范;下午,他被借到体育馆帮教练复盘比赛录像;夜里,他坐在安防监控室盯着几十块屏幕。二十年的经验让他练就一项绝活:从不单看某一帧画面,而是把画面“连成故事看”——一个人前一秒还在好好走路,后一秒突然矮了半截,那多半是摔倒了;篮球场上两个人猛然贴身又弹开,那多半是一次犯规。他说:“照片是死的,过程才是活的。”本文要讲的工业视频分析,就是给 AI 装上老周这双“会读时间”的眼睛:理解视频中动作与时序的变化,并在安防、体育、制造三大场景里落地成真正能用的系统。你将一路从视频的基本概念、动作识别与时序建模的核心方法,走到工具链、评估体系与项目实践,最终拥有把“看懂过程”变成产品的系统化能力。

岗位关联

对多模态 AI 开发工程师而言,视频理解与时序建模是从“图像选手”升级为“视频系统架构师”的核心分水岭——掌握它,你才能把 AI 从实验室搬到真实的摄像头前。

目录
  1. 可视化演示
  2. 视频基本概念
  3. 动作识别核心
  4. 工程工具链
  5. 安防场景落地
  6. 体育智能分析
  7. 制造安全质检
  8. 评估与指标
  9. 项目落地实践
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示安防视频异常行为预警、体育视频运动员追踪与战术分析、制造产线视频质检监控三大工业视频分析场景。

本节配有交互动效(进入视口后自动加载,约 3KB)。

安防视频分析:异常行为预警 P=人员追踪 正常行为绿色标注 异常行为红色圈选 ALERT实时预警 action_recognition(video) -> anomaly_alert 时序动作理解区分正常与异常行为

视频基本概念

老周刚当保安时,师父丢给他一叠照片,让他找出里面谁是小偷。他翻了三遍也没头绪,师父笑了:“照片是死的,你得看监控。画面一动起来,谁在紧张、谁在靠近、谁在翻东西,全藏在时间里。”视频本质上就是“会动的照片集”:按顺序快速播放的一组帧(frame),人的肉眼看到的是连续动作,而计算机看到的,只是一个巨大的数据块。

在计算机眼里,一段视频是一个四维张量(tensor),四个维度分别是:时间、高度、宽度、通道。可以这样理解:图像是 H×W×C 的三维数组——高、宽、颜色通道;视频只是在前面多加了一个时间轴 T。好比老周监控室里的录像机,每一秒的磁带都对应“一叠照片”,播放时按时间顺序一帧帧翻过去。

帧率(FPS,每秒钟播放多少帧)是视频分析绕不开的基础参数。工业现场通常取 10~25 FPS 就够用:跌倒、打架、违规动作都是“秒级”事件,真正关键的不是画面多细腻,而是时间上不丢失关键瞬间。整段视频在算法中的形状如下:

理解了“视频是四维数据块”,也就理解了老周为何比新手强:老周的大脑里自动维护着一条时间轴,而 AI 要做的第一件事,就是把这条时间轴老老实实地装进模型。后续所有的动作识别与时序建模,都是围绕这个 T 维度做文章。

V∈RT×H×W×C\displaystyle V \in \mathbb{R}^{T \times H \times W \times C}
这个公式只是说:一段视频在计算机里就是一个四维数组,T 是帧数,H、W 是每帧的高和宽,C 是颜色通道数(RGB 图像为 3)。
  1. 视频张量 V整段视频在计算机中的存放形式,一个四维数组,等价于老周手里那盘“按秒排列的照片集”。
    VV
  2. 属于符号 ∈表示 V 属于某类数学对象,即“V 是一个实数组”。
    ∈\in
  3. 实数域 ℝ像素值的取值空间,每个像素是 0~255 之间的实数。
    R\mathbb{R}
  4. 时间维度 T视频共有 T 帧画面,这是视频区别于图像的灵魂——“过程”就藏在 T 里。
    TT
  5. 空间维度 H 与 W每帧画面的高与宽,决定单张“照片”清晰到什么程度。
    H×WH \times W
  6. 通道维度 C每个像素的颜色通道数,彩色 RGB 视频为 3。
    CC

动作识别核心

老周最得意的一件事:有次监控里一个人走着走着突然矮了半截,他 0.5 秒内就按下了报警键。领导问他怎么做到的,他说:“走路和摔倒,区别不在某一帧,而在前面十几帧的变化。”这正是动作识别(action recognition)的本质:动作是一种时序模式。单看一张静态图,“躺在地上”和“正在摔倒”几乎一模一样,但把前后帧连起来,一个是静止、一个是突变。

深度学习时代,让模型“看懂过程”有三条主流路线。第一条是 3D 卷积:把普通卷积核从“平面”变成“立体”,一次扫过长、宽、时间三个方向,像老周把三秒内的画面叠成一摞再逐层翻看。第二条是双流网络:参考老周的两只眼分工——空间流(spatial stream)看单帧的轮廓与姿态,时间流(temporal stream)看相邻帧间的运动变化(光流)。第三条是视频 Transformer:像老周的值班笔记,让每一个时刻都能“回看”整段视频里的重要瞬间,进行全局建模。

3D 卷积的数学形式如下:

老周眼里的“变化”,在 3D 卷积里就是沿时间滑动的 τ;双流网络的两只“眼睛”各司其职;Transformer 则等价于他随身的值班笔记。三条路线殊途同归,都在回答同一个问题:“这段时间里,到底发生了什么?”

yt,h,w=∑τ=−kk∑i=−kk∑j=−kkwτ,i,j⋅xt+τ, h+i, w+j+b\displaystyle y_{t,h,w} = \sum_{\tau=-k}^{k} \sum_{i=-k}^{k} \sum_{j=-k}^{k} w_{\tau,i,j} \cdot x_{t+\tau,\,h+i,\,w+j} + b
这个公式描述了 3D 卷积核如何同时沿时间、高度、宽度三个方向滑动,把“周围一个立方体”的像素加权求和,得到一个新的特征值。
  1. 输出特征 y卷积后某个时空位置 (t,h,w) 上的响应值,相当于老周在某个时刻对画面的“反应强度”。
    yt,h,wy_{t,h,w}
  2. 三重求和卷积核沿时间、高度、宽度三个方向滑动,把一个三维邻域内的信息全部收进来。
    ∑τ=−kk∑i=−kk∑j=−kk\sum_{\tau=-k}^{k} \sum_{i=-k}^{k} \sum_{j=-k}^{k}
  3. 权重与输入相乘卷积核参数 w 与对应位置的像素值 x 相乘再累加,学习“什么样的时空模式该被激活”。
    wτ,i,j⋅xt+τ, h+i, w+jw_{\tau,i,j} \cdot x_{t+\tau,\,h+i,\,w+j}
  4. 时间偏移 τ让卷积核的视野覆盖当前帧的前后 k 帧,这是“看过程”的关键。
    τ=−k,…,k\tau = -k, \dots, k
  5. 偏置 b叠加一个可学习常数,让模型拟合能力更强。
    +b+ b

工程工具链

老周的工作台上摆着三样东西:对讲机、记录本、巡逻车钥匙。工具虽简单,缺一样都干不了活。工业视频分析也一样,算法只是“眼力”,要让眼力在生产环境里变现,还需要一整套工具链:视频解码与采样、训练框架、推理引擎、运维监控,环环相扣。

训练阶段通常用 PyTorch 配合 MMAction2、MMDetection 等开源库完成。预处理的第一步是“从视频里抽帧”:直接逐帧暴力处理算力吃不消,工程上一般做时序采样——每隔一段取一帧,且要保证采样点在时间上均匀分布,不能都挤在开头或结尾。均匀采样公式如下:

推理阶段,训练好的模型要转成 ONNX 或 TensorRT 格式做加速,部署在 GPU 服务器或边缘盒子上;上线后还要持续监控每路视频的帧率、显存占用和告警延迟,就像老周每次交接班都要检查对讲机有没有电、记录本有没有写满。工具链解决的是“从论文到值班室”的最后一公里:实验室里 2 秒出一帧没问题,产线上 2 秒一帧,事故早就过去了。

ti=⌊i×TN⌋,i=1,2,…,N\displaystyle t_i = \left\lfloor \frac{i \times T}{N} \right\rfloor, \quad i = 1, 2, \dots, N
这个公式解决“从 T 帧里均匀抽出 N 帧”的问题:把整个视频等分成 N 份,每份取一帧代表,保证采样不偏科。
  1. 采样帧编号 t_i从原始视频中抽出的第 i 帧,在原始帧序列里的位置。
    tit_i
  2. 下取整符号把计算结果向下取整,保证得到的是合法整数帧号。
    ⌊⋅⌋\left\lfloor \cdot \right\rfloor
  3. 比例采样把总帧数 T 按目标帧数 N 等分,第 i 份的位置就是采样点,相当于老周巡逻时“每 100 米打一个点”。
    i×TN\frac{i \times T}{N}
  4. 遍历下标 ii 从 1 到 N 取遍所有目标帧,恰好得到 N 个均匀分布的采样帧。
    i=1,2,…,Ni = 1, 2, \dots, N

安防场景落地

老周的晚班关键词是“防出事”:老人跌倒、打架斗殴、陌生人闯入、人群拥挤。每一类都是不同的“时间故事”,对应不同的时序建模方案。安防是工业视频分析里最成熟、也最能体现“时间价值”的场景。

跌倒检测是行业落地最多的场景。核心思路非常朴素:先用目标检测和关键点估计拿到人体框,再在时间维度上观察“高宽比”的变化。人直立时,人体框高远大于宽;摔倒的瞬间,高度骤降、宽度骤增。检测公式如下:

打架识别通常从光流强度和关键点间距入手,捕捉“高频大幅运动 + 两人距离过近”的组合特征;入侵检测则是在画面中划定虚拟周界(电子围栏),一旦有目标跨越边界立即告警;人群异常则统计人群密度与运动方向混乱度,拥挤或踩踏发生前往往伴随速度场的紊乱。这些任务共享同一个技术底座——检测与跟踪,加上一层时序判断,本质上都是老周那一句:“过程不对劲,就是出事的前兆。”

Δr=∣h(t)w(t)−h(t−Δt)w(t−Δt)∣\displaystyle \Delta r = \left| \frac{h(t)}{w(t)} - \frac{h(t - \Delta t)}{w(t - \Delta t)} \right|
这个公式计算“高宽比的变化量”:一段时间内人体框从竖长条变成横长条,变化量超过阈值就判定为跌倒。
  1. 高宽比变化量 Δr反映姿态在几帧之内“由直立变横躺”的剧烈程度。
    Δr\Delta r
  2. 当前帧高宽比第 t 帧人体框高度与宽度的比值,直立时远大于 1。
    h(t)w(t)\frac{h(t)}{w(t)}
  3. 前一时刻高宽比Δt 之前的高宽比,作为“刚才还是正常姿势”的对照基准。
    h(t−Δt)w(t−Δt)\frac{h(t - \Delta t)}{w(t - \Delta t)}
  4. 绝对值符号只关心变化的大小,不关心是变高还是变矮。
    ∣⋅∣\left| \cdot \right|
  5. 工程判据实际部署时加上“跌倒后保持低姿态若干秒”的条件,避免把“躺下休息”误报为“摔倒”。
    Δr>θ\Delta r > \theta

体育智能分析

白天老周偶尔被借调到体育馆,帮教练复盘比赛录像。教练要的可不是进球回放,而是“谁在什么时候跑了多快、传了几次球、阵型怎么变的”。体育分析的核心,就是把场上每个球员变成一条“带时间标签的信息流”,然后用算法读懂它。

第一步是多人追踪:先检测出每帧所有球员的位置,再用 IoU 匹配和 ReID 外观特征把同一个人在帧间关联起来,解决遮挡时的 ID 互换——好比老周认人不光看脸,还看球衣号码和跑动习惯。第二步是动作分类:投篮、传球、铲球属于短时动作,用 2+1D 卷积或时序 Transformer 分类。第三步是战术统计:把每个人的轨迹聚合成跑动距离、冲刺速度和全场热力图,速度计算公式如下:

精彩集锦则由“事件检测”驱动:模型识别到射门、得分、关键犯规等动作后,自动向前回卷 15~30 秒进行剪辑,相当于老周用对讲机朝导播喊一句:“切 4 号机位,回放!”在体育场景里,AI 不只是“看热闹的眼睛”,更是“懂门道的分析师”——它把老周脑子里那些说不清道不明的经验,变成了可量化、可检索、可回放的数据资产。

v=(xt−xt−1)2+(yt−yt−1)2Δt\displaystyle v = \frac{\sqrt{(x_t - x_{t-1})^2 + (y_t - y_{t-1})^2}}{\Delta t}
这个公式用两帧之间的位移除以时间得到速度,是跑动距离、冲刺次数等一切战术统计的地基。
  1. 速度 v球员在相邻两帧间的移动速度,单位是像素/秒或米/秒。
    vv
  2. 前后帧坐标(x_t, y_t) 与 (x_{t-1}, y_{t-1}) 分别是当前帧和上一帧的目标中心位置。
    (xt,yt),(xt−1,yt−1)(x_t, y_t), \quad (x_{t-1}, y_{t-1})
  3. 欧氏距离用勾股定理把横纵位移合成直线距离,即“这一瞬间真正跑了多远”。
    (xt−xt−1)2+(yt−yt−1)2\sqrt{(x_t - x_{t-1})^2 + (y_t - y_{t-1})^2}
  4. 时间间隔 Δt两帧之间的时间差,把距离除以时间就得到速度。
    Δt\Delta t

制造安全质检

下午老周去车间巡查。他盯三件事:工人有没有戴安全帽、操作动作符不符合规程、产品表面有没有缺陷。“这些都能在监控里看出来,”他说,“但靠人盯一百个工位,盯不过来。”制造场景的视频分析,本质是给流水线配一个永不疲劳的安全员。

安全合规检测最常见的就是 PPE(个人防护装备)检测:用目标检测识别安全帽、工服、手套,再用区域规则判断“头在工位但没戴帽子”,一旦违规立即抓拍。操作规范识别则更进一步:把装配动作拆成一个个工步序列,用时序动作分段(Temporal Action Segmentation)判断工人有没有跳步或违规,比如“先装密封圈、再拧螺栓”的顺序不能颠倒。手部与危险区的距离判定公式如下:

表面缺陷检测(划痕、脏污、缺件)如果只看单帧,很容易被反光和阴影骗过;工程上会把传送带上的历史帧一起送进模型,用时序上下文区分“真缺陷”和“光照误检”。效率统计则用轨迹分析计算每个工位的节拍时长、识别瓶颈工序,相当于老周掐着秒表,比较“熟手和新手的差距到底差在哪一步”。制造场景最迷人的地方在于:它不抓坏人、不评冠军,只是安安静静地让每一道工序都更安全、更规范、更高效。

d=(xh−xz)2+(yh−yz)2\displaystyle d = \sqrt{(x_h - x_z)^2 + (y_h - y_z)^2}
这个公式计算手部关键点与危险区域(如冲压机、传送带接口)的直线距离,距离低于安全阈值就触发减速或停机。
  1. 手部坐标 (x_h, y_h)人体关键点估计得到的手腕位置,代表“工人正在碰哪里”。
    (xh,yh)(x_h, y_h)
  2. 危险区坐标 (x_z, y_z)冲压机、刀具、传送带接口等危险边界的最近点坐标。
    (xz,yz)(x_z, y_z)
  3. 坐标差平方逐轴做差再平方,消除负号并放大远距离的惩罚。
    (xh−xz)2,(yh−yz)2(x_h - x_z)^2, \quad (y_h - y_z)^2
  4. 欧氏距离 d手与危险区的直线距离,是判定“是否越界”的直接依据。
    d=Δx2+Δy2d = \sqrt{\Delta x^2 + \Delta y^2}

评估与指标

每月底老周都要挨考核:漏报一次(有人摔倒没看见),这个月全勤奖没了;误报一次(把影子当人),白跑一趟还显得不专业。安防场景里,漏报和误报的成本严重不对称——这直接塑造了工业视频分析的评估体系。

学术上最常用的是精确率(Precision)、召回率(Recall)和 F1 分数。精确率衡量“报出来的事件里有多少是真的”(别老误报),召回率衡量“真实事件里有多少被抓住”(别漏报),F1 是两者的调和平均,综合打分:

业务侧还要紧盯实时指标:端到端延迟(从事件发生到告警弹出花了多久)、每路视频的处理帧率、单路成本;此外要做鲁棒性压测——在夜间低光照、雨天、逆光、遮挡等恶劣条件下分别验证,就像老周在暴雨天、深夜、监控死角三种条件下分别“出警演习”。给“AI 老周”定 KPI,不能只看眼睛多尖,更要看叫你的时候靠不靠谱。指标选错了,模型再好也落不了地。

F1=2×P×RP+R,P=TPTP+FP,R=TPTP+FN\displaystyle F_1 = \frac{2 \times P \times R}{P + R}, \quad P = \frac{TP}{TP + FP}, \quad R = \frac{TP}{TP + FN}
这套公式是分类模型的“体检报告”:TP 是抓对的事件,FP 是误报,FN 是漏报;P 管“别乱报”,R 管“别漏报”,F1 取两者平衡。
  1. 三个基础计数TP(真正例)是命中,FP(假正例)是误报,FN(假负例)是漏报。
    TP,FP,FNTP, \quad FP, \quad FN
  2. 精确率 P在所有报警中,真正发生事件的比例;越高说明保安越“靠谱”。
    P=TPTP+FPP = \frac{TP}{TP + FP}
  3. 召回率 R在所有真实事件中,被成功发现的比例;越高说明眼睛越“尖”。
    R=TPTP+FNR = \frac{TP}{TP + FN}
  4. F1 调和平均当 P 和 R 都很高时 F1 才高,防止模型“偏科”。
    F1=2×P×RP+RF_1 = \frac{2 \times P \times R}{P + R}

项目落地实践

老周带过十几个徒弟,带法固定:先在监控室坐一个月,熟悉地形和画面;再跟着学“看过程”,练出感觉;最后独立值守,每天复盘。工业视频分析的项目落地,也是这个套路——数据、选型、适配、迭代,一步都不能跳。

第一步是数据标注。动作的起止边界要标到帧级,比如“跌倒”要定义清楚是从失去平衡那一帧算起,还是身体触地那一帧算起。标注标准不统一,模型上限就被锁死。第二步是模型选型。安防服务器算力充足,可以上大模型;边缘盒子只有几瓦功耗,只能选轻量化模型,这是一场精度与速度的权衡。第三步是场景适配。开源模型在通用视频上训练,必须用现场数据做迁移学习和微调,才能适应车间的俯视视角、复杂光照和密集遮挡——就像新徒弟要先熟悉这个园区的地形。第四步是持续迭代。上线后不断收集漏报样本、人工复核、回流训练,形成数据闭环。

规划系统时,端到端延迟预算是最好用的工具:

老周把毕生经验浓缩成一句话:“看懂视频不是天赋,是方法。”工业视频分析也一样:从基础概念到算法原理,从工具链到行业场景,从评估体系到落地节奏,每一步都有章可循。掌握了这套方法,你也能训练出属于自己的「AI 老周」。

Ltotal=Ldecode+Lpreprocess+Linfer+Lpostprocess\displaystyle L_{total} = L_{decode} + L_{preprocess} + L_{infer} + L_{postprocess}
这个公式把“从摄像头到告警”的总延迟拆成四段,哪一段超标就优化哪一段,避免凭感觉乱调。
  1. 端到端延迟 L_total从事件发生到系统输出告警的总耗时,是安防系统的生命线。
    LtotalL_{total}
  2. 解码段 L_decode视频流从 H.264 等编码还原成原始帧的耗时。
    LdecodeL_{decode}
  3. 预处理段 L_preprocess抽帧、缩放、归一化等数据准备耗时。
    LpreprocessL_{preprocess}
  4. 推理段 L_infer模型前向计算的核心耗时,通常占大头,可用 TensorRT 等加速。
    LinferL_{infer}
  5. 后处理段 L_postprocess阈值判断、告警组装、消息推送的耗时。
    LpostprocessL_{postprocess}

AI 应用场景

智慧园区跌倒与入侵告警

阶段:模型推理部署与实时告警

解决的问题:传统安防靠保安同时盯几十路屏幕,注意力随时间急剧下降,深夜最容易漏报。利用视频理解中的姿态估计与时序判断,AI 能对每一路画面保持“永不眨眼”的警觉,把跌倒、闯入等事件从“事后查录像”变成“秒级主动告警”。

具体案例:某养老园区部署 200 路摄像头,在边缘盒子上运行轻量化动作识别模型,跌倒事件平均响应时间从人工发现约 3 分钟缩短到 8 秒,误报率控制在每千小时 2 次以内,护工收到告警推送后 1 分钟内到场确认。

足球赛事自动战术统计与集锦生成

阶段:视频数据分析与内容生成

解决的问题:教练组手工统计跑动距离、传球次数和阵型变化,一场比赛要花一整天。通过多人追踪、动作分类和轨迹聚合,AI 在赛后十几分钟内自动输出全队热力图、每位球员的冲刺次数和关键事件片段,让战术复盘从“凭印象”变成“看数据”。

具体案例:某中超俱乐部引入视频分析系统,每场比赛自动生成球员跑动距离排名、传球网络图以及射门、抢断等精彩集锦,教练组据此调整体能训练计划和阵型安排,球员的无效跑动在半个赛季内下降了 12%。

汽车产线操作合规检测

阶段:质量控制在制品检验与安全生产

解决的问题:质量工程师抽检只能覆盖不到 10% 的工位,违规操作往往在下一步装配时才暴露。利用关键点估计与动作分段识别,AI 能全天候监督每个工位的操作顺序,违规瞬间自动抓拍上报,把质量防线从“末端抽检”前移到“过程管控”。

具体案例:某主机厂总装线在 120 个工位部署摄像头,检测“先装密封圈再拧螺栓”等标准工步顺序,系统上线后工步合规率从 92% 提升到 99.6%,因顺序错误导致的返工成本下降约 40 万元/年。

Python 演示

python76 行
"""基于关键点时序特征的动作识别演示(工业视频分析入门版)。 用模拟的人体关键点序列,复现老周的「看过程」能力:跌倒检测。"""import math  def simulate_walk(duration, fps=10):    """生成「持续行走」的模拟帧列表,每帧为 (中心x, 中心y, 人体宽, 人体高)"""    frames = []    for i in range(duration * fps):        t = i / fps        x = 10 + t * 3        y = 180 - 3 * math.sin(t)        frames.append((x, y, 30, 150))    return frames  def simulate_fall(duration, fps=10):    """生成「走着走着跌倒」的模拟帧列表,模拟摔倒时身高变矮、体宽变大"""    frames = []    start = 25    for i in range(duration * fps):        t = i / fps        x = 10 + min(t * 3, 75)        if i < start:            y = 180 - 3 * math.sin(t)            w, h = 30, 150        else:            alpha = min((i - start) / 25.0, 1.0)            y = 180 + alpha * 20            w = 30 + alpha * 120            h = 150 - alpha * 130        frames.append((x, y, w, h))    return frames  class FallDetector:    """用「人体高宽比 + 指数平滑」做时序判别的跌倒检测器"""     def __init__(self, alpha=0.7, ratio_threshold=0.6):        self.alpha = alpha        self.ratio_threshold = ratio_threshold        self.smooth_ratio = None     def push_frame(self, frame):        cx, cy, w, h = frame        if h <= 0 or w <= 0:            ratio = 1.0        else:            ratio = h / w        if self.smooth_ratio is None:            self.smooth_ratio = ratio        self.smooth_ratio = self.alpha * self.smooth_ratio + (1 - self.alpha) * ratio        is_fall = self.smooth_ratio < self.ratio_threshold        return is_fall, self.smooth_ratio  def run_demo(name, frames):    detector = FallDetector()    fall_count = 0    total = len(frames)    print("== %s ==" % name)    for idx, frame in enumerate(frames):        is_fall, ratio = detector.push_frame(frame)        if is_fall:            fall_count += 1        if idx % 10 == 0:            state = "跌倒" if is_fall else "正常"            print("帧 %3d  高宽比=%.2f  ->  %s" % (idx, ratio, state))    print("判定为跌倒的帧数: %d / %d (%.1f%%)\n" % (fall_count, total, 100.0 * fall_count / total))  if __name__ == "__main__":    run_demo("正常行走", simulate_walk(6))    run_demo("中途跌倒", simulate_fall(6))
目的:用模拟的人体框序列演示“高宽比 + 指数滑动平均”这一最朴素的时序跌倒检测器,完全复现老周“看着看着发现人矮了半截”的判断逻辑。
  1. frames.append((x, y, 30, 150))正常行走时人体框高 150、宽 30,高宽比稳定在 5 左右。
  2. w = 30 + alpha * 120倒地过程中人体框逐渐变宽,模拟“人横过来”的过程。
  3. h = 150 - alpha * 130身高逐渐变矮,高宽比随之骤降。
  4. ratio = h / w计算当前帧的人体高宽比:直立远大于 1,倒地接近 0.1。
  5. self.smooth_ratio = self.alpha * self.smooth_ratio + (1 - self.alpha) * ratio指数滑动平均,滤掉单帧抖动,类似老周靠“记忆”判断而不是只看一眼。
  6. is_fall = self.smooth_ratio < self.ratio_threshold平滑后的比值低于 0.6 就判为跌倒。
  7. run_demo("中途跌倒", simulate_fall(6))用 6 秒“走着走着摔倒”的模拟视频验证检出效果。

常见误区

误区把视频每一帧抽出来分别做图像分类,最后统计哪个类别多,不就能做动作识别了吗?为什么还要那么复杂的时序模型?

正解这种“帧级投票”丢掉了最宝贵的时间信息。“躺在地上”和“正在摔倒”在单帧里几乎无法区分,但把它们连起来看,一个是静止、一个是突变。老周能及时报警,不是因为他看清了某一帧,而是因为他记得“前一秒这个人还在走路”。时序建模正是给模型装上这段“记忆”。

为何常见:图像分类教程最多、上手最容易,新手自然想“把问题降维成图像问题”,却忽略了视频相对图像的本质增量恰恰是时间维度。

误区工业场景追求真实,最好上 60 FPS 甚至更高,这样任何瞬间都不会错过。

正解帧率翻倍,每路视频的计算量几乎翻倍,端到端延迟和硬件成本同步上升。工业落地通常 10~25 FPS 就够:跌倒、打架、违规操作都是“秒级”事件,关键是把有限的算力花在“时间窗口更长、覆盖更广”上,而不是盲目堆帧率。

为何常见:直觉上“看得越勤越安全”,但忽略了算力预算,以及相邻帧之间极高的信息冗余。

误区模型准确率 99%,上线肯定没问题,不需要再看别的指标。

正解准确率在类别不均衡时极具迷惑性——如果 99.9% 的帧都是正常事件,模型“永远报正常”也能拿到 99.9% 的准确率。安防场景必须区分漏报与误报的代价,用 F1、误报率(如每千小时误报次数)来评估,就像老周考核:白跑十趟是尴尬,漏掉一次是事故。

为何常见:教学场景习惯用准确率,形成评估惯性;没有仔细算过“类别不均衡”这笔账。

误区MMAction2 里那些预训练模型那么强,下载下来直接部署到车间不就行了?

正解预训练模型学的是通用视频(厨房、校园、社交媒体),而工业现场是俯视或枪机视角、复杂光照、密集遮挡,分布差异极大,直接推理会产生大量误报。正确做法是用现场数据做迁移学习、微调,再小流量灰度验证——就像老周带新徒弟,先让他在监控室坐一个月熟悉这个园区的地形。

为何常见:开源模型在演示视频上效果惊艳,容易让人高估其对特定工业场景的泛化能力。

误区给视频打个“跌倒”的标签就行了吧?和图像分类打标签差不多。

正解时序标注的难点在“边界”:动作在第几帧开始、第几帧结束?跌倒可能持续两秒,但“开始失去平衡”只有几帧宽。标注规范必须精确到帧级(比如“脚离地到身体着地”),并要求不同标注员之间的标注一致性达到可接受范围。标注边界的质量,直接决定时序模型的上限。

为何常见:图像标注的思维惯性,忽略了动作的起止是一个时间区间,而不是一个静态的类别标签。

面试题

Q1. 与单张图像相比,视频数据多出的关键维度是?

单选题 · easy

  • A.通道数维度
  • B.时间维度← 正确答案
  • C.像素维度
  • D.压缩维度

答案:B。用老周的比喻:照片是死的,监控是“会动的故事”。图像是 H×W×C 三维张量,视频多了一条时间轴 T,变成 T×H×W×C 四维张量,正是时间维让动作识别成为可能。其他选项是图像本身就有的属性。

Q2. 视频帧率(FPS)表示的含义是?

单选题 · easy

  • A.每秒处理的图像帧数← 正确答案
  • B.每帧图像的像素总数
  • C.视频文件的压缩比例
  • D.关键帧的间隔时长

答案:A。帧率即每秒采集或播放的画面数量,相当于老周的眼睛一秒“眨”多少次;工业视频分析常取 10~25 FPS,既能抓住关键瞬间又不浪费算力。B 属于分辨率概念,C 属于压缩概念,D 属于编码概念。

Q3. 3D 卷积与 2D 卷积的核心区别在于?

单选题 · easy

  • A.卷积核多了时间维度← 正确答案
  • B.输入必须是彩色图像
  • C.输出通道数一定更多
  • D.完全不需要激活函数

答案:A。2D 卷积仅在 H、W 两个方向滑窗,3D 卷积的核多了一个 τ 时间轴,一次覆盖“长宽 + 时间”三个方向——好比老周不是只看一张照片,而是把前后十几帧叠在一起看变化。B、C、D 均不是本质区别。

Q4. 下列哪些属于常见的时序建模方法?

多选题 · mid

  • A.用循环网络LSTM建模← 正确答案
  • B.用三维卷积3DCNN← 正确答案
  • C.用双流网络并行融合← 正确答案
  • D.用支持向量机分类

答案:ABC。LSTM 擅长建模序列依赖,3D CNN 直接在时间维度卷积,双流网络融合空间与时间信息,三者都是“让模型看见过程”的手段。SVM 是经典静态分类器,无法直接建模时序关系。

Q5. 双流网络中,两个分支的输入分别是什么?

单选题 · mid

  • A.RGB帧和光流序列← 正确答案
  • B.单帧图像加音频
  • C.文本描述加图像
  • D.前景目标加背景

答案:A。双流网络对应老周的双眼分工:空间流输入单帧 RGB,看“谁、什么姿态”;时间流输入相邻帧间的光流,看“怎么动、动多快”。两者并行提取特征后融合决策,音频、文本不是双流网络的典型输入。

Q6. 跌倒检测中观察人体高宽比变化,主要是为了捕捉?

单选题 · mid

  • A.画面颜色突变
  • B.姿态横竖翻转← 正确答案
  • C.人脸数量变化
  • D.环境亮度波动

答案:B。直立时人体框高远大于宽,摔倒瞬间高度骤降、宽度骤增,高宽比从“远大于 1”快速跌向“小于 1”——这正是老周说的“突然矮了半截”。颜色、人脸数量、环境亮度与跌倒没有因果关系。

Q7. 安防视频分析项目评估时应重点关注?

多选题 · mid

  • A.漏报率指标← 正确答案
  • B.误报率指标← 正确答案
  • C.F1分数指标← 正确答案
  • D.模型参数量指标

答案:ABC。安防场景漏报会酿成事故、误报会让保安空跑,两者代价不对等,所以要用精确率、召回率和 F1 综合评估;参数量只影响部署资源,不直接反映业务效果,不应作为核心评估项。

Q8. 体育分析中多人长时间追踪的主要挑战是?

单选题 · hard

  • A.相互遮挡与ID切换← 正确答案
  • B.场地颜色太鲜艳
  • C.帧率过高算不动
  • D.球员球衣颜色统一

答案:A。当两名球员靠近甚至重叠时,检测框合并、外观特征被遮挡,容易发生 ID 互换(跟丢后把 A 当成 B)。工程上常用 IoU 匹配加 ReID 外观特征缓解。B、C、D 是工程细节,并非多人追踪的核心难点。

Q9. 制造产线“操作规范识别”通常需要哪些能力组合?

多选题 · hard

  • A.人体关键点估计← 正确答案
  • B.时序动作分段← 正确答案
  • C.安全距离判定← 正确答案
  • D.随机数据生成增强

答案:ABC。先估计关键点得到手部与躯干位置,再用时序动作分段判断工步顺序(如先装密封圈再拧螺栓),最后用距离规则判断是否进入危险区,三者叠加才能完成规范识别。随机数据生成不解决结构化动作理解问题。

Q10. 端到端告警延迟超标时,下列哪项优化通常收益最小?

单选题 · extreme

  • A.加速视频解码
  • B.优化推理引擎
  • C.增加标注样本量← 正确答案
  • D.降低处理帧率

答案:C。延迟由解码、预处理、推理、后处理四段组成:解码可用硬解加速,推理可用 TensorRT 优化,降低帧率可减少每路负载;而标注量只影响模型精度,几乎不改变单次推理延迟。正确做法是先分段定位瓶颈再优化,就像老周排查问题:先分清是看得慢、跑得慢,还是对讲机坏了。