基于树莓派车载平台网页实时动态表情识别系统

作者: 洪政 吕南斌 谭尧

基于树莓派车载平台网页实时动态表情识别系统0

摘要:基于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 >语句定义了img标签的src(提取输出路径)属性,该img标签将会在与Model模块的video_feed函数渲染后实现运行结果输出功能。

上一篇 点击页面呼出菜单 下一篇