第一次写博客,想和大家分享一下最近学习的人体姿态估计及其应用。
一、人体姿态估计的介绍
人体姿态估计根据估计的关节坐标维度分为2D姿态估计和3D姿态估计。
2D人体姿态估计的目标是定位并识别出人体的关键点,这些关键点按照关节顺序相连,就可以得到人体的骨架,人体2D骨架表现形式如下所示:
3D姿态估计的目标是从图像或视频中估计人体基于某点的人体三维关节坐标(x, y, z),一般以人体的臀部(Hip)关节为基点,本质上是一个回归问题。
人体姿态估计总的来说有两种方式:
1.自顶向下,先检测人这个整体,再检测出人体关键点。
特点:刚加符合人的思维,先整体后后部分,准确率相对较高。
缺点:推理速度慢。
代表算法:MASK-RCNN,CPN,AlphaPose
2.自底向上,先检测出所有的关键点,再group成一个人的关键点。
特点:推理速度较快,准确率不如前者。
代表算法:open pose,DeepCut
二、人体姿态估计应用
1.动作识别
追踪一段时间内一个人姿态的变化也可以应用在动作、手势和步态识别上。在这方面有好几个应用场景,包括:
用于检测一个人是否摔倒或疾病
用于健身、体育和舞蹈等的自动教学
用于理解全身的肢体语言(如机场跑道信号、交警信号等)
用于增强安保和监控
2.运动捕捉和增强现实
人体姿态估计的一个有趣应用是 CGI(computer graphic image,一种电影制造技术)应用。如果可以检测出人体姿态,那么图形、风格、特效增强、设备和艺术造型等就可以被加载在人体上。通过追踪人体姿态的变化,渲染的图形可以在人动的时候“自然”地与人“融合”。
3.训练机器人
除了手动为机器人编程、让它们跟随特定的路径,我们也可以让机器人跟随一个做特定动作的人体骨架。人类教练可以仅通过演示特定的动作,来教机器人学习这一动作。接着,机器人就可以计算如何移动自己的活动关节,来进行相同的动作。
4.控制台中的运动追踪
姿态估计的一个有趣应用是在交互游戏中追踪人体对象的运动。比较流行的 Kinect 使用 3D 姿态估计(采用 IR 传感器数据)来追踪人类玩家的运动,从而利用它来渲染虚拟人物的动作。
在了解了人体姿态估计技术后,我们下载源码后,开始尝试运行,在经过多次报错,不断尝试修改,终于使代码成功运行。
源码地址:https://github.com/Daniil-Osokin/lightweight-human-pose-estimation.pytorch
下载源码后,阅读README.MD文件。里面有一个文件checkpoint_iter_370000.pth 要下载下来。这是训练好的模型文件。
然后运行demo.py
例如,可能会提示No module named pycocotools,
pip install pycocotools 即可解决
依赖库安装成功后,会提示
The following arguments are required: --checkpoint-path
菜单Run,edit configurations
在parameters 一栏填--checkpoint-path=checkpoint_iter_370000.pth
提示要缺少 –video 或 –image
则在命令行参数里添加 –video=0,表示使用你的0号摄像头。
可能还会提示关于cuda的错误,增加一个命令行参数:--cpu,即可。
之后,我们又继续尝了解和编写了愤怒的小鸟demo,利用人体姿态估计的应用来达到类似于愤怒的小鸟游戏的效果,识别人体双手,做出拉弓射箭的姿态,发射小鸟。
还有很多类似的小游戏都可以通过人体姿态估计的应用来达到类似的效果,抖音里的许多小游戏,便是通过对人体姿态估计的应用来完成的。
演示视频