APP下载

基于卷积神经网络人脸情绪识别的RGB LED混合调光方法研究

2021-09-28周锦荣徐张伟段梦芳邹力伟

照明工程学报 2021年4期
关键词:人脸灰度卷积

周锦荣,徐张伟,段梦芳,邹力伟

(闽南师范大学物理与信息工程学院,福建 漳州 363000)

引言

随着物联网、人工智能以及混合光源、变色光源等先进新技术的发展,LED照明正在迅速实现智能化和应用多样化。依靠LED亮度、颜色易于调控等优点,向用户提供健康舒适的照明环境,成为情感照明设计的一个新的研究和应用热点。通过研究数字混合调光引起的光学属性变化(包括光强度、波长和色温等)和对人体健康、工作表现、情绪等光的空间情感特征之间的相关性来构建不同的采光方式和照明表现,实现需要的各种不同光视觉体验和情绪变化调节结果[1-3]。

国内外对于LED实现情感(情绪)照明的研究应用已取得了一些进展。Yun S J等[2]根据人类感官功能的敏感性,应用采集到的情绪状态脑电波(EEG)生物信号进行用户的情绪状态分类,获得了色度坐标,实现LED情感照明控制系统设计。Kang E Y等[3]根据室温、室内环境因素与用户感受到的温度颜色混合等具体情况,采用神经模糊系统设计了一种LED情感照明系统。Lim S J 等[4]利用RBFNN智能算法实现LED情感照明系统设计,这种方法采用红色、绿色和蓝色三种LED来确保色彩空间的情感照明,并使用白色LED来确保足够的光强度。Hartstein L E等[5]研究了LED光源的相关色温对人体认知过程的影响情况,认为不同种类的光可以导致昼夜节律、情绪和认知能力的变化。接触较冷的色温光源(CCT light)可以维持注意力,改善情绪和警觉性,并可能在性别之间产生差异。Gabel V等[6]认为光照会对认知表现和情绪等人体生理和行为产生许多影响。他们利用LED模拟晨光,研究晨光照射作为睡眠限制(SR)下认知能力和情绪受损的对策。朱莹莹、汝涛涛博士和周国富教授等对照明在非视觉功能(认知、情绪、社会行为等)方面的表现及国内外的研究情况进行了深入说明,对照度和相关色温与情绪和认知的相互作用进行了分析,指出动态照明,特别是LED 新型绿色光源的使用可有效弥补静态照明的不足,有利于结合实际情境创设个性化的照明环境以满足特殊需求,促进身心健康发展[7,8]。徐俊丽等[9]从光环境健康设计角度出发,基于对上海市第十人民医院心内科导管手术室的深入调研,设计应用了LED 媒体界面,通过改变其光色、亮度及图案,定性研究光照对病患负面情绪的缓解作用。

基于不同的LED光环境会对人的情绪变化产生不同的影响,本文采用提取几何特征和神经网络分类器识别的卷积神经网络算法对人脸脸部情绪特征进行采集与检测,并结合无线物联网和微处理器数字脉宽控制技术,设计一种根据人脸情绪识别的LED混合光环境的调控系统。主要步骤如下:

1)通过Android端应用程序调用手机摄像头采集用户图像数据。

2)调用OpenCV框架对采集到的图像数据提取Haar特征并识别人脸区域。

3)将人脸区域经图像剪裁及灰度化后生成48×48的人脸灰度图像。

4)在Linux环境中使用Tensorflow(谷歌深度学习框架)对fer2013人脸图像数据集进行卷积神经网络模型训练,得到输入为48×48的灰度图,输出为六种情绪编号的CNN模型。将得到的CNN模型放入Android程序里。最后在程序中将采集后处理得到图像输入该模型即可返回对应的情绪编号。

5)通过硬件NodeMCU及ESP8266的物联网专用系统板接收由Android端发送的由情绪编号生产的灯光方案,并根据方案中的RGB颜色及动态相关数据控制WS2812灯带变色和产生动态光照强度、色温等灯光效果。

1 系统整体设计方案

