具有人脸识别功能的视频监控系统设计

2021-07-31 10:51聂承启左少华石富文江锦春
物联网技术 2021年7期
关键词:服务端树莓人脸识别

聂承启,李 增,左少华,石富文,江锦春

(1.华东师范大学 通信与电子工程学院,上海 201100;2.华东师范大学 物理与电子科学学院,上海 201100)

0 引 言

随着信息科技的不断发展,人脸识别技术愈发引起社会关注,应用愈发广泛[1]。校园中随处可见具有人脸识别技术的摄像头,其已被应用于门禁管理与教室中,方便校园安全管理与课堂考勤[2-5]。张立刚等采用人脸识别技术进行矿井人员的唯一性检测,确保入井人员的信息真实、准确[6]。在智能交通方面,人脸识别技术可方便安保人员识别、管控在逃人员,提高了身份验证效率[7-10]。在智能家居领域,大多通过物联网技术采集、检测环境信息,获取并保存视频[11],尚未进行实时对象检测和人脸识别。本文通过OpenCV和深度学习构建一个包括对象检测、人脸识别和微信消息发送功能的视频监控系统,以保障家庭安全。硬件选用树莓派、Picamera摄像头和英伟达TX2,系统搭建简单,运行稳定,成本较低,可接入智能家居系统,提高房屋的安全监控等级。

1 系统总体设计

本系统由客户端(Client)、服务器(Server)、手机端等组成。客服端与服务器采用Linux系统,客户端可以布置多个监控并由其获取各处视频。ImageZMQ库将获取的视频发送至服务器,经过服务器的视频帧处理模块处理后得到相应的结果。之后对结果进行分析,按照不同的程序运行。

当出现检测对象时,拍照并保存照片,进行人脸识别后将结果发送至手机微信指定联系人。家居领域的视频监控采用局域网通信,设备简单,成本低,对象检测精度高,系统运行稳定。系统流程如图1所示。

图1 系统流程

2 系统硬件设计

树莓派3B+:搭载64位4核ARM Cortex-A53 CPU,拥有无线网卡、蓝牙及充足的接口用于外设与串口间通信。可通过40 pin GPIO接口进行扩展板加载,方便后续功能扩展。

Picamera:树莓派匹配的摄像头具有丰富的Picamera API数据库,通过Python语言可直接调用,缩短项目开发周期。

英伟达Jetson TX2:配有NVIDIA PascalTMGPU,各标准接口便于功能扩展,实现边缘位置的AI计算。

树莓派与Picamera构成客户端,用以获取检测地的视频图像,在同一局域网下将服务端IP地址绑定到客户端,通过VidoeStream获取视频流,借助ImageZMQ库进行视频帧传输。为区分视频流来源地,客户端采用Socket模块获取树莓派Hostname,将其标记到所传输的视频帧上。将TX2用作PC服务器,对接收的视频流进行检测、计算与显示。如图2所示,将客户端摄像头布置于所需场景中,例如卧室、客厅与家门前等,将获取的监控视频流通过局域网发送至服务器进行处理与显示。服务器对视频流中的对象进行检测识别,将结果发送至手机微信指定联系人。

图2 硬件结构

3 系统软件设计与实现

3.1 视频流传输库ImageZMQ

ImageZMQ基于ZMQ(ZeroMQ)构建,ZMQ是分布式系统中使用的高性能异步消息传递库,是使用率较高的消息传递系统之一。在构建使用OpenCV通过网络传输实时视频的系统时,需要专注于以下2方面:

(1)高吞吐量:来自视频流的新帧快速进入;

(2)低延迟:当摄像机捕获帧后立即分发到系统中的所有节点。

ZMQ侧重于高吞吐量和低延迟类应用。ImageZMQ与OpenCV兼容,能够实时传输数据,且运行稳定可靠,同时还具有易安装等优点。

3.2 对象检测

在服务端接收到所有客户端传送的视频帧时,通过OpenCV调用blobFromImage函数对图像进行预处理,并设置相关参数,为后续模型分类做准备。通过对网络图片数据集进行预先训练,得到caff深度学习模型文件,其中caffemodel和prototxt文件用于目标对象检测,本系统目前仅支持对狗、人和车的检测。服务端PC可以通过调整对象检测置信度来控制检测精度,在对各自树莓派视频帧进行检测后,将检测结果以字典的形式存放,当出现目标物时利用OpenCV对目标使用方框标记,同时将检测结果标记到各自的视频帧上。每个树莓派均独立运行,相互解耦,以便于后续节点的调整。通过调整PC端显示窗口的长和宽来容纳接收的视频帧,以实时动态显示视频。

