一种基于多线程的多摄像头实时检测方法转让专利

申请号 : CN201811197765.3

文献号 : CN109446946B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 赵云波李灏林建武

申请人 : 浙江工业大学

摘要 :

基于多线程的多摄像头实时检测方法,首先加载基于ResNet50和三重损失函数的行人重识别网络,构建检测人脸库,采用face_recognition库提取人脸库的特征向量,之后开始构建多线程系统,应用multiprocess库中的Queue构建队列,并采用daemon守护进程,之后通过Yolo3将人物定位并用Opencv裁剪出来,之后使用face_recognition库中的识别模块进行识别,若无人脸则采用行人重识别网络进行识别,最后通过多线程并行处理,可以在监控视频中对多个摄像头中的目标进行实时检测。

权利要求 :

1.一种基于多线程的多摄像头实时检测方法,包括以下步骤;

(1)加载训练过的行人重识别网络;

选择现有行人重识别网络,将ResNet50网络最后部分的结构转换成3个分别的block,并分别将其的输出转化为最后的3072维的特征;最后添加3重损失函数作为行人重识别网络的步骤;

(2)建立人脸库,并加载人脸识别模型;

步骤21,每个实例存放2‑3张免冠正脸照片,并以编号+排列序号命名图片,保存在指定目录下的步骤;

步骤22,在指定目录下建立图片名与人名相应的文件;

(3)读取摄像头监控画面步骤;

步骤31,使用Opencv中的VideoCapture类进行摄像头视频的读取;

步骤32,使用Opencv中的read()函数将VideoCapture类中的图片读取出来并加入到队列中;

(4)人物裁剪步骤;

步骤41,将预下载的Yolo3权重放入指定目录下,加载Yolo3网络;

步骤42,将从摄像头读取的图片放入Yolo3中,得到行人的坐标,并裁剪出行人图片进行识别的步骤;

(5)构建多线程框架的步骤;

步骤51,加载Python自带的Multiprocess库,设定两个队列操作;

步骤52,每个子线程将之前加载的行人重识别和Yolo3网络读取并进行独立的分析;

(6)人物检测步骤;

步骤61,在单个子进程中,使用Yolo3的目标检测网络进行人物的识别,将裁剪下来的图片放入face_recoginition的人脸检测模块中检测是否有清晰人脸;

步骤62,如果有人脸的话可以进行人脸识别,在没有人脸的情况下,如果行人库中有人的话,则进行匹配,如果有匹配到人,则识别成功并将人物框出来加上标签,如果没有匹配到的人,则无法判断;如果行人库没有人的话,则无法判断的。

说明书 :

一种基于多线程的多摄像头实时检测方法

技术领域

[0001] 本发明涉及对摄像头拍摄视频进行实时检测的方法。

背景技术

[0002] 由于安防领域发展迅速,摄像头功能日益强大,现有的摄像头已经普遍具有通讯协议,可以实现有线和无线的远程视频读取。同时,由于安全的需求上升,越来越多的摄像
头被安装在建筑物,街道等地方,起到监控的作用。由此警方等可以通过摄像头进行人物的
监控,并且实时的处理多个摄像头提高效率。
[0003] 人脸识别与行人重识别是识别特定行人的关键技术。但是由于目前行之有效的方法多采用深度学习神经网路,它占用内存大,同时计算量也较多,对于实时监控的场景很难
进行处理。所以使用多线程技术,对于多个摄像头使用多个线程进行并行处理,这样子可以
保证对于多源摄像头的视频不会有先后影响,同时也能保证一个较高的实时性。

发明内容

[0004] 本发明要克服现有技术的上述缺点,提供一种基于多线程的多摄像头实时检测方法。
[0005] 为了要实现实时性目的,本发明设计了一种基于多线程的多摄像头实时检测方法,可以有效提高实时性的要求,并不降低人脸识别以及行人重识别的精度。这对于实时目
标检测,在效率上是一个非常大的提升,因为同一时间处理摄像头的数量增加,可以利用的
信息也同时变多,使用者也能从更多的信息判断检测是否准确。
[0006] 本发明实现上述发明目的所采用的技术方案为:
[0007] 一种多线程的多摄像头实时监测方法,包括以下步骤:
[0008] 步骤1.加载行人重识别网络:采用预训练的ResNet50网络,将ResNet50中全连接层前的输出作为行人特征,并采用三重损失函数构造网络,并通过Market1501数据集训练。
[0009] 步骤2.建立人脸库,加载人脸识别网络:选用Python的第三方库dlib,和face_recognition进行人脸识别的判断,将检测目标的人脸图片加入到本地库进行特征提取。
[0010] 步骤3.读取监控摄像头视频:监控摄像头大多采用有线的形式进行配置,通常搭载有Rstp协议,使用Opencv中的VideoCapture函数进行视频读取。
[0011] 步骤4.人物裁剪步骤:将预下载的Yolo3权重放入指定目录下,加载Yolo3网络,将从摄像头读取的图片放入Yolo3中,得到行人的坐标,并裁剪出行人图片进行识别。
[0012] 步骤5.构建多线程框架的步骤:选用Python自带的多线程库multiprocess,并设置多个队列用来存放多个摄像头的图片(数量取决于摄像头数量)。并通过主程序中的
process.start()函数启动多线程服务。并采用daemon守护进程,保证其在后台运行,是多
线程与运行前的环境隔离开来,保证父进程的运行。
[0013] 步骤6.人物检测步骤:在单个子进程中,使用Yolo3的目标检测网络进行人物的识别,将裁剪下来的图片放入face_recoginition的人脸检测模块中检测是否有清晰人脸,如
果有人脸的话可以进行人脸识别,在没有人脸的情况下,如果行人库中有人的话,则进行匹
配,如果有匹配到人(欧式距离小于阈值),则识别成功并将人物框出来加上标签,如果没有
匹配到的人,则无法判断;如果行人库没有人的话,则无法判断的
[0014] 与现有技术相比,本发明技术方案的优点有:
[0015] (1)本发明充分利用电脑内存空间,使其能尽可能处理多个摄像头,提升工作效率,并降低成本。
[0016] (2)采用Python本身自带的第三方库,具有移植方便,易于理解的优点。