本系统主要由电脑端模型训练、上位机Android端应用程序、下位机单片机硬件控制驱动模块构成。下位机系统硬件由集成了NodeMCU及ESP8266的物联网专用系统板外接WS2812灯带构成。硬件端只需要接收由Android手机端发送的灯光方案并根据方案中的RGB颜色及动态相关数据,利用PWM控制灯带变色和产生动态效果即可,如图1所示。

图1 系统框图Fig.1 System hardware block diagram

电脑端安装TensorFlow框架,利用TensorFlow对Fer2013.CSV开源人脸数据集进行CNN模型训练。使用Android Studio软件编写Android移动端程序,该程序也是整套系统的核心程序。程序由一个主页面Activity、一个图像采集Dialog页面、一个控制Wi-Fi的Service、三个起界面美化作用的CardView加上图像处理、情绪分类、灯光方案等相关工具类构成。程序工程集成OpenCV图像处理框架、电脑端编译好的TensorFlow for ARM框架以及训练得到的CNN模型文件。整个流程为调用手机镜头采集图像数据,利用OpenCV检测Haar特征识别人脸区域并对该区域剪裁和灰度处理,将图像输入CNN模型文件后输出情绪编号,根据得到的情绪值选择对应的灯光方案,将方案通过Wi-Fi发送到单片机。方案流程如图2所示。

图2 系统方案流程Fig.2 System overall solution block diagram

2 人脸情绪识别的算法实现

表情是人类情绪的直观反应,表情(情绪)识别一直是计算机视觉的重要研究课题之一。徐峰等[10]对人脸微表情识别的国内外研究进展进行了综述,指出国内外对人脸表情的研究目前主要集中在心理学应用方面,基于视觉图像处理和机器学习等智能自动识别算法模型构建逐渐成为新的研究热点。Mohammed A A等[11]基于双向二维主成分分析(B2DPCA)和极端学习机(ELM)的人脸识别算法,使用改进的降维技术在尺寸上减小标准偏差和利用B2DPCA生成判别性特征集以确定分类准确性来提高人脸识别分类率和降低对原型数量的依赖性。中国科学院心理研究所王甦菁等提出了微观表达定位的主方向最大差异(MDMD)分析,使用光流特征主方向上的幅度最大差异来发现面部微表情的变化,他们还提出通过转移长期卷积神经网络模型(TLCNN)实现小样本的微表达识别[12,13]。夏召强等[14]通过几何变形建模并应用于Adaboost算法模型进行面部微表情识别。从视频序列(微表情定位)中检测存在的细微头部运动和不受约束的照明条件等方面影响。

本设计采用卷积神经网络CNN模型进行训练实现分类器功能。CNN由输入层、隐含层、输出层构成,其中隐含层包含卷积层、池化层和全连接层。系统使用Fer2013.CSV作为数据输入,目前训练样本为7 000个,使用三个卷积池化层后叠加三个全连接层进行模型文件输出。第一个的卷积层代码示例:及池化层模型代码如图3所示。最终可以得到格式为pb的CNN模型文件,该模型输入为48×48的灰度图像,输出为0~6总共7种情绪编号。

图3 CNN模型训练流程Fig.3 CNN model training process

当输入CNN的值为图像时,实际上输入的并不是图像,而是图像中像素点包含的数字信息,常见形式有矩阵和向量。CNN在处理图像时,可以把图像理解成一个长方体,如图4所示,长方体的长和宽为图像的长和宽,而高度可以理解成每个像素的颜色信息数,如RGB图像高度为3,灰度图像高度为1。每次处理时收集图像中一小块区域的像素信息,按这个区域大小以一定的步长遍历整个图像,处理完成后输出一个新的高度增加、长宽缩小的图像,这个过程称为对图片的卷积。多次重复这个步骤,最后将得到高度更高的图像输入普通的分类神经层,就可以得到原始图像的分类结果。由于CNN对图像的处理单位并不是一个像素,而是图像中的某一小块像素区域,这使得它能获得图像中像素间的关联信息而非仅仅是单个像素的信息。

图4 卷积神经网络Fig.4 Convolutional neural network

