基于树莓派车载平台网页实时动态表情识别系统
2022-04-11洪政吕南斌谭尧
洪政 吕南斌 谭尧
摘要:基于4WD树莓派車载平台,利用手机终端远程操控车载平台,调节树莓派摄像头进行信息采集,通过Django框架搭建的网页将采集信息以视频流形式进行网页远程访问,并结合Haar特征分析级联分类器人脸检测方式和背景去除算法对视频流中出现的人脸表情进行动态识别,最终对该对象表情进行识别,以对其健康情况进行评估。用于解决疫情防控中,公共场所人工检测速度慢、识别存在感染风险人群精准度差的问题。通过实验证明,该系统可以稳定运行。车载树莓派健康评估系统,可用于购物广场等公共场合,快速检测存在感染风险的人群,以提高公共场合通行率,并达到疫情防控的目的。
关键词: 树莓派; Django; OpenCV; 表情识别; 运动物体检测; 人脸相似度识别; 识别器训练
中图分类号:TP391 文献标识码:A
文章编号:1009-3044(2022)05-0094-04
从2020年初至今,新型冠状病毒肺炎疫情在我国已逐步得到有效控制,为了防止疫情反弹,全国各地的公共场合都在入口处设立了人工检测站,用于阻止存在感染风险的人群进入公共场合[1]。这样的检测站,不仅消耗了较大的人力物力,检测速度缓慢,降低了公共场所人群通行率,而且对工作人员也存在一定的感染风险。
树莓派自2012年首发以来,凭借自身不断增强的性能,众多外扩板的支持和占用空间体积小的优势,目前已基本占据了嵌入式Linux单板电脑市场[2]。其销量更是仅次于Windows,Mac计算机平台,位列世界第三大计算机平台[3]。本次设计的系统,通过树莓派向车载平台主控板发送,接收处理的信息,进而对马达、超声波传感器等器件实现控制。该系统也充分利用树莓派体积小,功能强的优势,将其固定在4WD车载平台上,这样不仅增强了系统的机动性,扩大识别范围,而且还加快了其工作效率。
从21世纪初开始,机器视觉、机器学习、深度学习、大数据分析等人工智能技术依靠其高效的工作效率和飞快的发展速度,正不断提高着人民的生活水平和幸福感,不断满足着人民对美好生活的需要。其中,通过人工智能技术帮助机器识别人脸表情已经成为当下的热门研究领域[4]。著名心理学家Ekman将人脸表情类型划分为6种基本表情类型,分别为:生气,厌恶,恐惧,高兴,悲伤和不适。学术界正针对这种6类型进行人脸表情识别算法设计[5]。目前,人脸表情识别分为两种方法进行实现:传统表情识别法和基于深度学习识别法。本文涉及的表情识别算法为传统表情识别算法,通过对检测对象的人脸区域和面部特征进行预处理训练,模拟同一对象的不同表情,再利用训练提取的特征对被测对象的表情进行识别。
本次设计的4WD车载树莓派Django网页实时人脸表情识别系统将采用Haar 级联分类器人脸检测方式和背景去除算法,对车载平台实时采集信息,进行人脸、表情识别,并在Django网页在远程实现访问,做到了采集、检测、回传显示为一体的完整流程。通过人脸确认、表情识别、利用检测表情信息,对检测对象的感染风险进行判断,以达到提高检测效率,确保工作人员无感染风险的目的。
1 4WD树莓派车载平台系统
搭建车载平台,该平台装载了树莓派模块、蓝牙连接模块、电机驱动模块、二维摄像头旋转模块和树莓派官方摄像头,实现通过树莓派Wi-Fi连接终端,以达到远程控制平台移动、调整摄像头旋转、快速采集有效数据,并对终端进行回传。
1.1 电机模块
该电机模块为TB6612双驱动模块,车载底板根据树莓派传输的控制流信息,对控制电机的I/O口进行高低电平调节,以实现对车载平台进行控制移动操作,在车载平台中存在4个该电机模块,提高了车载平台的机动性。
1.3 超声波模块
超声波模块,利用超声波的特性检测距离传感器,其带有两个超声波探头,分别用于接收和发射超声波,其测量范围是0 cm~500cm。
超声距离传感器将采集前方的障碍物距离信息返回给树莓派,树莓派将其采集到的距离信息进行判断,并根据判断结果,对车载平台的电机模块进行对应调整,避免车载平台碰撞障碍物,以实现自动避障功能。
1.4二维摄像头平台模块
二维摄像头平台模块,通过两个旋转舵机,一层平台舵机控制左右方向旋转,二层平台舵机控制摄像头上下旋转,通过对两层平台进行结合,以达到控制摄像头对车载平台前方和上方视野信息进行全面搜集的目的。
2 树莓派网页实时表情识别系统
以树莓派4B作为载体,并在其中以Python、OpenCV和Django服务框架为基础进行开发,利用OpenCV、Python对车载平台回传信息,进行信息存储、人像训练、对个人信息进行简单备份。将Python、Django网页和OpenCV结合,实现将摄像头实时视频流回传至Django网页,利用OpenCV对回传视频流进行人脸表情识别处理。
2.1 Python、OpenCV、Django软件安装
2.1.1 Python简介与安装
Python作为高层次结合解释性、编译性、互动性和面向对象的脚本语言。以交互性强、易于阅读学习、易于维护、兼容性强、可嵌入的特点,成为目前主流编程语言之一。对于之后OpenCv调用,Django框架搭建提供了一个稳定的平台基础。
在安装前,需要对树莓派系统调用sudo apt-get update进行系统更新,以保证Python安装环境稳定。之后调用sudo apt-get install build-essential libsqlite3-dev sqlit编译安装,并在官网下载安装包。对安装包解压后进行编译安装,编译安装时需要进入Python-2.7.13文件夹,调用make命令进行编译。其次进入/user/bin文件夹,调用命令建立树莓派与python之间的连接。最后在终端进入Python解释器,查看安装版本,确定Python安装成功。
2.1.2 OpenCV簡介与安装
OpenCV是一个基于BSD许可发行的跨平台计算机视觉和机器学习软件库,可以在Linux、Windows、Android和MacOS操作系统上运行。其具有Python接口,大量图像处理和视觉算法,轻量高效的特性,能极大程度地满足树莓派图像处理、人脸识别需求。尤其,轻量高效的特性从根本上弥补了树莓派运行效率较低的问题。
在安装OpenCV之前,同样需要对树莓派进行系统更新。对CMake的开发工具、图像工具包、常用视频库、GTK2.0、数值优化函数包进行安装,作为OpenCV运行调用的基础。此后,下载OpenCV3.4.3和OpenCV_contrib3.4.3,并对其进行解压编译完成安装。测试OpenCV安装成功,可以通过Python调用OpenCV函数,运行Python文件进行测试。测试效果图如图6所示:
2.1.3 Django简介与安装
Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。由于Django 本身基于 MVC 模型设计,使程序的修改和扩展简洁明了,并且使程序某一部分的重复利用成为可能,提高了重复代码的利用率。
为了保证Django稳定运行,则需要将其置于一个独立虚拟环境中运行。所以需要调用sudo pip install virtualenv命令安装virtualenv,并为Django项目创建虚拟环境。在此之后,调用sudo pip install Django,安装完成后,可通过终端键入freeze命令,查看安装的Django版本,若显示则安装成功。Django安装成功图,如图7所示。
2.2 人脸信息采集,训练,相似度识别模块
2.2.1 人脸信息采集
人脸信息采集是对摄像头在未来识别到的新人脸进行人脸特征采集,为人脸特征训练增添新训练对象。该人脸信息采集模块调用Haar特征分析级联分类器[6]人脸检测方式中的haarcascade_frontalface_default.xml(存储人脸分类器)文件。执行文件硬盘保存的函数为:cv2.imwrite("dataset/User." + str(face_id) + '.' + str(count) + ".jpg", gray[y:y+h,x:x+w])。其中,inwrite函数包含了存储路径、文件名、文件格式、灰度区域截取四个参数,对上一步准备好的灰度图以数据集的形式进行硬盘保存。该数据集包含了采集检测人脸的特征图片。为了更好地区分个人信息,每个图片命名格式为:User+name+number.jps。这样就可以区分不同检测对象所对应的采集信息。
当采集信息、保存数据集工作结束,执行cam.release()cv2.destroyAllWindows()语句,关闭窗口,避免资源浪费。数据集存储和采集样例如图8所示:
2.2.2人脸特征训练
在人脸特征训练模块中,该模块将从采集数据集中抽取所有数据,结合OpenCV函数,训练出适用于被抽取数据集的OpenCV识别器。
此模块通过recognizer = cv2.face.LBPHFaceRecognizer_create()函数对指定路径下的数据集进行抽取、提取数据集,之后返回Lds、faces两个数组作为训练依据。
其次调用recognizer.train(src, labels)函数进行训练,该函数包括两个参数:src表示将被用来学习的人脸图像,它和信息采集的灰度图数据集保持对应关系。labels表示人脸图像所对应的标签。
函数进行训练,并保存到指定tranner.yml文件中,以实现OpenCV识别器的建立。
2.2.3人脸相似度识别
人脸相似度识别模块负责对训练出的识别器trainer.yml文件进行解析,并对摄像头捕捉的人脸在识别器中进行筛选,对符合预测条件的id和索引进行返回,同时在Video窗口进行id和相似度的展示。为了更好地定位人脸,此模块增设了一个矩形对象,按人脸在Video窗口中显示的比例,对人脸范围进行刻画。矩形定位人脸函数为:cv2.rectangle(img,(70,80),(90,100), (255,0,0),-1)。在该语句中,包含了图像、起始坐标、终点坐标、颜色、线宽五个参数。其中图像为检测到的人脸,起始坐标和终点坐标共同对人脸范围进行限制,剩余颜色和线宽两个参数则是对矩形进行美化,从而达到让用户快速查看视频流中的人脸及人脸识别相似度的目的。
在人脸相似度检测模块中,关键执行检测人脸相似度的操作的语句为:recognizer.predict (),该函数把需检测人脸的已捕捉部分作为一个参数,并返回训练数据集中对应的所有者,指示其 id 以及识别器与这一匹配相关的置信度。该语句和训练模块中的recognizer.train ()语句相互对应,只有生成训练的文件才能进行置信度检测。如果识别器可以预测人脸,窗口图像上将会带有可能的 id,以及匹配是否正确的概率。如果没有,则把未知的标签放在人脸上。图10对已训练人脸进行检测,并实时输出识别度。
2.3 Django网页实时视频,表情识别模块
该网页模块在Django框架下进行搭建,由于Django框架是根据MVC模式进行搭建的,所以代码模块也与MVC模式相对应[7]。
View模块:主要在Html文件中运用语句定义了img标签的src(提取输出路径)属性,该img标签将会在与Model模块的video_feed函数渲染后实现运行结果输出功能。
Control模块:利用自定义App通过计算Model模块采集的每一帧图像中的累计加权平均值,对图像背景进行去除,以实现对除背景外的运动区域进行检测。
在自定义App中,首先设置累计加权平均值因素初始值。该因素越大,在累积加权平均值时,背景因素被考虑得越少。反之,该因素越小,在计算累计加权平均值时,考虑背景因素就会越多。
其次定义Updata函数对计算累计加权平均值,计算语句为:accumulateWeighted(image, self.bg, self.accumWeight)。该函数包含了输入帧、现有背景、累计加权平均值因素三个参数,并结合这三个参数计算其对应的加权平均值,作为背景去除处理的主要参数。
在背景去除的基础上,还需要对图像进行降噪和白平衡处理,以确保检测图像的准确性,图像优化处理语句为:thresh = cv2.threshold(delta, tVal, 255, cv2.THRESH_BINARY)该语句包含4个参数,分别代表图像和背景之间的相对误差,判断运动非运动的阈值,有差异的前景设置为白色,否则为黑色。这样生成的thresh图像将作为初步的运动检测图像。
最后调用以下两个函数进行运动检测:indContours(); imutils.grab_contours()。其中,findContours函数包含thresh图像、轮廓检索方式、轮廓近似方法三个参数以对运动物体轮廓进行刻画。imutils.grab_contours()函数用于返回图像、轮廓、层次结果。这三个返回值将作为运动物体检测图像。为了更直观地查看运动区域,需要对轮廓返回坐标的最大、最小值进行提取,并根据这两个值用矩形对被检测的运动物体进行框选。框选后的图像作为最终运动物体检测输出结果。
Model模块:由Django工程的管理项目文件manage.py进行实现,负责对template文件夹下的View模块进行渲染和对处理模块进行调用,以实现View模块和Control模块的结合。渲染结合执行语句为:render_template("index.html")。
在该模块下,还增添了表情分类器对采集图像中的运动对象不同的表情进行识别,再通过不同颜色矩形输出表情范围。
在项目配置完成后,进入终端,对应项目文件夹下,运行 sudo runserver manage.py --ip --port 命令,启动Django服务器。并可以通过浏览器,对指定的http://ip:port 地址进行检索,即可在网页端展示运行效果。图11检测笑容的效果图,使用不同颜色对不同的矩形范围进行区分,外部框代表运动物体检测,内部框代表眼睛和笑容识别:
3 结论
本文设计了基于树莓派车载平台和Django架构的网页实时动态表情识别系统,对人脸相似度识别、运动检测和表情识别的主要方法进行了分析,使用了Haar特征级联分类器人脸检测方式和背景去除算法对网页视频流中运动对象进行动态表情识别。实验结果表明,本文设计的基于树莓派车载平台和Django架构的网页实时动态表情识别系统,可以利用树莓派车载平台机动性高的优势,快速存取较多个人信息,并在网页端实时传输较为精准的人脸表情识别效果。但在树莓派运作时间较长时,会由于较高功耗发烫的原因,一定程度上降低树莓派工作的效率。后续,将优化训练算法,对树莓派进行风扇硬件加持,向更轻量级的网页框架方向靠近[8],以达到降低树莓派功耗,解决发热的问题,提高树莓派的运行效率的目的。
参考文献:
[1]刘岩,王兆,沈恒,等.全球新型冠状病毒肺炎疫情流行现状评估[J].公共卫生与预防医学,2021,32(3):6-11.
[2] Mathias Claussen,禾沐.树莓派4:全新的背后,依然是优秀的表现吗?[J].单片机与嵌入式系统应用,2020,20(6):1-4.
[3] 韩进,杨永明,崔吉凤.基于STM32和树莓派的智能门禁系统[J].电子设计工程,2021,29(3):123-126,131.
[4] 纵丹丹.基于视频的人脸表情识别研究[D].合肥:合肥工业大学,2020.
[5] 李珊,邓伟洪.深度人脸表情识别研究进展[J].中国图象图形学报,2020,25(11):2306-2320.
[6] 张彩丽,刘广文,詹旭,等.基于新增haar特征和改进AdaBoost的人脸检测算法[J].长春理工大学学报(自然科学版),2020,43(2):89-93.
[7] 汪洋,姜新通.MVC框架在Python与Django下的设计研究[J].电脑与信息技术,2021,29(1):55-57,63.
[8] 徐杰.基于Flask的分布式Web服務架构研究与应用[J].工业控制计算机,2020,33(10):97-98,101.
【通联编辑:唐一东】
收稿日期:2021-04-30
基金项目:浙江省公益自然科学研究项目(LGF19F020012)基于软件定义网络的数据中心互连网络关键技术研究
作者简介:洪政 (2000—),男, 云南昆明人,本科,主要研究方向为物联网专业;吕南斌(2000—),男,本科,主要研究方向为物联网专业;谭尧 (1999—),男, 四川广安人,本科,主要研究方向为物联网专业。