数字化的人:人体关键点检测及教学应用之手势识别

2022-11-07 06:12于方军山东省淄博市博山区山头中心学校
中国信息技术教育 2022年21期
关键词:手部关键点手势

于方军 山东省淄博市博山区山头中心学校

侯鹏 山东省淄博市博山区实验中学

孙丽君 山东省淄博第二中学

计算机视觉主要研究的是让计算机认识人和物,把拍摄的物体数字化后,通过算法计算机学会认识物体,把人体数字化后计算机也能认识人类,更好地服务于人类。例如,计算机学会了人脸识别的算法,我们在坐火车时,不用取票刷脸就能进入高铁站;学会检测手部关键点可以用手势控制设备;当检测到肩部数据点坐标和膝盖数据点坐标比较接近时,判断出他可能在蹲下身体。这类算法统称为人体关键点检测,常用的能进行人体关键点检测的开源算法模型有OpenPose、MMPose、MediaPipe等,其工作过程都是通过算法检测出人体有代表性的关键点,再对这些关键点进行判断。

以MediaPipe中的姿态、人脸、手势识别为例,MediaPipe借助一个轻量级的卷积神经网络架构,分别利用姿势(MediaPipe Pose)、面部(MediaPipe Face Mesh)和手部(MediaPipe Hands)关键点模型,生成总共500多个关键点(身体姿势33个,脸部468个、手部21个,如图1所示),运算速度快,可以用它完成如健身追踪和手语识别、舞蹈和健身应用等。下面,我们从手势识别入手,了解人体关键点检测工作过程,并借助手势识别实现一个手势控制灯的硬件应用实例,再通过采集手部关键点数据作为数据集,训练一个手势识别的神经网络,通过手势控制开源硬件制作的小车运动。

图1 关键点检测图片(MediaPipe官网)

● 简单手势控制——控制开关灯

利用采集到的手部关键点数据,结合开源硬件,可以实现简单的手势控制灯,硬件选用arduino板,用pinpong库进行控制。

1.获取手部关键点坐标,通过如下页图2所示的代码读取手部关键点4(大拇指尖)、关键点8(食指尖)的x、y坐标,MediaPipe用landmark函数,可以读取食指尖关键点坐标,同理可以用landmark读取拇指尖坐标,用食指和拇指的位置坐标作为控制量,只要拇指尖的x、y坐标和食指尖x、y坐标的差值小于5,就认为两个手指尖接触,此时点亮LED灯。

图2 手指尖关键点坐标读取及代码应用

2.用Python控制开源硬件arduino板的11脚输出,从而控制灯的亮灭。这里选用的是pinpong库,用pip install pinpong可以方便安装该库,使用时需要先定义好输出脚,本例中定义11脚为输出脚,运行代码如图3所示,根据实时采集到的手指关键点坐标,控制接在arduino板11脚的灯亮灭。

图3 手势控制开关灯代码

这个案例是对MediaPipe提供的训练好的模型的一个简单应用,如果要训练特定的手势识别,通过这种方式则难以完成。所以,可以自己设计一个神经网络模型,并用采集到的数据训练它,让计算机学习、认识各种特定手势,帮助我们更好地理解基于数据的机器学习算法是如何工作的,这其中包括数据采集、搭建神经网络、模型训练、模型应用等过程。

● 复杂的手势控制——从数据中学习

从数据中学习的过程,就像生活中教幼儿识图的过程,教师会从一堆图片中挑出一张“苹果”,不断地给幼儿读“苹果”让他认识,再挑出一张“桔子”让他认识,然后任意挑一张让他判断是什么,这些图片就是学习用的数据。所以,在教给计算机认识手势时需要先采集一些手势信息,在CPU模式下为了提高训练速度,可以采用手部关键点的数据训练,MediaPipe Hands已经把人手图像抽象为21个数据点,用这些数据点的信息进行训练可以大大提高模型训练效率,同时也能帮助学生理解神经网络如何通过数据进行学习。

1.采集信息构建数据集,首先做一个手势指示方向,学习需要的数据为:图片、带数据点图片、方向标签、对应采集序号(如下表)。

图片带关键点信息图片标签 Stop(停止) Up(上) Down(下) Left(左) Right(右)序号 0 1 2 3 4images/BZ_85_1109_2139_2268_2584.png

采集左手信息,握拳代表原地不动,用食指朝上代表向上,食指朝下代表向下,食指朝右代表向右,拇指朝左代表向左,每种手势可以从不同角度采集20张图片,用keypoint.csv保存数据点相对坐标信息,第一列记录是手势标签信息,如0代表stop停止,也就是攥拳时手指信息。后面42个信息代表手部21个特征点,每个特征点记录x、y两个相对坐标信息。上页图4显示了同一个手势的多次数据采集的过程,并可以作为后续分析的基础数据。

图4 手指数据点信息

可以用keypoint_classifier_label.csv来记录标签信息,手工添加该信息,进而决定神经网络模型的分类标签数,如图5所示。在采集模式下,按下对应序号完成手势拍照,采集一定数量的照片。

图5 分类标签信息

2.搭建神经网络,用keras构架的sequential模型搭建一个六层神经网络(如图6),在输入、输出层中间是两个全连接层(Dense)和两个防止过拟合的dropout层。

图6 Keras搭建的神经网络

3.训练认知模型。设置好各种训练参数后,就可以开始进行训练了,经过测试,core i5处理器每训练一个epoch用时不到1秒,在几分钟之内就可以完成训练(如图7),当回调函数callbacks监控的准确率不再改进时停止训练,在训练了455个epoch后,识别准确率达到了0.9913。

图7 模型训练代码

4.模型部署应用。定义好小车arduino板上的端口10、11脚控制左轮,12、13控制右轮,对应连到驱动板L298N的4个输入脚IN1-IN4,当神经网络检测到摄像头采集的视频图像是“up”手势时小车前进,是“down”手势时小车后退,以此类推,如图8所示。

图8 手势控制小车

综上所述,对于中学人工智能课的开设,笔者认为需要有数据采集、模型搭建、训练模型等基本过程,不能只停留在对结果的体验上,这样才能有利于学生计算思维的培养,帮助学生更深刻地认知数字化信息的本源,在此基础上结合前期的创客活动,把“造物”的学习提升到造“智能”物的更高阶段。

猜你喜欢
手部关键点手势
论建筑工程管理关键点
水利水电工程施工质量控制的关键点
高通联手Ultraleap 为XR2提供手部交互解决方案
挑战!神秘手势
厨房料理小妙招——山药去皮手不痒的窍门
利用定义法破解关键点
胜利的手势
机械能守恒定律应用的关键点
认手势说数字