对图像进行卷积操作的实质就是求某些矩阵的内积。例如,有一个大小为3×3×1的灰度图像,如果需要对他进行卷积处理,需要先将其抽象为一个矩阵,将该矩阵最外圈填充一圈0得到一个5×5矩阵A1,定义两个滤波矩阵W1、W2和一个偏置量bias。用W1和W2分别以步长1遍历矩阵A1。所谓遍历与步长,可以理解为使用W1和W2在A1矩阵上进行水平或垂直平移操作,每次平移中间间隔步长个单位,直到覆盖整个图像。其中矩阵A1填充0的操作是为了使滤波矩阵能按规定步长恰好移到边缘的位置,从数学角度来说就是长或宽除以滤波矩阵长或宽的余数能被步长整除。在本次设计中,我们采用的步长为1,但一般情况下实际图像长宽值较大,步长也不为1,在元数据矩阵外侧填充任意最小圈0才能达到恰好遍历的目的。定义bias为1,A1、W1、W2,如式(1)和式(2)所示:

(1)

(2)

使用W1遍历A1时,先计算W1与对应范围的3×3矩阵的内积加上偏移量的值得到新的值c11,如式(3)所示:

(3)

再将该值作为新矩阵C1第一行一列的值,同理计算该矩阵其他位置的值与使用W2遍历得到的值,得到的新矩阵C1与C2如式(4)所示:

(4)

此时图像的高度从1变成了2,长和宽都缩小成了2。从上述计算过程可以看出,输出矩阵的高度与滤波矩阵的数量有关,长和宽与步长和元数据矩阵长宽有关。

池化(pooling)的出现是为了解决在对图像进行卷积处理时由于图像尺寸较大,特征值过多时出现的计算缓慢问题和数据量过多时出现的过拟合问题。池化的方法有最大值池化、平均值池化、随机池化、求和区域池化等。在CNN中,运用最多的是最大值池化,它能减少对图像进行卷积过程中由于参数误差造成的结果的偏移。最大值池化即取区域最大值,例如大小为4×4的矩阵M,需要池化为2×2的矩阵N,M为假定值,如式(5)所示:

(5)

过程为将M按2×2分割成4个区域,取每个区域的最大值即可得到矩阵N,结果如式(6)所示:

(6)

3 上位机移动端程序设计

3.1 人脸图像采集

图像采集页面CameraCaptureDialog.java继承自DialogFragment,使用Fragment而非Activity可以降低在两个页面之间切换的延迟感,提升软件实际体验。在主页面点击扫描按钮即可打开图像采集页面,页面提供镜头转换及打开闪光灯功能,在图像采集页面按住扫描图标开始采集图像。初始主页面及图像采集页面设计如图5所示。

图5 图像采集与控制处理页面Fig.5 Image acquisition and control processing page

采集图象使用cameraKit类中的captureImage函数,执行成功后回调callback函数,将图像数据保存在cameraKitImage对象中,最后使用该对象所在类中的getBitmap方法返回bitmap类型的数据并储存,流程如图6所示。

图6 图像采集流程图Fig.6 Image acquisition key code flow chart

3.2 人脸图像处理

本系统中我们使用OpenCV自带的haarcascade_frontalface_default.xml特征文件对图像进行人脸检测,图7为具体实现效果。

图7 人脸区域检测效果图Fig.7 Face area detection effect chart

图像的缩放就是根据原图像矩阵生成目标图像矩阵。例如,一个3×3大小的灰度图像A2需要将其缩放成4×4大小图像B,A2和B分为如式(7)和式(8)所示:

(7)

(8)

其中就涉及到如何填充新矩阵中各个值的问题。若使用临近插值算法,B中的值可由公式(9)和式(10)计算得出:

srcX=dstX×(srcW/dstW)

(9)

srcY=dstY×(srcH/dstH)

(10)

该式中srcX,srcY和dstX,dstY分别表示以左上角为原点时A2矩阵和B矩阵中值的坐标。srcW,srcH和dstW,dstH分别表示A矩阵和B矩阵的宽和高,在本例中分别等于3和4。于是,当我们要填充b11的值时,将dstX=dstY=1带入公式可得srcX=srcY=0.75,由于像素坐标只能使用整数,采用四舍五入原则,取srcX=srcY≈1。同理计算B中其他值可得到B如式(11)所示:

