视频结构化类应用涉及到的技术栈比较多,而且每种技术入门门槛都较高,比如视频接入存储、编解码、深度学习推理、rtmp流媒体等等。每个环节的水都非常深,单独拿出来可以写好几篇文章,如果没有个几年经验基本很难搞定。本篇文章简单介绍视频结构化类应用涉及到的技术栈,以及这类应用常见结构,因为是实时视频分析,因此这类应用基本都是管道(pipeline)设计模式。本篇文章算是科普入门介绍文章,不涉及详细技术细节,适合这方面的新手。

所谓视频结构化,就是利用深度学习技术对视频进行逐帧分析,解析出视频帧中感兴趣的目标、并且进一步推理出每个目标感兴趣的属性,最后将这些目标、属性保存成结构化数据(能与每帧关联起来)。如果是实时类应用,要求实时看到分析结果,那么整个过程要求能做到实时性,比如单路视频分析保证FPS能达到原视频的FPS(常见是25)。当然,还有另外一类结构化类应用并不要求做到实时性,比如分析监控录像,将视频录像文件进行结构化处理,结果存于数据库,用于后期快速检索,这类应用不用做到实时分析,打个比方,每秒处理25帧和处理5帧对于这类应用影响不大,只是处理完一个录像文件总耗时不同。本篇文章主要介绍实时(Real-Time)视频结构化。

上图中实时将结构化数据叠加在视频画面中,图中红色多边形为人工配置检测区域(ROI),ROI之外的目标可以忽略。

视频结构化常见Pipeline

视频从接入,到模型推理,再到结果分析、界面呈现,是一个“流式”处理过程,我们可以称为pipeline,对于实时视频结构化类应用,要求整个pipeline各个环节均能满足性能要求,做到实时处理,某个环节达不到实时性,那么整个pipeline就有问题。下面是我整理出来的视频结构化处理pipeline,这个设计基本可以满足要求,有些pipeline可能不长这样,但是大同小异。

如上图所示,数据从左往右移动。涉及到的技术有视频接入、解码、目标检测(一次推理)、目标跟踪、属性分类(二次推理)、数据分析(目标轨迹分析、目标行为分析、数据存储)、图像叠加、编码、rtmp推流。下面详细说一下每个环节涉及到的技术内容。

视频接入

在处理视频之前,需要先将视频接入到系统。常见的接入方式有2种,一种就是直接从摄像机(摄像头)直接接入,常见IP摄像机都支持RTSP/28181国标/设备SDK方式接入;第二种就是从视频管理平台接入,所谓管理平台,其实就是管理所有的摄像机视频数据,摄像机先接入平台,其他系统如果需要视频数据,需要通过SDK/协议再从平台接入,这种方式的好处是平台已经适配了所有前端摄像机,其他系统找平台接入视频时逻辑更简单。

解码

视频接入到系统之后,紧接着需要做的是解码,因为后面深度学习推理的输入是RGB格式的图片。常见解码库可以采用ffmpeg,ffmpeg入门简单,但是如果想做好、适配实际现场各种情况却需要很多经验。解码环节的输入输出如下图所示:

上图左边输入视频流二进制数据,经过解码后,输出单张RGB图片序列。

目标检测(一级推理)

解码之后得到每帧RGB格式的图片,将图片依次输入目标检测模型,GPU加速推理后得到每帧中感兴趣的目标。这个环节是一次推理,主要作用是从单帧图像中锁定感兴趣的目标(目标类型、目标可信度、目标位置)。常见目标检测算法有yolo系列、ssd、rcnn系列。目标检测环节的输入输出如下图所示:

上图左边输入RGB图片序列(可以按batch输入,batch size可以为1),经过目标检测环节后,输出每帧中检测到的目标(类型, 可行度, 目标位置)。

目标跟踪

