基于手势控制的人脸追踪系统设计与实现

2023-09-25 03:39周久韧李晴
电脑知识与技术 2023年22期
关键词:树莓导轨人脸

周久韧,李晴

(1.武昌首义学院 信息科学与工程学院,湖北 武汉 430070;2. 鲸目科技(武汉)有限公司,湖北 武汉 430074)

0 引言

目前,大多数人脸追踪的产品只能通过改变摄像头的拍摄角度来实现人脸追踪,无法满足大范围的人脸追踪需求。本文主要是基于目前国内外人脸检测和追踪,以及步进电机导轨控制等相关技术,设计并实现了一款以树莓派4B开发板为人脸追踪算法及主控中心,以小型CSI 摄像头为图像输入模块,以OpenCV-Python软件库为算法的核心库,以8051系列单片机为外部硬件控制中心,以3086A-MFP10S 芯片为放大单片机系统输出信号的驱动模块芯片,以两相四线42步进电机导轨为系统的主体硬件运动部分;通过对摄像头获取的图像进行人脸追踪,由树莓派输出控制信号,且新型、结构简单、成本低廉、功能齐全的人脸追踪系统[1-2]。该系统除了能控制导轨运动和实现人脸追踪功能外,还可以进行手势识别控制、网络实时图像推流及控制等功能。

目前,完成人脸追踪都需要调用摄像头并进行人脸检测。人脸检测可以通过建立深度学习的Tensor-Flow神经网络框架方法来实现,然后通过树莓派上的CSI摄像头进行图像采集和获取,再用OpenCV进行图像处理,并进行人脸检测,从而得出人脸的相对位置,并控制系统运动[1]。另外,还可以采用其他常规应用在3D 摄像头下的高精度人脸检测方法,如Kanade-Lucas-Tomasi(KTL) 法、粒子滤波法、追踪学习检测法、PHD(Probability Hypothesis Density,概率密度假设)滤波器法[3]。通过比较以上方法的优缺点并权衡成本关系后,决定采用追踪学习检测法进行人脸检测。

在与人脸追踪相关的系统硬件设计中,一般采用STM32 单片机的PWM 信号输出来控制舵机,根据人脸在画面中的相对位置,对摄像头进行一定角度的转动,即可实现人脸追踪[1]。该方法常用于监控、安防等领域,虽与本文所实现的功能很相似,但摄像头只能固定在一个点位上进行摄像头转动的控制,而不能实现大范围的导轨式平移控制。另外,直接采用单片机控制设备进行驱动,可能造成驱动电流低、驱动能力弱的特点。所以,增加驱动模块,使树莓派和单片机仅输出控制信号,并采用驱动模块增加驱动电流,进而控制舵机等外部硬件设备。

在本文所设计的系统中,需要将舵机替换成步进电机导轨,可以实现大范围的导轨式平移控制[2]。

本文中所用到的步进电机导轨为42 步进电机导轨,其电机为两相四线步进电机,共有6路输入引脚,另外两个悬空引脚为COM 端引脚,可以接入高电平进行更大电流的驱动控制。本文研究所采用的驱动模块主芯片为3086A-MFP10S 芯片,此芯片的驱动能力可以驱动42步进电机导轨[2]。

在本文研究设计的系统中,将驱动模块与硬件控制系统分开设计,能够有效减小电机反转时造成的反相电流对硬件系统的影响,从而避免单片机系统损坏。另外,在功能设计上,网络实时图像推流及控制功能,可以使系统的实时图像能够直接通过网络通信的方式,被手机、电脑等设备直接看到,同样也能达到网络摄像头或网络远程监控一样的效果,还可以通过网络的上位机设备直接控制整体系统;手势识别及控制功能则可以通过不同的手势来控制整体系统。

1 系统总体设计

人脸追踪系统是一个悬挂式或地轨式的控制设备,能够自动追踪人脸的正脸进行左右移动,从而实现使摄像头拍摄到的人脸始终在一个居中位置。

整体系统从功能上进行分解,可由以下4 个子系统及模块组成:1) 基于OpenCV 的人脸追踪系统。2)基于51单片机的42步进电机导轨控制系统。3) 基于MediaPipe 的手势识别及控制系统。4) 基于Flask 的网络实时图像推流及控制系统[4-7]。

系统运用场景及结构图(侧面)如图1所示。