(11)

本系统中图像缩放采用双线性插值算法如式(12)所示:

f(Xi+Xj,Yi+Yj)=(1-Xj)(1-Yj)×f(Xi,Yi)

+(1-Xj)Yj×f(Xi,Yi+1)+Xj(1-Yj)×f(Xi+1,Yi)

+XjYj×f(Xi+1,Yi+1)

(12)

在该算法中,将原图像矩阵中的像素值表示为f(Xi+Xj,Yi+Yj),其中Xi和Yi表示坐标的整数部分,Xj和Yj表示坐标的小数部分。当需求依然是将A2图像矩阵缩放成B矩阵时,不再使用四舍五入原则,取srcX=srcY=0.75,即Xi=Yi=0,Xj=Yj=0.75,该算法中,我们将像素坐标从0开始计算,即可得到b11如式(13)所示:

b11=f(0.75,0.75)

=0.25×0.25×f(0,0)+0.25×0.75×f(0,1)

+0.75×0.25×f(1,0)+0.75×0.75×f(1,1)

=0.0625a11+0.1875a12+0.1875a21+0.5625a22

(13)

从该计算结果可以看出,b11的值由a11、a12、a21、a22四个值决定,而且由于f(0.75,0.75)离f(1,1)更近,所以在结果中a22所占的权重更大。因此双线性插值算法可以有效地解决临近插值算法中图像失真严重的问题,在图像缩放运算中使用该算法更加科学有效。

图像信息根据其表示方法可分为位图和矢量图。位图(Bitmap)又称点阵图或光栅图,简单的说,它使用我们称为像素(Pixel)的一格一格的小点来描述图像,矢量图(Vector)也称向量图,是通过组成图形的一些基本元素,如点、线、面、边框、填充色的信息通过计算的方式来显示图形[12]。由摄像头采集到的图像都是位图,由多个像素构成,每个像素点由A、R、G、B四个分量决定,分别对应透明度(Alpha)、红色(Red)、绿色(Green)、蓝色(Blue)。

调整图像颜色可以看作对构成该图像的所有像素点进行分别调色。在Android系统中,对图像进行颜色处理需要使用颜色矩阵(ColorMatrix),它是一个4行5列的数字矩阵。在调整单个像素点颜色时,只需要使用该矩阵与这个像素点的R、G、B、A四个值和单位值1构成的1列5行矩阵相乘即可。例如,矩阵CL为颜色矩阵,矩阵PI为像素值矩阵,如式(14)和式(15)所示:

(14)

(15)

由CM×PI得到的新矩阵CL即代表经过调色后的该像素点的R、G、B、A值。由公式(15)可知,调色后该像素点R、G、B、A的值由每个分量的系数和偏移量(e、j、o、t)决定。

本系统需要对图像进行灰度处理,只需要将由该图像生成的像素值矩阵与灰度颜色矩阵相乘即可。Android系统提供了许多默认的颜色矩阵,灰度颜色矩阵(grayMatrix)和反转颜色(reverseMatrix)矩阵,分别用GM和RM表示,如式(16)和式(17)所示:

(16)

(17)

灰度图像的特征为RGB的值相等。观察灰度颜色矩阵可以看出,处理得到的灰度图像的灰度值是由原图像中红、绿、蓝三种颜色根据不同权重混合而成,其中红色权重0.33,绿色权重0.59,蓝色权重0.11。

图8为本系统中对人脸图像进行进行缩放和灰度处理后,得到48×48大小灰度图像的效果图。

图8 图像灰度处理Fig.8 Collected face image processing

3.3 人脸情绪识别

由于已经在Linux桌面端输出了CNN模型文件,Android只需要将其导入工程,并引入TensorFlow接口即可使用。实例化接口代码为:inferenceInterface=new TensorFlowInferenceInterface(assetManager,modePath)。

其中assetManager为Android默认资源管理对象,modePath为CNN模型文件名及所在工程目录,值为file:///android_asset/FacealExpressionReg.pb。图9为数据输入模型文件返回情绪编号相关代码流程。该程序中传入的图像数据类型为2304维浮点型数组。返回值labels包含0~6总共7种情绪编号。

