基于多线程的视频告警事件分析方法
技术领域
本发明涉及视频智能分析技术领域,尤其涉及一种分析性能高,资源利用率好的基于多线程的视频告警事件分析方法。
背景技术
随着智慧社区概念和规范的不断成熟以及智能化应用技术在智慧社区中的应用,例如人脸识别、人脸门禁、物体识别、车辆识别等技术不断推陈出新,使得智慧社区的智能化程度不断攀升到另一个高度。随之而来的便是喷涌而来的市场需求,虽然现有技术已经基本能够满足现有市场的一些应用场景,但是所带来的基础硬件的耗费也是巨大的。
因此,有必要提出一种新的技术方案,以解决现有问题。
发明内容
本发明的目的是解决现有技术中的问题,提供一种分析性能高,资源利用率好的基于多线程的视频告警事件分析方法。
本发明的技术方案是:
基于多线程的视频告警事件分析方法,包括以下步骤:S1、启动基于多线程的视频告警事件分析的主进程;S2、检测需要进行视频告警事件分析的采集视频的摄像头参数,统计摄像头数量came_sum;S3、主进程根据摄像头数量创建多个父线程,并启动;S4、针对每个摄像头一端时间内的一批次视频帧数量创建多个子线程对视频帧进行告警事件分析,并将结果信息返回到对应父线程;S5、父线程根据该摄像头该批次的多个子线程的告警事件分析结果进行更新,并以此作为下一批次视频告警事件分析时的告警事件参考信息;S6、所有摄像头一批次视频告警事件分析结束后,主进程对所有摄像头的该批次视频帧进行整体告警事件分析结果信息更新;S7、重复步骤S2至S6,直至所有摄像头的所有视频的告警事件分析完成。
作为一种优选的技术方案,所述步骤S3“主进程根据摄像头数量创建多个父线程,并启动”的步骤为:S3a、主进程创建父线程,executor=ThreadPoolExecutor(came_sum);S3b、启动父线程,result_iterators1=executor.map(AI_Video_warning,ip_thread_tuple);其中,AI_Video_warning是单个摄像头告警事件分析程序,ip_thread_tuple是所有启动的摄像头信息,result_iterators1是主进程所创建的所有父线程处理结果。
作为一种优选的技术方案,所述步骤S4具体包括以下步骤:S4a、获取视频帧信息和视频帧数量;S4b、根据视频帧个数创建多个子线程,多个子线程并行化对视频帧进行告警事件分析,并将分析结果返回;S4c、分别对各个子线程的告警事件分析结果进行对应告警事件的处理操作,并记录对应事件的处理结果信息;S4d、该摄像头的该批次所有视频帧分析完成后,将各个子线程的处理结果信息返回到父线程。
作为一种进一步优选的技术方案,所述步骤S4a“获取视频帧信息和视频帧数量”包括以下步骤:S4a1、frame_tuple.append([eventTime,frame]),其中frame_tuple为视频帧数组,eventTime为视频获取的时间戳,frame为视频帧信息;S4a2、获取视频帧数量frame_sum=len(frame_tuple)。
作为一种更进一步优选的技术方案,所述步骤S4b包括以下步骤:S4b1、根据视频帧数量创建多个子线程,executor=ThreadPoolExecutor(frame_sum);S4b2、子线程并行化对视频帧今次那个告警事件分析,并将分析结果返回:result_iterators2=executor.map(process_image,frame_tuple)。
作为一种进一步优选的技术方案,步骤S4c“记录对应时间的处理结果信息”中,处理结果信息包括告警事件发生时间、告警事件持续时间。
本发明的基于多线程的视频告警事件分析方法,通过采用多线机制,分别对多个摄像头和摄像头下采集的视频帧进行智能分析,智能分析过程采用GPU并行化获取对应目标参数数据,将视频内容进行数字化处理,从而提升视频智能分析的资源利用率和性能,有效降低视频智能分析服务器系统的成本。本发明的基于多线程的视频告警事件分析方法,采用多线程方法,可有效均衡GPU、显存、CPU和内存等服务器资源的利用率,从而有效提升视频智能分析的性能,可进一步优化资源利用率,提升智慧化社区系统在市场的竞争力。本发明的基于多线程的视频告警事件分析方法具有分析性能高,资源利用率好的优点。
附图说明
图1为本发明基于多线程的视频告警事件分析方法具体实施方式流程示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种,但是不排除包含至少一种的情况。
应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的商品或者系统中还存在另外的相同要素。
如图1所示,本实施例的基于多线程的视频告警事件分析方法包括以下步骤:
S1、启动基于多线程的视频告警事件分析的主进程;
S2、检测需要进行视频告警事件分析的采集视频的摄像头参数,统计摄像头数量came_sum;
S3、主进程根据摄像头数量创建多个父线程,并启动;
S4、针对每个摄像头一端时间内的一批次视频帧数量创建多个子线程对视频帧进行告警事件分析,并将结果信息返回到对应父线程;
S5、父线程根据该摄像头该批次的多个子线程的告警事件分析结果进行更新,并以此作为下一批次视频告警事件分析时的告警事件参考信息;
S6、所有摄像头一批次视频告警事件分析结束后,主进程对所有摄像头的该批次视频帧进行整体告警事件分析结果信息更新;
S7、重复步骤S2至S6,直至所有摄像头的所有视频的告警事件分析完成。
本发明的基于多线程的视频告警事件分析方法,通过采用多线机制,分别对多个摄像头和摄像头下采集的视频帧进行智能分析,智能分析过程采用GPU并行化获取对应目标参数数据,将视频内容进行数字化处理,可有效均衡GPU、显存、CPU和内存等服务器资源的利用率,从而提升视频智能分析的资源利用率和性能,有效降低视频智能分析服务器系统的成本。
本实施例中,步骤S3“主进程根据摄像头数量创建多个父线程,并启动”的具体步骤为:
S3a、主进程创建父线程,executor=ThreadPoolExecutor(came_sum);
S3b、启动父线程,result_iterators1=executor.map(AI_Video_warning,ip_thread_tuple);其中,AI_Video_warning是单个摄像头告警事件分析程序,ip_thread_tuple是所有启动的摄像头信息,result_iterators1是主进程所创建的所有父线程处理结果。
本实施例中,步骤S4“针对每个摄像头一端时间内的一批次视频帧数量创建多个子线程对视频帧进行告警事件分析,并将结果信息返回到对应父线程”具体步骤如下:
S4a、获取视频帧信息和视频帧数量;
S4b、根据视频帧个数创建多个子线程,多个子线程并行化对视频帧进行告警事件分析,并将分析结果返回;
S4c、分别对各个子线程的告警事件分析结果进行对应告警事件的处理操作,并记录对应事件的处理结果信息;
S4d、该摄像头的该批次所有视频帧分析完成后,将各个子线程的处理结果信息返回到父线程。
其中:
步骤S4a“获取视频帧信息和视频帧数量”包括以下步骤:
S4a1、frame_tuple.append([eventTime,frame]),其中frame_tuple为视频帧数组,eventTime为视频获取的时间戳,frame为视频帧信息;
S4a2、获取视频帧数量frame_sum=len(frame_tuple)。
步骤S4b“根据视频帧个数创建多个子线程,多个子线程并行化对视频帧进行告警事件分析,并将分析结果返回”的具体操作如下:
S4b1、根据视频帧数量创建多个子线程,executor=ThreadPoolExecutor(frame_sum);
S4b2、子线程并行化对视频帧今次那个告警事件分析,并将分析结果返回:result_iterators2=executor.map(process_image,frame_tuple)。
步骤S4c中“记录对应时间的处理结果信息”的描述,该处理结果信息包括告警事件发生时间、告警事件持续时间等信息。
步骤S4d中“将各个子线程的处理结果信息返回到父线程”具体的是将该摄像头各个告警事件的分析结果、处理结果等信息作为分析处理标记信息库反馈回父进程。
本实施例中,步骤S5“父线程根据该摄像头该批次的多个子线程的告警事件分析结果进行更新,并以此作为下一批次视频告警事件分析时的告警事件参考信息”中,具体为,由父线程根据该摄像头该批次的视频帧分析处理后的告警事件监测结果更新到result_iterators1,也即更新到主进程所创建的所有父线程处理结果内,所有摄像头均更新完成后,result_iterators1完成更新。同时,信息更新后的告警事件监测结果信息作为下一批次视频告警事件分析时的告警事件参考信息。
本实施例中,步骤S6“所有摄像头一批次视频告警事件分析结束后,主进程对所有摄像头的该批次视频帧进行整体告警事件分析结果信息更新”中,具体为,主进程分别对所有摄像头每一批次视频帧处理结束后,进行整体事件监测结果信息标识字典进行更新,具体步骤如下:
for result in result_iterators1:
dic[result[0]]=result[1]
其中,result是单个摄像头IP和对应摄像头该批视频帧处理后的各类告警事件分析监测结果;dic是所有摄像头整体各自所配置所有告警事件检测结果的信息实时记录。
本发明的基于多线程的视频告警事件分析方法,通过采用多线机制,分别对多个摄像头和摄像头下采集的视频帧进行智能分析,智能分析过程采用GPU并行化获取对应目标参数数据,将视频内容进行数字化处理,从而提升视频智能分析的资源利用率和性能,有效降低视频智能分析服务器系统的成本。本发明的基于多线程的视频告警事件分析方法,采用多线程方法,可有效均衡GPU、显存、CPU和内存等服务器资源的利用率,从而有效提升视频智能分析的性能,可进一步优化资源利用率,提升智慧化社区系统在市场的竞争力。本发明的基于多线程的视频告警事件分析方法具有分析性能高,资源利用率好的优点。
综上所述仅为本发明较佳的实施例,并非用来限定本发明的实施范围。即凡依本发明申请专利范围的内容所作的等效变化及修饰,皆应属于本发明的技术范畴。