刘雨聪,徐硕晨,宋帅超,张东生
(河南大学 软件学院,河南 开封 475004)
中国传统武术有着悠久的历史,具有极其广泛的群众基础,是中国优秀文化遗产的重要组成部分。传统武术中的太极拳、少林拳、咏春拳等不仅可以用来防身,更对人体健康有益。研究表明,太极拳可提高活力,改善人体身心健康[1]。因此,以太极拳为代表的武术项目受到广泛关注、大力推广。
目前,国内外对于武术的教学大多停留在面授或是练习者仅跟随视频学习的传统方式。一方面,传统武术的传承人较为稀缺,群众很难接触到正宗的面授教学;另一方面,仅跟随视频学习技巧性动作存在直观性差、效率低下等问题,练习者极易做错动作,造成肌肉损伤[2]。
随着人工智能技术的发展,利用深度学习等技术对于人体姿态识别与比对的研究也较为深入。针对上文提到的问题,本文提出使用OpenPose算法对武术练习者的动作进行提取分析,利用OpenPose算法处理后得到的人体骨架数据与标准动作进行比对,帮助判断练习者动作是否规范。以尝试解决这一问题,并探索武术教学的新方式。本文对该方法作了初步研究。
由美国卡耐基大学提出的基于深度学习的开源库OpenPose[3]可实现对人体动作、手指运动、面部表情等的识别捕捉,对图像中人体姿态进行较为精准的估计,提取多个身体、手部或面部骨骼关键点。它适用于单人和多人情况,具有极好的鲁棒性。
OpenPose算法首先定位人体的特征位置,再将人体组合,其识别思路是自下向上的[4]。在人体被部分遮挡或背景复杂度较高的情况下,仍可较好的解决问题;在场景中存在多人的情况下,可有效减少运算时间。本文利用该算法这一特性,提取出练习者与标准运动视频中的关键帧或是图片,作为后续比对的素材使用。
OpenPose算法的大致思路如下:将输入的图像经10层VGG19网络处理,提取出图片特征F,再将特征F放入两个卷积网络进行计算,即关键点置信度网络S和关键点亲和度向量场网络L,然后预测得到每个关键点的置信度、亲和度向量。之后通过二分匹配进行关键点聚类,将同一人的骨架节点拼接,最终得到每一个人的骨架信息。传统的姿态估计算法需要依靠深度摄像头计算,而OpenPose仅使用单目摄像头便可达到极佳的实时性。
人体的不同特征部位可以抽象为18个特征点,由这些特征点组成的人体骨架即可反映此刻人体的姿态。而特定关节间的角度值可以为判断一个人动作的准确性提供参考,无需受不同人体型、肤色、着装等特征影响。本文将利用这一特征进行动作比对。
经过OpenPose处理图片后,可以得到人体18个特征点的坐标,如图1所示。个别情况下,平面图片中人体的部分不能完整呈现,这会导致该特征点对应坐标为“None”,图1就是这种情况。但本实验主要关注人体躯干骨架,眼部特征点未识别对于动作的比对影响不大,故面部数据可以忽略不计。
图1 人体18个特征点的坐标
得出的人体骨架图片如图2所示。两点之间的长度可以通过计算欧氏距离得出,再使用余弦定理计算得出反映人体动作的特定关节间夹角的角度值。本文使用这一方法分别对标准动作图片进行处理,得出该图片人体骨架的关节角度值,作为比对范本。之后输入需要进行评判的训练者动作图片,同样得出关节角度值。将两者角度值进行分析即可得出训练者动作是否标准,达到动作比对的效果。
图2 OpenPose还原出的人体骨架
本实验的硬件环境如下:CPU为Intel(R)Core i7-8750H,2.20 GHz,内存为8GB;GPU为NVIDIA GeForce GTX 1060,操作系统为Windows 10专业版。软件平台为Eclipse IDE。
本实验首先对标准动作的视频数据切割处理,对视频剪辑得到一个完整的动作或招式片段,然后将招式中部分动作截取生成关键帧图片,作为对照数据。再将练习者的动作视频做同样处理,截取其相同动作的关键帧,用来与对照数据比对。
本文使用Python 3.0开发了一个脚本程序,该程序命名为Judge.py,主要实现输入一张关键帧图片,调用OpenPose计算出图片中人体18个关键点坐标、还原骨架、计算关节间角度值的功能。实验输入的数据为的图片文件,格式为JPG,如图3所示。
图3 输入的练习者动作图片
运行Judge.py后,该程序会自动将预先截取好的练习者动作关键帧进行处理,得出此画面中包含多个关节角度的人体骨架数据,如图4所示。同时,画面中的人体会被标注出含有关键点的骨架结构,如图5所示。之后,将输出的数据与事先已用同样方法处理过的标准动作数据进行比对,即可大致判断出训练者的动作是否规范。
图4 人体关节间角度值
图5 练习者骨架结构
实验采集了3位练习者的动作视频,截取几个动作的关键帧,使用OpenPose算法分别处理,得出最终用来判别动作规范度的关节角度数据,与预先处理好的标准动作关节角度数据对比,以此判断OpenPose算法应用在武术动作中人体动作的识别与比对的可靠性。在实验过程中,即使背景复杂、拍照角度特殊、练习者着装色彩与背景相似等情况下,系统均可根据人体动作关键帧还原出骨架,说明该算法的可用性。而得出的关节角度数据也符合客观规律,与人眼判断练习者动作外形的规范程度吻合,说明本实验的方法应用于武术动作外形识别是可行的。
但是,在个别情况下OpenPose对人体骨架的还原存在问题。例如,当训练者的手垂直举过头顶时,该算法会存在手臂部分骨架还原失败的情况。这是由于OpenPose在姿态估计时,依靠两个已知的骨骼点生成一个PAF连接,如果两个骨骼点有一个不存在或识别失败,则不生成PAF标签[5]。因此推测,当训练者的手举过头顶时,只识别出了腕关节点,而肘关节识别失败,故不生成PAF连接,但此连接实际存在,是应该生成的。
本实验也存在以下不足:本实验所使用的样本过于单一,仅对指定的几个人体动作进行了识别比对,未来应扩大样本范围,覆盖更多的武术品种与招式、动作,以探究该方法应用在传统武术动作识别与比对领域的普适性。另外本实验使用的OpenPose算法中也存在一些问题,如COCO数据集中存在一些不适当标签,即对于超出图片范围的肘部缺少标注等,当使用包含此类缺少标签的数据进行模型训练时,会对模型的性能造成一定的负面影响[6]。之后的研究可以通过使用OpenPose的相关改进算法进行动作识别,尝试提高人体骨架还原与动作识别的精度[7-8]。
本文以传统武术动作识别与比对为目标,使用OpenPose算法处理训练者及标准动作关键帧,还原人体骨架,得出人体关节角度值,进行两者的比对,验证了OpenPose及比对算法在武术动作教学中的可行性,对于推动武术教学、传承、推广等具有较好的现实意义和实用价值。该技术成熟后,也可应用于如飞行器驾驶、车辆操控等对于动作规范度要求较高的领域,发挥更大的应用价值。但在实际操作中,训练者做出部分动作时,该算法会识别出不完整的人体骨架;另外,如何处理两者关节角度数据、如何制定评判标准也是值得研究的。针对这一问题,将继续开展对姿态估计的算法与应用的研究。