孙 康 王 琪 岳琪琪 金琦淳
( 1 江苏科技大学张家港校区机电与动力工程学院,江苏张家港, 215600;2 江苏科技大学苏州理工学院机电与动力 工程学院,江苏张家港,215600)
随着机器人技术日臻成熟,应用领域不断扩展, 迎宾机器人开始出现在人们的视野中[1]。迎宾机器人的主要功能是代替人类作为场馆的导游,这样不仅可以节省人力成本,还能吸引参观者的注意力并增强和参观者之间互动,促进参观者深入了解当前参访目标。人脸识别作为迎宾机器人的重要功能,其设计至关重要。
人脸识别是神经解剖学、计算机视觉、图像处理、模式识别、机器学习等多学科交叉的且以特征鉴别为目的的研究领域[2]。人脸识别作为人体特征识别的一种,相比其他特征识别,具有自然性和隐蔽性的优点。在样本获取方面,人脸识别取样可以不接触目标,取样更方便,因此其研究的实际意义重大,也具有更加广泛的应用领域。
人脸识别研究最早始于20 世纪50 年代,在80 年代后期引入了神经生理学、脑神经学、视觉知识等,人脸识别的研究又重新活跃起来。国外对于人脸识别的研究较早,其中包括麻省理工学院、康奈尔大学等著名大学,国内也有许多科研机构、院校从事这方面研究,如清华大学、浙江大学等,其中,由清华大学研制的大型人脸识别系统应用于2008 年北京奥运会[3],并取得良好效果。
人脸识别在图像采集和样本比对等过程中会受到很多因素的干扰。其中,人脸图像的识别受图像质量、尺寸、背景复杂程度、人脸表情多样性、外界光照强度、人脸旋转、姿势变换等因素的影响。因此实现人脸图像识别的挑战性很大。
本文主要针对迎宾机器人对参观游客的面部识别进行研究。由于人脸识别的干扰因素太多,且图像表示与特征提取较为复杂,系统选择在检测到人脸后针对特定区域作识别处理,因此不支持单一图像中的多人脸检测与识别。
人脸检测是计算机视觉领域研究的热点问题[4]。本文人脸检测主要是利用Haar 级联特征检测器对图像进行检测,该检测器是用来确定一个对象是否存在于图像中的一系列对比检查,其检测环节主要包括:基于Haar-like 特征值的检测[5]、使用积分图加快检查速度、采用Adaboost算法训练建立有效识别人脸和非人脸的强分类器、级联各分类器加强筛选以提高准确率等,如图1 所示。
图1 人脸检测环节
本文采用的正面人脸探测器,共有25 个检查阶段,每个阶段都包含数百个分块的检查,Haar 级联的运行速度快,因为只有在上一个阶段通过后才会进行下一阶段的评估。探测器采用积分图的数据结构,以便在恒定时间内快速执行每个区域的对比检查。考虑到基于局部二值模式(LBP)的人脸识别算法使用的图像格式,采集的图像格式设置为灰度图[6]。
人脸识别系统主要由4 个模块组成:图像预处理模块、人脸检测模块、图像表示与特征提取模块、人脸识别模块,如图2 所示。
图2 人脸识别系统组成
自芬兰奥卢大学机器视觉组提出基于LBP 的人脸识别方法后,该方法目前已成为纹理分类和人脸识别领域特征提取的主要方法之一[7],其具有高效、鲁棒性强、允许快速提取特征等优点。
进行人脸识别前需要创建人脸识别库。由于人脸识别算法运行时占用大量内存,故对人脸库中图片的大小和格式要求较高。OpenMV 可编程摄像头模块在获取SD 卡存储的识别库中的图像时,需将其储存在MicroPython 堆中而不是帧缓冲区,因而图像副本大小需要严格控制。结合待识别人在图像中的成像大小和LBP 算子的特征提取要求,本文选择识别库中图像的分辨率为92×112 像素,图像格式为PGM。
人脸检测完成后,截取图像中的人脸区域作为待识别图像,与识别库中各组图像比对计算相似度距离,最后根据各组匹配距离判断人脸身份。
完成人脸识别后,系统根据面部所处图像的位置控制舵机旋转,使得摄像头对准移动的人脸,以增强参观者体验并提高趣味性。舵机的驱动控制采用PID 算法,该算法通过误差信号控制被控量,PID 控制器是比例、积分和微分3 个环节的加和[8],如图3 所示。
图3 PID 控制器结构原理
本文使用的PID 控制算法编写设计为独立模块存储在SD 卡中,使用时可直接导入,增强了系统的可移植性和可读性,简化了主函数的设计。当舵机的初始化完成后,由人脸检测算法获取到人脸位置,根据其偏离图像中心线的程度,采用PID 算法计算获取输出值,即控制舵机偏转的PWM。常规的舵机在固定中值基础上根据偏差偏转,本文设计的舵机前一次偏转的大小直接影响当前偏转的大小,故舵机的基础值当以每次偏转后的值为准。
人脸识别系统硬件主要包括OpenMV3 CamM7、S-D5舵机、1.8 英寸TFT 液晶显示屏、Micro SD 卡、电源和稳压模块等。其中,OpenMV3 CamM7 包括OV7725 摄像头模块、2 个红外LED、1 个彩色LED、Micro SD 卡卡座、高速USB 接口和9 个外接I/O 口等。
OpenMV3 CamM7 使用的单片机型号为STM32F765VIT6,STM32F7 系列是ST 推出的基于ARM Cortex M7 内核的处理器,性能远优于STM32F4 系列,其中,STM32F76x系列拥有更先进的内核、更丰富的外设、更高的性能。
OV7725 图像传感器是一款封装尺寸较小的低电压的CMOS 设备,可以提供单片VGA 摄像头和影像处理器的所有功能。该传感器采用特制的传感器技术,可降低或清除如固定图案噪声、浮散等光学及其他方面的瑕疵,以提高图像质量,获取清晰稳定的图像。
系统电路连接采用Fritzing 开源电路设计软件绘制,如图4 所示。其中TFT 液晶显示屏以SPI 串口的方式与单片机连接。
图4 人脸识别系统接线示意图
系统的PID 算法模块、主函数、人脸识别库等均存储在Micro SD 卡中,系统上电后,将自动加载SD 卡,读取存储数据后自动运行。
识别系统功能模块通过驱动舵机带动摄像头对准移动的人脸,其实现主要基于PID 算法。考虑到主函数的简洁性和程序的可移植性,本系统所用的PID 算法编写为一个独立于系统的模块。
PID 控制器分为比例、积分、微分3 个环节,模拟PID 表达式为:
其中, 为输出信号, 为偏差信号, 为比例系数, 为积分时间常数, 为微分时间常数。
在嵌入式开发应用中,需将模拟量转化为数字量处理,将式(1)变换可得位置式数字PID 表达式:
其中, 为采样周期。
根据式(2)可编写PID 算法模块,其设计流程如图5 所示。
图5 PID 算法设计流程
系统主函数传递的参数为当前偏差值与设定值,其中设定值为常数,即图像横向分辨率的一半;随后函数读取当前时间并计算偏差的差值,即和调用时间差,即 ,根据 的大小判断是否对微分控制项和积分控制项处理;最后根据式(2)计算输出参数并返回。
图6 主函数程序流程图
人脸识别系统主函数的设计主要包括模块导入及初始化、全局变量定义与初始化、图像采集与显示、人脸检测与标记、人脸识别与显示、舵机转动对准人脸等。主函数程序流程如图6 所示。
系统启动后首先导入各个功能模块,然后对LED、摄像头模块、LCD、UART(通用异步收发传输器,即串口)、舵机、时钟、PID 参数等进行初始化,并定义全局变量。
其中,摄像头模块的设置至关重要。人脸追踪图像的最佳设置是大小为HQVGA、格式为灰度图,其中,HQVGA 分辨率为240×160 像素。对于1.8 寸的LCD,采集的图像超过其128×160 像素的显示范围,LCD 无法完全显示,因此,设置LCD 感兴趣区即显示区域为采集图像的中间区域;设置舵机相关参数,包括舵机频率、中值、最大值以及最小值,最值的设置需要考虑到安装时的视觉死区、防止转角过大损坏舵机等问题。
人脸检测通过Haar 级联特征检测器来实现,首先利用构造函数载入Haar 级联特征检测器,检查过程分多个阶段,后一阶段的运行以上一个阶段的完成为前提。对比检查并不复杂,类似于检查图像的中心垂直是否比边缘更轻微的过程等。前期阶段进行大范围的检查,后期进行更多、更小区域的检查。本文采用正面人脸模型,构造函数将正脸Haar 级联导入到内存中,对比阶数设置为25,降低对比阶数值可加快匹配速度,但会降低检测结果的准确率;图像采集完成后利用特征搜索函数查找人脸,函数中的匹配阈值越大,则匹配速度越快,同时错误率也会上升,函数中的尺度因子可以缩放被匹配特征的大小,考虑到人脸识别距离与内存限制,其值可以适当减小;找到目标特征后,利用矩形绘制函数框选出人脸特征。
本文仿照ORL(Olivetti Research Laboratory)人脸库创建的识别库包含20 个不同主体(个人)的10 幅不同的图像,其中,面部表情(眼睛睁/闭、微笑/不笑),面部细节(戴眼镜/不戴眼镜)和比例(差异最高可达10%)都不相同;所有图像都在同一个白色背景下拍摄,主体处于直立、正面的位置,对某些倾斜和旋转的可包容角度可达20°左右,如图7 所示。
图7 识别库第一组人脸图像
人脸识别主要基于LBP 算子来实现。首先,将人脸检测环节所框选的人脸区域保存为待识别图像;然后利用LBP 特征值提取函数计算待识别图像的特征值,并提取识别库中每组图像的特征值;接着利用距离度量函数计算待识别图像与库中每组图像的符合程度(对于LBP 描述符,函数返回的是一个体现2 个描述符之间区别的整数,该距离测度是对相似度的一个度量,测度值越接近0,LBP 特征点匹配得就越好);对识别库中的每组人脸图像测度完成后,计算各组的平均距离,根据平均距离,完成人脸识别与标定。具体标定方法为:查找平均测度值最小的匹配组,然后计算剩余各组平均测度值的平均值,根据两者差值大小,判断是否需要查找结果或直接丢弃。当差值超过阈值时,将测度值最小的匹配组对应的身份信息使用串口发送给上位机,并在液晶屏上输出标记结果,完成本次识别。图8 为人脸识别功能的程序流程图。
系统的随动功能主要基于位置式PID 算法来实现。人脸检测完成后会框选出人脸区域,根据框选的感兴趣区,获取目标值,即人脸中心在图像中的横向位置。为减小误差,取近10 次的加权平均值作为有效值。由于系统启动时目标值数组未更新造成有效值过小(目标值数组赋初值为0),从而引起舵机偏转过大,故设置当数组更新6 次后开始输出PWM。由于取加权平均值可近似看作积分处理,且舵机的转动实时性较高,故PID 算法中不再添加积分项。对输出值限幅后利用PWM 输出函数完成对舵机的驱动控制。
图8 人脸识别功能程序流程图
系统的电路连接与程序编写完成后,将主函数、各功能模块及识别库图像存储到Micro SD 卡中,运行程序完成对实时人脸的识别标记以检验识别结果。
图像尺度大小的标准根据待识别区域的分辨率和识别库中图像分辨率的比值来确定,从表1 可以看出,采集的图像中目标太大或太小都会给识别带来困难;深度旋转是指头部绕颈部的转动,这样会造成人脸特征的缺失,给识别带来更大的困难。这主要是由于单片机本身处理性能的限制,导致识别的准确率并不算高。图9 为系统识别完成后输出的两帧已标记结果的图像。
表1 识别结果
图9 标记识别结果的输出图像
本文介绍了迎宾机器人人脸识别系统的整体设计及软硬件设计方案,并测试了该系统的人脸识别率。测试结果表明,该系统具有较高的识别率和较强的鲁棒性,能够准确、实时地驱动舵机对准移动的人脸,增强参观者的体验;其人脸检测、人脸识别、舵机驱动、串口发送、LCD显示等功能均能正常使用。