图1 系统运用场景及结构图(侧面)

当系统摄像头前的人左右移动时,系统便会控制导轨追踪人脸进行移动。但只有人的正脸被检测到时才会被系统追踪;如果在系统追踪人脸的过程中,人物因移动过快跑出画面而导致人脸丢失,或者因正脸被遮挡而检测不到,系统则会保持上一个追踪状态,直到重新检测到人脸或运动到限制位置。

系统的控制模式分为两种:1) 手动模式,即不进行人脸追踪,采用手势或终端设备进行控制、调试、设定导轨等。2) 自动模式,即进行人脸追踪,控制步进电机导轨跟踪人脸进行移动。

在网络控制中,控制设备可以是手机、平板、电脑等,也可以是与树莓派开发板连接到同一网络下的设备(即上位机)。另外,也能够通过网络将图像实时发送到终端设备浏览器对应的目标网址上,实现同网络摄像头、网络监控一样的功能。还增加了修改人脸追踪阈值的功能,能更改人脸追踪系统中,对人脸中部位置的定义范围,从而影响人脸追踪灵敏度。

系统硬件方面主要由树莓派、小型摄像头、单片机、步进电机导轨及驱动模块构成,软件方面主要由Python和C语言编写。导轨在用于大型导播室时可以采用地轨式设计,比悬挂式更稳定。

树莓派的作用主要是将模块整合起来,实现集人脸追踪、手势识别和网络实时图像推流于一体的功能;而单片机部分则实现对步进电机导轨的控制。由树莓派开发板的GPIO 口输出信号,单片机部分接收信号后即可控制步进电机导轨。

2 基于OpenCV的人脸追踪系统设计

基于OpenCV的人脸追踪系统为整体系统最重要的软件核心子系统。该部分的设计决定了整体系统在进行人脸追踪控制时的功能。

此子系统主要实现的功能就是能够检测出摄像头前的人脸,并且通过比较摄像头图像大小和人脸位置中心坐标的关系,从而对人脸的位置进行判断,输出相应的信号。在这里,既要在保证系统的延时不高,又要能够准确输出“左”“右”“中”三种人脸位置信号。

系统采用追踪学习检测法来进行人脸检测。此方法不需要关于面部结构的知识,且易于编程,不需要有关机器学习的相关知识,数据的准确度取决于分类器的数据[3]。在这里采用OpenCV 官方的人脸正脸检测器。

为了进行人脸追踪,首先通过人脸检测计算出图像中被检测人脸中心的坐标,将其与实际摄像头画面宽度值进行对比,即能判断出人脸所在位置。如将画面中心点计算出来,左边界点到中心点减去50像素的部分定义为“左”,中间左右各50 像素的部分定义为“中”,中心点往右50 像素至画面右边界点定义为“右”,从而将画面分成三个部分;当人脸被检测到时,其中心点总会在其中一个位置。

如图2所示,可以利用print函数在终端页面上进行人脸位置状态结果的输出,即可获取输出结果。

图2 人脸追踪系统的功能测试图

3 基于51单片机的42步进电机导轨控制系统设计

基于51单片机的步进电机导轨控制子系统,是整体系统中最为核心的硬件子系统,其决定了控制42步进电机导轨运动时的性能和功能。步进电机导轨中的步进电机为42步进电机导轨,即一种由两相四线步进电机驱动的导轨,其共有4 个输入端,分别为A+、A-、B+、B-[8]。42步进电机导轨实物图如图3所示。

图3 42步进电机导轨实物图

3.1 步进电机导轨控制功能实现

选取3086A-MFP10S(B)芯片作为驱动模块的主要芯片。用此芯片驱动步进电机,只需要对其三个输入引脚发送信号即可,大大简化了单片机系统的控制方法。

在驱动步进电机导轨运动时,ENA 要置高电平,且IN1、IN2也要满足一定的时序关系。IN1、IN2共四种电平状态,IN2置1后,IN1要滞后IN2四分之一个周期。ENA、IN1、IN2,以及驱动模块四路输出引脚的时序关系图如图4所示。

图4 驱动模块主要引脚的时序关系图

在该单片机控制系统中,将P0.0、P0.2 与驱动板的IN1、IN2 相接,P0.1 与驱动板ENA 相接,故单片机P0 组IO 口的输出状态可依次为0x03、0x07、0x06、0x02[9]。若按逆序输入信号则可实现反向运动。