附图说明

[0017] 图1:本发明方法的流程图;
[0018] 图2:本发明的多线程设置流程图;
[0019] 图3:人脸特征保存流程图。

具体实施方式

[0020] 为了便于本领域普通技术人员理解和实施本发明,下面结合附图和实施例对本发明作进一步的详细描述。
[0021] 一种基于多线程的多摄像头实时检测方法,含有一下步骤:
[0022] (1)加载训练过的行人重识别网络
[0023] 步骤11:选择现有行人重识别网络,目前一些开源网站上已有在Market1501数据集上达到了94%的准确度,基本上能满足需求。选择的网络的结构如下所述,ResNet50作为
骨干网络,将最后的全连接层除去,并对一下3个block进行处理,res5a,res5b做池化处理,
并左右拼接后经过输出为1024维的全连接层得到一个1024维的特征向量,同时对res5c做
池化处理,直接展开成2048维的特征向量。将这两个叠加作为最终特征向量。
[0024] 步骤12:添加三重损失函数,加入hard_triplet损失函数,softmax损失函数和ring损失函数,构建成最后的行人重识别网络。可以将自己的数据集进行微调,已达到更好
的效果。
[0025] (2)建立人脸库,并加载人脸识别模型
[0026] 步骤21:每个实例存放2‑3张免冠正脸照片,其中照片最好不经过任何处理,否则会影响精度。接着按照命名规则保存在一个文件夹中,如李明对应编号是0003,则照片命名
为0003_*.jpg,*为这个实例面部的照片顺序。
[0027] 步骤22:在环境中安装dlib和face_recognition第三方库,并且可以先将人脸库的人脸图片通过特征向量保存。
[0028] (3)读取摄像头监控画面步骤
[0029] 步骤31:使用Opencv中的VideoCapture类进行摄像头视频的读取。将带有RTSP协议摄像头的用户名,密码以及IP地址分别定义好,并按照指定格式进行填写,每个公司的摄
像头都不一样。
[0030] 步骤32:使用Opencv中的read()函数将VideoCapture类中的图片读取出来,提供我们进行处理。
[0031] (4)人物检测步骤
[0032] 步骤41:将预下载的Yolo3权重放入指定目录下,Yolo3是一种占用空间较少的目标检测神经网络,准确率相比于Faster‑Rcnn低,但是足够使用。
[0033] 步骤42:加载Yolo3网络,将从摄像头读取的图片放入Yolo3中,得到行人的坐标,并裁剪出行人图片进行识别。
[0034] (5)构建多线程框架的步骤
[0035] 步骤51:加载Python自带的Multiprocess库,并设置多个队列,其数目与想要读取摄像头视频的数量相同,容量设置为2。
[0036] 步骤52:设定两个队列操作,压队操作将摄像头图片读取并压入队列中,出队操作将图片从队列压出,并进行处理。
[0037] 步骤53:每个子线程将之前加载的行人重识别和Yolo3网络读取并进行独立的分析,以此来并行操作,提升处理速度。
[0038] (6)人物检测步骤:
[0039] 步骤61:首先摄像头的图片通过RSTP协议远程读取之后,在单个子进程中,使用Yolo3的目标检测网络进行人物的识别,并通过Yolo3输出的坐标将人物裁剪下来。
[0040] 步骤62:将裁剪下来的图片放入face_recoginition的人脸检测模块中检测是否有清晰人脸,如果有人脸的话可以进行人脸识别,如果没有人脸则跳入步骤3。进行人脸识
别的时候如果能够十分确定行人的信息(达到阈值下),则将当前的信息记入行人库中。
[0041] 步骤63:在没有人脸的情况下,首先是看行人库的情况,如果行人库中有人的话,则进行匹配,如果有匹配到人(欧式距离小于阈值),则识别成功并将人物框出来加上标签,
如果没有匹配到的人,则无法判断。如果行人库没有人的话,则无法判断。
[0042] 本说明书实施例所述的内容仅仅是对发明构思的实现形式的列举,本发明的保护范围不应当被视为仅限于实施例所陈述的具体形式,本发明的保护范围也及于本领域技术
人员根据本发明构思所能够想到的等同技术手段。