目标检测是单帧处理,视频帧是连续的,如何将前后帧中的目标一一关联起来就叫目标跟踪。目标跟踪的作用是为了后面的轨迹分析,通过轨迹分析得出目标的行为。目标跟踪的算法有很多,最简单最好理解的是IOU方法,通过计算前后帧每两目标区域之间的IOU来关联目标,并赋予该目标唯一ID(标识符),之后的轨迹分析全部基于该ID。目标跟踪环节的输入输出如下:

上图左边输入前后两帧的目标(M*N),经过跟踪环节后,将M和N个目标一一关联,赋予目标ID。

属性分类(二级推理)

对于检测得到的目标,有可能需要进一步对某些感兴趣的属性进行推理,比如我们检测到了一辆车,我们需要进一步确认它是什么车(轿车、SUV还是皮卡)?还需要知道该车什么颜色(白色、黑色还是黄色)?因此,对于每个检测得到的目标,我们需要根据该目标位置(left、top、width、height)裁剪出目标图像,输入到第二个模型中进行推理,我们称之为二次推理。二次推理环节的输入输出如下:

上图左边输入检测到的车辆(根据尺寸位置裁剪,可以按batch输入,batch size可以为1),经过属性分类环节后,输出每个目标的各个属性值。注意:上图推理模型为多输出模型(multi-outputs),可以同时为多个属性分类。

结果分析

根据具体的业务逻辑,我们可以在这里做一些具体的数据分析,比如根据目标轨迹判断目标行为是否合法(车辆逆行、车辆停车),根据进入画面行人特征(年龄、性别、穿着、交通工具)来判断该目标是否是犯罪嫌疑人(自动告警)。这块的逻辑根据实际需要可以自行扩展,当然前提是前几个环节可以产生足够的数据,比如模型能检测出来充分的属性值。

数据持久化

该环节可以将前面产生的结构化数据存入数据库(可以将其与帧编号关联起来,或者与视频时间戳关联),后面方便快速检索。同时,通过行为分析环节,如果发现重要结果(比如发现嫌疑人、比如发现有车辆逆行),可以实时上报服务器。

图像叠加(OSD)

为了便于实时查看画面分析结果,我们需要在该环节将前面的结构化数据叠加到原始图片帧上。该环节很简单,按照数据格式使用opencv等图像库将其绘制到图片即可,同样我们还可以将目标轨迹叠加在图片上。

上图中将前面检测到的目标,跟踪轨迹,按照不同的颜色绘制到原始图片帧上。

编码 + RTMP推流

图像叠加之后,只能在本地看效果,实际工程中通常是将叠加之后的图片序列进行编码,然后通过rtmp等方式推送到nginx等流媒体服务器,其他用户可以通过rtmp地址查看实时叠加效果。

上图中,经过编码、rtmp推流后,其他用户可以使用对应地址播放叠加流。