经过硬件测试,状态输出的最佳间隔应为2 ms,一个完整的控制周期即8 ms。按2 ms 的时间间隔输出,连接导轨皮带的齿轮不易打滑;若是降低到1 ms,则会完全打滑。在单片机的C 语言程序上,延时1ms定义为经过125 次赋值操作[10]。通过控制延时的时间,就可以控制导轨运动的速度。延时时间越长,导轨运动速度越慢;反之则越快。

另外,经过对输出信号次数的标记,即可实现软件上的运行限度定义,也可以对初始位置进行标定;同时,在开机后,以4 ms的时间间隔输出信号,可以使导轨慢速运动,使其在后续正常运动时做到完全不打滑。

3.2 硬件系统简化

采用PCB 设计并制版的方式来简化单片机系统[8]。树莓派开发板通过GPIO口与单片机系统相接,而单片机系统只需要有4个引脚输入信号,可以根据树莓派GPIO 口的排列,在单片机系统板的背面设计了一个20×2引脚插座的形式,便于单片机系统和树莓派开发板的连接。单片机系统板原理图如图5所示。

图5 单片机系统板原理图

图5中的J1即为40引脚插座,由于其设置在单片机系统的背面,故接线方式参照的是树莓派开发板的GPIO口排列的镜像位置。其中GPIO.4和GPIO5(BCM编号23、24) 与两个LED相接,用于整体系统运行时的状态表示。J1 的25、24、23、22 引脚分别对应GPIO.22、GPIO.23、GPIO.24、GPIO.25 引脚,与单片机对应的P3.0、P3.1、P3.2、P3.3引脚相接。

4 基于MediaPipe的手势识别及控制系统设计

手势识别的基础是手势关键特征点检测。采用Solutions 方法下的Hands 模块来进行人手检测,从而获取到人手的21个关键点坐标和左右手判断值。

其21 个特征点分布如图6 所示。通过对各个手指关键点的坐标进行特征向量定义,并计算出一个手指的两个特征向量角度,即可判断手指是张开还是闭合。

图6 人手检测特征点分布图

图6中,点3、5、9、13、17的坐标相对于手掌0点总是固定的,故以大拇指为例,应采用序号为2、0和3、4的特征点进行特征向量定义,进而计算出角度。通过2、0 特征向量与3、4 特征向量坐标求得其夹角余弦值,并反余弦求解,即可得到角度。

通过多次测试,最后总结出了三个手指角度与手指状态的规律:

1) 除大拇指外,其他手指闭合时,其角度大于65°;

2) 大拇指闭合时,其角度大于53°;

3) 对于所有手指,当手指张开时,其角度小于49°。

通过定义不同的手势所对应的手指状态,即可实现手势识别。在这里共定义了15种手势,加上左右手判断则可以实现30种不同的手势识别。手势识别测试效果如图7所示。该手势即为中指、无名指闭合,其他张开,取名为“Spider-Man”。

图7 手势识别效果测试

5 基于Flask 的网络实时图像推流及控制系统设计

该子系统的功能主要在手机、电脑等主系统联网的上位机设备实现,其控制功能与手势识别及控制系统大致相同。另外,网络实时图像推流及控制系统也能够将系统摄像头前的图像实现发送到上位机中对应目标网址上,实现同网络摄像头、网络监控一样的功能[11]。

在前端页面设计上,主要用HTML来进行网页设计,其设计的网页如图8所示。

图8 网络实时图像推流及控制系统的前端网页

而后端部分,则利用Flask 库对前端表单提交的数据进行处理,实现相应的功能,并进行图像推流。

在图像推流中,对OpenCV采集的图像进行处理,并转为bytes 类型图片,由Flask 推送到对应地址。若循环推流,则在前端网页上看起来与视频效果无异。在前端上,通过img 标签指向推流地址即可看到实时图像,延迟仅0.15s左右。

该系统的效果测试图如图9所示。

图9 网络实时图像推流及控制系统的效果测试图

6 系统整合

在硬件上,将树莓派开发板与单片机硬件系统连接;而在软件上,利用Threading 库的多线程并发的方式对三个树莓派上运行的软件子系统进行整合,使其能各尽其责,并通过GPIO口输出控制信号。

最后的系统整体连接实物图如图10所示。

图10 系统整体连接实物图

