AI视频分析算法原理
AI视频分析就是利用AI视觉算法对视频进行逐帧分析,解析出视频帧中的目标、并且进一步推理出每个目标的属性,最后将这些目标、属性保存成结构化数据(能与每帧关联起来)。
u实时类视频分析:要求实时看到分析结果,那么整个过程要求能做到实时性,比如单路视频分析保证FPS能达到原视频的FPS(常见是25)。
u存储类视频分析:分析监控录像,将视频录像文件进行结构化处理存储,结果存于数据库,用于后期快速检索,这类应用无需实时分析,每秒处理25帧和处理5帧对于这类应用影响不大,只是处理完一个录像文件总耗时不同。本篇文章主要介绍实时(Real-Time)视频结构化。
视频从接入到模型推理,再到结果分析、数据呈现,是一个“流式”处理过程:
如上图所示,数据从左往右,涉及到的技术有视频接入、解码、目标检测(一次推理)、目标跟踪、属性分类(二次推理)、数据分析(目标轨迹分析、目标行为分析)、图像叠加、编码。下面详细说一下每个环节涉及到的技术内容。
1、视频接入
在处理视频之前,需要先将视频接入到系统。常见的接入方式有2种,一种就是直接从摄像机(摄像头)直接接入,常见IP摄像机都支持RTSP/28181国标/设备SDK方式接入;第二种就是从视频管理平台接入,所谓管理平台,其实就是管理所有的摄像机视频数据,摄像机先接入平台,其他系统如果需要视频数据,需要通过SDK/协议再从平台接入,这种方式的好处是平台已经适配了所有前端摄像机,其他系统找平台接入视频时逻辑更简单。
2、解码
视频接入到系统之后,紧接着需要做的是解码,因为后面深度学习推理的输入是RGB格式的图片,解码库采用ffmpeg。解码环节的输入输出如下图所示:
上图左边输入视频流二进制数据,经过解码后,输出单张RGB图片序列。
3、目标检测(一级推理)
解码之后得到每帧RGB格式的图片,将图片依次输入目标检测模型,GPU加速推理后得到每帧中的目标。这个环节是一次推理,主要作用是从单帧图像中锁定感兴趣的目标(目标类型、目标可信度、目标位置)。目标检测环节的输入输出如下图所示:
上图左边输入RGB图片序列(可以按batch输入,batch size可以为1),经过目标检测环节后,输出每帧中检测到的目标(类型, 可行度, 目标位置)。
4、目标跟踪
目标检测是单帧处理,视频帧是连续的,如何将前后帧中的目标一一关联起来就叫目标跟踪。目标跟踪的作用是为了后面的轨迹分析,通过轨迹分析得出目标的行为。目标跟踪的算法有很多,最简单最好理解的是IOU方法,通过计算前后帧每两目标区域之间的IOU来关联目标,并赋予该目标唯一ID(标识符),之后的轨迹分析全部基于该ID。目标跟踪环节的输入输出如下:
上图左边输入前后两帧的目标(M*N),经过跟踪环节后,将M和N个目标一一关联,赋予目标ID。
5、属性分类(二级推理)
对于检测得到的目标,有可能需要进一步对某些属性进行推理,比如检测到了一辆车,需要进一步确认它是什么车(轿车、SUV还是皮卡)?还需要知道该车什么颜色(白色、黑色还是黄色)?如果检测到人,还需要知道是男是女?年龄性别?因此,对于每个检测得到的目标,需要根据该目标位置(left、top、width、height)裁剪出目标图像,输入到第二个模型中进行推理,称之为二次推理。二次推理环节的输入输出如下:
上图左边输入检测到的人(根据尺寸位置裁剪,可以按batch输入,batch size可以为1),经过属性分类环节后,输出每个目标的各个属性值。注意:上图推理模型为多输出模型(multi-outputs),可以同时为多个属性分类。
6、结果分析
根据具体的业务逻辑,可以做一些具体的数据分析,比如根据目标组合或目标轨迹判断目标的行为,具体逻辑根据实际需要进行扩展,前提是前几个环节可以产生足够的数据,比如模型能检测出来充分的属性值。