图9 数据输入模型文件返回情绪编号程序流程Fig.9 Data input model file returns the emotional number related code flow chart

4 下位机硬件控制程序设计

NodeMCU是一个能快速搭建物联网系统的硬件平台,平台集成ESP8266 Wi-Fi芯片,使用Lua脚本进行编程开发。本系统使用该平台接收方案信息并控制WS2812灯带颜色,下位机的硬件程序控制流程图如图10所示。

图10 硬件程序控制流程图Fig.10 Hardware program control flow chart

本系统总共能分辨0~6总共7种人脸情绪,分别为开心、平静、惊讶、低落、害怕、反感、愤怒。每种情绪对应一种RGB灯光方案,在该方案中,用三个8位数字来分别表示RGB的值,其范围为0~255。具体方案如表1所示。

表1 情绪类型对应的RGB LED三通道PWM控制值Table 1 Emotion type corresponds to RGB mixed light three-channel PWM value adjustment scheme

由于需要将灯光方案发送至单片机接收端,所以需要制定应用层协议。在本系统中,使用长度为10的字符串常量来表示灯光方案。例如使用“a255036000”来代表编号0方案,第2~10位由RGB的值顺序排列组成,第一位为标志位,单片机接收到字符“a”后才会继续接收后续字符,该位也为实现其他灯光效果提供方便。

5 实验测试

为了测试系统识别情绪的准确度,我们使用700组fer2013.csv中的人脸图像对系统进行测试,其中包括0~6总共7种情绪的图像各100组,使用该样本进行的准确度测试结果如表2所示。

表2 情绪识别测试结果Table 2 Emotion recognition test results

从测试结果可以看出,7种情绪中开心、平静、愤怒识别率较高,反感、低落识别率较低。分析原因可能是由于人脸情绪中,反感和低落在面部的特征体现不如其他情绪明显。

在整体系统实际图像测试中使用本人四组不同情绪照片做测试,分别包括平静、开心、低落、惊讶。测试中包含对戴眼镜及侧脸的不确定因素的测试。测试的四组图像如图11所示。

图11 情绪识别调控RGB LED灯光结果 Fig.11 Emotional recognition to control RGB LED lighting

从图11结果可以看出,1、2、3、4号图像最后得到的结果分别是平静、开心、低落、惊讶,与图像实际情绪较为接近。从第2号图像的处理结果可以看出,该系统能正确识别戴眼镜的人脸图像。从4号图像的处理结果可以看出,该系统对小角度的侧脸图像能正确识别。

6 结束语

本文讨论了利用卷积神经网络CNN算法识别移动端采集到的人脸面部情绪的方法,实现了通过无线物联Wi-Fi进行情绪识别结果传送,向微控制器发送相关的数字调控信息控制LED灯的RGB三通道混合光颜色和光强度变化。设计中研究和应用了卷积神经网络模型训练、图像处理以及Android程序编写方法;并采用单片机无线通信技术,结合Android Studio开发软件,在OpenCV与TensorFlow框架下对传统照明情绪识别的应用设计,实现可根据人物情绪变化实时调节LED灯光特性的效果,可作为利用LED灯光显示判别人的情绪状态,满足人们对照明应用多样化的需求。在后续工作中,可进一步结合心理学、医学等不同领域深入研究LED照明光环境与人情绪变化的内在关系,以及增加系统智能反馈调节性能以便于更好地对利用灯光调节情绪方案的调控精度进行改进。

猜你喜欢

人脸灰度卷积
采用改进导重法的拓扑结构灰度单元过滤技术
基于3D-Winograd的快速卷积算法设计及FPGA实现
有特点的人脸
一起学画人脸
Bp-MRI灰度直方图在鉴别移行带前列腺癌与良性前列腺增生中的应用价值
从滤波器理解卷积
三国漫——人脸解锁
基于傅里叶域卷积表示的目标跟踪算法
基于最大加权投影求解的彩色图像灰度化对比度保留算法
基于灰度线性建模的亚像素图像抖动量计算