3.3 人脸检测与识别

为达到人脸识别的目的,当检测结果中出现人物时,需对其进行识别处理。由于拍摄角度固定,而人物在移动,因此需要对大量视频帧进行同步识别处理,避免无用视频数据占用计算资源和空间,形成延迟。通过编写shell脚本添加启动项,按规定的间隔周期清理内存,防止存储的图片超出固有容量。本系统通过增加人脸检测功能,进而有效控制待检测视频帧数量,以提高后续识别效率,降低延迟。

3.3.1 人脸检测

在检测结果出现人物时,本地服务端保存当前视频帧,通过Redis将图片路径发布到指定通道,由人脸检测程序获取路径对其进行检测。同样由预先训练的caffemodel模型和prototxt文件进行检测,通过设定的置信度进行精度控制。只有当检测结果满足要求时,才会进行后续的人脸识别流程,否则抛弃当前图片,检测下一帧图片。

3.3.2 人脸识别

需要建立人脸识别数据集,通过程序调用摄像头拍取一定数量的照片,将图片分类后建立图片数据库,如图3所示。此外,还需通过网络获取其他人物图片建立陌生人类别。

图3 数据集示例

(1)人脸特征向量提取:采用面部检测器进行图像面部定位。使用深度学习方法对人脸数据进行特征提取,生成面部描述的128维特征向量,与对应的标签以字典格式序列化保存到pickle文件中。

(2)训练人脸识别模型:获取所有人脸特征向量后,安装scikit-learn机器学习库,采用支持向量机(SVM)进行训练。将训练获取的模型和标签以pickle文件保存在本地文件夹。

(3)人脸识别:通过对人脸特征向量的提取与模型的训练,获取图片人脸识别模型,服务端PC将经过人脸检测筛选的图片路径发送至人脸识别模块。将待识别图片进行面部定位后,提取对应的特征向量,将其输入到训练得到的模型进行比对,设置识别置信度参数阈值,以获取最高的匹配度及相应的标签名称。之后将标签与匹配度标记在图片上,显示在公屏。

4 系统功能测试

当运行服务器程序时会自动弹出微信登录二维码,方便用户使用网页版微信。在实验室中搭建2个客户端,运行程序后服务端接收视频帧并显示,图4所示为无人时的视频监控画面,可通过视频窗口标签得知监控地点与对象检测结果。无人时显示“car:0. person:0. dog:0。”

图4 服务端视频监控画面

当摄像头中出现检测对象时,会进行类型分类与数目统计,并标记在视频窗口。图5所示为2人同时出现在pilivingroom2摄像头中的检测结果,即“car:0. person:2.dog:0。”出现检测对象后,保存此视频帧,并进行面部检测与人脸识别。图6所示为人脸识别结果,其中li的识别概率为99.87%,nie的识别概率为87.68%。对象检测与人脸识别准确率较高。系统检测到对象时,会通过网页版微信Itchat库将结果发送至指定联系人进行实时提醒。图7所示为微信发送监控结果。

图5 视频监控中人物出现的画面

图6 人脸识别结果

图7 微信发送监控结果

5 结 语

本系统为家居安全提供了有效的视频监控,可与智能家居系统平台对接,通过增加客户端树莓派实现对目标地的监控,具有很强的兼容性和扩展性。同时还增加了人脸识别功能,可通过微信将监控结果实时发送至指定联系人。系统硬件结构简单,运行稳定,识别准确率较高,后续可进一步做系统优化与功能扩展,以满足更广泛的视频监控需求。

猜你喜欢
服务端树莓人脸识别
人脸识别 等
揭开人脸识别的神秘面纱
基于树莓派的骑行智能头盔设计
云存储中基于相似性的客户-服务端双端数据去重方法
新时期《移动Web服务端开发》课程教学改革的研究
基于树莓派的远程家居控制系统的设计
在Windows Server 2008上创建应用
响应面法优化红树莓酒发酵工艺
基于类独立核稀疏表示的鲁棒人脸识别
基于K-L变换和平均近邻法的人脸识别