一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种高性能分布式结合的多路视频实时处理方法与流程

2021-10-24 10:50:00 来源:中国专利 TAG:分布式 高性能 多路 实时 视频处理


1.本发明涉及一种高性能分布式结合的多路视频实时处理方法,属于视频处理技术领域。


背景技术:

2.在智能安防、自动驾驶等诸多场景中,对视频进行语音、文字、人脸、物体、场景多维度分析,自动提取其中发生的一些特定事件或监控目标的特定行为,是基础且十分重要的工作。而实际应用时,视频处理分析的实时性与并发处理的路数是两个非常关键的指标。nvidia公司提供了一套数据流分析工具deepstream,且支持gpu硬件加速。开发者无需设计端到端解决方案,只需专注于构建用于视频分析的核心深度学习网络。但deepstream工具也存在一些不足,由于各模块紧密绑定,动态删除/添加/替换pipeline中的插件,或修改模块功能异常繁琐。


技术实现要素:

3.本发明的目的在于,克服现有技术中存在的问题,提供一种高性能分布式结合的多路视频实时处理方法,视频解码、前处理、模型推理和后处理模块全部分离,使用简单,特别设计的相邻模块间数据存取机制可显著提升多路视频处理效率。
4.为了解决上述问题,本发明的一种高性能分布式结合的多路视频实时处理方法,包括如下步骤:a、构建视频处理pipeline,所述视频处理pipeline包括视频解码模块、视频前处理模块、视频模型推理模块和视频后处理模块;b、开启多进程/线程:每个处理模块开启多进程方式,而每个进程开启多个线程;各模块开启的进程/线程数量,根据业务场景需要、模型性能和软硬件资源限制共同确定;c、构建上下游模块间的共享队列,设置数据存取策略。
5.进一步的,所述开启多进程/线程包括:设视频源路数为;解码模块进程数为,第个解码进程开启的线程数为;前处理模块进程数为,第个前处理进程开启的线程数为;模型推理模块进程数为,第个模型推理进程开启的线程数为;后处理模块进程数为,第个后处理进程开启的线程数为。
6.进一步的,步骤c具体包括如下步骤:c1、视频源数据读取:仅考虑每路视频只能被一个进程/线程解码,一个进程/线程能够解码多路视频的情形,则;令,若满足,其中,,则将第路视频分发至第个解码进程的第个线程;c2、上下游模块进程间数据存取:c21、共享队列数量设置:
记模块与模块间的队列数为,则要求,避免多个进程同时对一个队列操作,从而产生系统切换开销;c22、数据存取策略设计;c23、模型批推理。
7.进一步的,c22具体包括如下步骤:1)情形:上游模块进程与共享队列一一绑定,每个上游模块进程处理完的数据存入各自专有的共享队列,下游模块进程采用拉的方式轮询从共享队列中读取数据;2)情形:上游模块处理进程采用推的方式将处理完的结果数据存放至从共享队列,因此一个上游模块处理进程对应多个共享队列;3)情形:上下游模块进程数均小于共享队列数量,此时采用高性能分布式结合方式进行数据存取。
8.进一步的,c23具体包括如下操作步骤:1)建立临时列表,设置批推理数据大小batch_size;2)以非等待方式从输入队列中读取数据,若成功则将数据保存至临时列表,并进行步骤3),否则跳转至步骤4);3)判断列表长度是否等于batch_size,若是进行步骤4),否则重复进行步骤2);4)对临时列表数据进行模型批推理;5)将临时列表数据置空,重复进行步骤2)。
9.进一步的,所述解码模块使用的工具包括ffmpeg、videoprocessingframework。
10.本发明的有益效果是:1)各处理模块解耦,操作方便。本方法中涉及的视频解码、前处理、模型处理和后处理模块相互独立,因此模块的增加、删除、修改操作易于实现。
11.2)处理效率高。每个处理模块开启多进程方式,且每个进程可以开启多个线程,而上下游模块间特别设计的高性能分布式相结合的数据存取方式,最大化提升多路视频处理效率。
12.3)可扩展性强。本方法不限定实现语言,使用者可根据需要自行选择,如入手门槛低的python语言,或者运行高效的c语言,或者多种语言的组合。
附图说明
13.图1为本发明高性能分布式结合的多路视频实时处理方法的流程框图;图2为本发明中开启多进程/线程视频解码的流程图;图3为本发明中多进程拉方式的存取数据流程图;图4为本发明中多进程推方式存取数据流程图;图5为本发明中多进程结合方式存取数据流程图;图6为本发明中模型批推理流程图。
具体实施方式
14.现在结合附图对本发明作进一步详细的说明。这些附图均为简化的示意图,仅以示意方式说明本发明的基本结构,因此其仅显示与本发明有关的构成。
15.如图1所示,本发明的高性能分布式结合的多路视频实时处理方法,包括如下步骤:a、构建视频处理pipeline,所述视频处理pipeline包括视频解码模块、视频前处理模块、视频模型推理模块和视频后处理模块;解码模块使用的工具包括ffmpeg、videoprocessingframework。
16.视频前处理模块主要是根据业务和模型推理需要,对视频帧进行一些变换操作,如图像灰度化、像素值标准化、图像缩放。视频模型推理模块嵌入的主要是深度学习模型,根据业务场景需要对视频内容进行分析,如目标检测、行人跟踪、姿态估计、动作识别。视频后处理模块主要是对模型推理结果进一步分析处理,如目标检测中nms操作、业务逻辑判断。
17.本发明可以根据业务需要多次调用同一种基础模块,如连续调用两个模型推理模块,前一个视频模型推理模块的结果作为后一个视频模型推理模块的输入。
18.b、开启多进程/线程:每个处理模块开启多进程方式,而每个进程开启多个线程;各模块开启的进程/线程数量,根据业务场景需要、模型性能和软硬件资源限制共同确定;所述开启多进程/线程包括:设视频源路数为;解码模块进程数为,第个解码进程开启的线程数为;前处理模块进程数为,第个前处理进程开启的线程数为;模型推理模块进程数为,第个模型推理进程开启的线程数为;后处理模块进程数为,第个后处理进程开启的线程数为。
19.c、构建上下游模块间的共享队列,设置数据存取策略;步骤c具体包括如下步骤:c1、视频源数据读取:仅考虑每路视频只能被一个进程/线程解码,一个进程/线程能够解码多路视频的情形,则;令,若满足,其中,,则将第路视频分发至第个解码进程的第个线程;例如,对于8路视频源,开启2个解码进程,每个进程开启2个线程的视频流数据读取方式如图2所示。
20.c2、上下游模块进程间数据存取:c21、共享队列数量设置:记模块与模块间的队列数为,则要求,避免多个进程同时对一个队列操作,从而产生系统切换开销;c22、数据存取策略设计;数据在存取时均采用按模取余规则。
21.c22具体包括如下步骤:1)情形:上游模块进程与共享队列一一绑定,每个上游模块进程处理完的数据存入各自专有的共享队列,下游模块进程采用拉的方式轮询从共享队列中读取数据;假设有4个上游模块进程、2个下游模块进程、4个共享队列,则存取方式如图3所
示;采用非等待模式能够进一步提升数据读取效率,如python语言实现为:while true: try:input_data = queue.get_nowait()except:pass。
22.2)情形:上游模块处理进程采用推的方式将处理完的结果数据存放至从共享队列,因此一个上游模块处理进程对应多个共享队列;假设有2个上游模块进程、4个下游模块进程、4个共享队列,数据存取方式如图4所示。
23.3)情形:上下游模块进程数均小于共享队列数量,此时采用高性能分布式结合方式进行数据存取;假设有2个上游模块进程、2个下游模块进程、4个共享队列,则数据存取方式如图5所示。
24.c23、模型批推理;采用批推理机制进一步加速模型推理速度,减少输入队列中可能产生的数据积压,如图6所示。
25.c23具体包括如下操作步骤:1)建立临时列表,设置批推理数据大小batch_size;2)以非等待方式从输入队列中读取数据,若成功则将数据保存至临时列表,并进行步骤3),否则跳转至步骤4);3)判断列表长度是否等于batch_size,若是进行步骤4),否则重复进行步骤2);4)对临时列表数据进行模型批推理;5)将临时列表数据置空,重复进行步骤2)。
26.本发明通过采用多进程方式构建各个处理模块,且巧妙的设计相邻模块进程间数据存取策略,在保证视频流不乱序的同时,尽可能提升视频处理速度,满足实时应用需要。此外,本方法的实现不限定于特定语言,扩展性强。每个模块启用的进程数,以及每个进程启用的线程数,可根据需要任意配置。
27.本发明的处理方法将视频解码、前处理、模型推理和后处理等模块解耦,并重点设计了数据在不同模块间的存取方法。编辑相应模块功能,可进行目标检测与跟踪、姿态估计、动作识别等视频内容分析。
28.以上述依据本发明的理想实施例为启示,通过上述的说明内容,相关工作人员完全可以在不偏离本项发明技术思想的范围内,进行多样的变更以及修改。本项发明的技术性范围并不局限于说明书上的内容,必须要根据权利要求范围来确定其技术性范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