在树莓派上,配置无屏幕启动并以开机自启动的方式自动运行脚本。程序运行并进行联网后,指示灯闪烁三下,进入主程序;若无法联网,则每5s进行一次判断。进入主程序后,即可实现相应的功能,并以手动、自动两种模式来控制步进电机导轨运动。

7 结论

本文主要是以整体系统为对象,进行了理论研究和系统设计,并最终制作出实物,实现相应的功能。整体系统结合了计算机视觉、网络编程、人工智能和机器学习等领域的专业技术,最终主要实现了自动追踪人脸并使摄像系统进行左右移动的功能,以及多个辅助性功能。其在线上授课、线上会议、节目导播等领域有较大的应用价值。

在研究与系统设计中,主要进行了以下工作:

1) 查阅相关资料和文献,确定本文的研究意义及背景;

2) 对系统进行初步设计;

3) 对系统中所涉及的硬件设备、开发板等进行选购;

4) 利用OpenCV,对系统中软件部分的人脸追踪系统进行设计和开发;

5) 利用51 系列单片机,对系统中硬件部分的步进电机导轨控制系统进行设计和开发;

6) 利用MediaPipe,对系统中软件部分的手势识别及控制系统进行设计和开发;

7) 利用Flask 和HTML 语言,对系统中软件部分的网络实时图像推流及控制系统进行设计和开发;

8) 对整体系统进行软件和硬件层面的整合;

9) 对整体系统进行测试。

最后设计的整体系统,成功实现了能够自动追踪人脸并控制摄像系统左右移动的功能,且包含了手势识别控制和网络控制两大扩展控制功能,使其能够完成12个控制功能。其中,还增加了网络实时图像推流功能,使其能够通过网络连接,在上位机上看到摄像头拍摄的实时图像;也扩展了修改追踪阈值的功能,使其能够通过上位机修改人脸追踪功能的中部位置范围定义。

对于本文所研究和设计的整体系统,由于是从初步开发的角度考虑的,其设计目标即为实现相应功能,同时也得考虑初步开发成本,故仍存在一些不足。

在硬件层面上,采用的导轨为42 步进电机导轨,其灵敏度不高,且当步进电机转速过快时,会造成导轨传动部分打滑的现象;导轨移动时,噪声略大。另外,软件部分运行的主控板为树莓派4B开发板,其对图像处理的算力较弱,且用于采集图像的摄像头成本较低,导致其只能用OpenCV进行人脸检测,而用更优化的MediaPipe算法则效果不佳。解决方法即换用算力更优、更适合计算机视觉算法的开发板,并替换更高清的、可自动变焦的摄像头,换用灵敏度更高、运行速度更快、线程更长的导轨,不过这也会提高整体开发的成本。

而在软件层面上,主要采用了多线程函数库进行了系统整合,其功能模块在程序上是并发运行的,虽说系统整体流畅度达到了要求,但仍有些许延迟和卡顿。若是更换了CPU核心数更多的开发板,可以改用多进程函数库进行开发,使每个功能模块实现真正意义上的并行。再者,换用更好的摄像头后,可以采用如MediaPipe 等计算时间更优化的人脸检测方法,从而减轻系统的算力负担。

对于网络实时图像推流及控制系统,可以在局域网方向上进行开发和衍生。在功能上,可以设计成App,自动发送热点并进行连接;在无线控制方向上,可以建立专属服务器,通过设备发送信号,上位机从互联网上接收信号,从而实现全球范围内的无线控制。

对于系统外观设计层面,可以进一步集成、压缩系统,设计专属系统板,集成软件系统与硬件系统于一体的整体系统板,去掉多余的功能模块,并设计结构外观,从而可以使系统作为一个产品出售。

对于功能扩展层面,可以在导轨平台上加入一个云台和舵机控制系统。通过检测人脸在画面中的高度位置,控制舵机改变导轨平台角度来追踪人脸,使其完成二维方向上的追踪,而不只是一维层面的水平方向追踪。

猜你喜欢
树莓导轨人脸
棒与导轨问题分类例析
有特点的人脸
电梯导轨支架检验探讨
基于树莓派的骑行智能头盔设计
三国漫——人脸解锁
一种电动车传动机构
基于树莓派的远程家居控制系统的设计
响应面法优化红树莓酒发酵工艺
导轨减摩涂层“暴聚”问题分析及改进
马面部与人脸相似度惊人