[AI开发]零代码分析视频结构化类应用结构设计的更多相关文章

  1. [AI开发]基于DeepStream的视频结构化解决方案

    视频结构化的定义 利用深度学习技术实时分析视频中有价值的内容,并输出结构化数据.相比数据库中每条结构化数据记录,视频.图片.音频等属于非结构化数据,计算机程序不能直接识别非结构化数据,因此需要先将这些 ...

  2. [AI开发]视频结构化类应用的局限性

    算法不是通用的,基于深度学习的应用系统不但做不到通用,即使对于同一类业务场景,还需要为每个场景做定制.特殊处理,这样才能有可能到达实用标准.这种局限性在计算机视觉领域的应用中表现得尤其突出,本文介绍基 ...

  3. [AI开发]零代码公式让你明白神经网络的输入输出

    这篇文章的标题比较奇怪,网上可能很少类似专门介绍神经网络的输入输出相关文章.在我实际工作和学习过程中,发现很有必要对神经网络的输入和输出做一个比较全面地介绍.跟之前博客一样,本篇文章不会出现相关代码或 ...

  4. 视频结构化 AI 推理流程

    「视频结构化」是一种 AI 落地的工程化实现,目的是把 AI 模型推理流程能够一般化.它输入视频,输出结构化数据,将结果给到业务系统去形成某些行业的解决方案. 换个角度,如果你想用摄像头来实现某些智能 ...

  5. DeepLearning.ai学习笔记(三)结构化机器学习项目--week2机器学习策略(2)

    一.进行误差分析 很多时候我们发现训练出来的模型有误差后,就会一股脑的想着法子去减少误差.想法固然好,但是有点headlong~ 这节视频中吴大大介绍了一个比较科学的方法,具体的看下面的例子 还是以猫 ...

  6. VP视频结构化框架

    完成多路视频并行接入.解码.多级推理.结构化数据分析.上报.编码推流等过程,插件式/pipe式编程风格,功能上类似英伟达的deepstream和华为的mxvision,但底层核心不依赖复杂难懂的gst ...

  7. VideoPipe可视化视频结构化框架开源了!

    完成多路视频并行接入.解码.多级推理.结构化数据分析.上报.编码推流等过程,插件式/pipe式编程风格,功能上类似英伟达的deepstream和华为的mxvision,但底层核心不依赖复杂难懂的gst ...

  8. [AI开发]零数学公式告诉你什么是(卷积)神经网络

    大部分介绍神经网络的文章中概念性的东西太多,而且夹杂着很多数学公式,读起来让人头疼,尤其没什么基础的人完全get不到作者想要表达的思想.本篇文章尝试零公式(但有少量数学知识)说清楚什么是神经网络,并且 ...

  9. DeepLearning.ai学习笔记(三)结构化机器学习项目--week1 机器学习策略

    一.为什么是ML策略 如上图示,假如我们在构建一个喵咪分类器,数据集就是上面几个图,训练之后准确率达到90%.虽然看起来挺高的,但是这显然并不具一般性,因为数据集太少了.那么此时可以想到的ML策略有哪 ...

随机推荐

  1. E. Remainder Problem 分块

    两个操作 1对x位置的a[x]+y 2对所有i=y(mod x)求a[i]的和 我们肯定不能n^2 跑,稳超时,但是我们可以这样分块考虑. 为什么n^2不行?因为在x比较小的时候,这个求和操作次数太多 ...

  2. Top 10 open source projects of 2015

    Top 10 open source projects of 2015 Posted 15 Dec 2015Jen Wike Huger (Red Hat)Feed 188 up 31 comment ...

  3. nginx简单使用(windows)

    本篇文章对术语不作讲解 下载nginx 首先,进入nginx官网http://nginx.org/en/download.html. 找到Stable version,此处的版本是稳定版本: 下载完成 ...

  4. vue4——把输入框的内容添加到页面(简单留言板)

    文章地址:https://www.cnblogs.com/sandraryan/ vue最最最简单的demo(记得引入) 实例化一个vue,绑定#app的元素,要渲染的数组arr作为data. 把ar ...

  5. lodap问题集锦

    1.分页打印时,同一行显示在不同页内 ,调整行分页粒度 LODOP.SET_PRINT_STYLEA(0, "TableRowThickNess", 40);

  6. Unity5.6.4f1 配置WebGL教程

    Unity 5.6.4f1 发布WebGL的配置教程 步骤一:先查看自带的Unity是否yi配置好WebGL的项,若无,则可遵循以下教程来设置 步骤二:下图是我已经设置好的,未设置好的状态是,有个Op ...

  7. springboot 实现 aop

    pom.xml 导入 springboot aop 依赖 <dependency> <groupId>org.springframework.boot</groupId& ...

  8. javascript和jquery 移除事件 和 改变样式

    javascript移除事件: document.getElementById("word").onmouseover = null; javascript改变样式: docume ...

  9. servicemix 实例 -- 参考open source ESBs in action这本书

    1. 项目结构 2. bean服务处理单元 1)Person类 package esb.chapter3; import java.io.StringWriter; import javax.xml. ...

  10. Bi-LSTM-CRF for Sequence Labeling

    做了一段时间的Sequence Labeling的工作,发现在NER任务上面,很多论文都采用LSTM-CRFs的结构.CRF在最后一层应用进来可以考虑到概率最大的最优label路径,可以提高指标. 一 ...