Openpose⼈体⾻骼、⼿势--静态图像标记及分类(附源码)⽂章⽬录
⼀、背景
我的环境是:Windows10 + python3.7 + anaconda3 + jupyter5.6.0
安装 开源库时,有点费⼒,在前⾯⼀篇⽂章中讲述过,这⾥不再重复;前⽂有模型下载链接。
本次涉及的模型有:hand和pose-coco模型
⼿部:22个关键点(21个⾻骼点,第22个表⽰背景),⾻骼:coco模型18个特征点
前⽂讲述了安装和基本使⽤⽅法,本⽂来将⾻骼和⼿势融合在⼀张图⽚中同时检测并标记。⼆、标记
1.标记⾻骼特征
1)剔除不必要点
上⼀次是基于危险驾驶的探讨:
本次我需要⼿语图像识别,那么这⾥需要标记的上半⾝参考点的关键信息更多了。
图中是我训练时的截图,可以发现⼿语所表达的肢体动作均在上半⾝,所以我们参考点可忽略(点9,10,12,13) 。
(图⽚参考于:中国⼿语数据集以及视频)
2)特征
图像识别,需要以上流程,⽬前我们在(特征提取和选择阶段),提取哪些特征是有价值的特征呢?
⽰例:
1. 危险驾驶判断标准:
1. 抽烟:可以⽤双⼿到⿐的距离来进⾏判断,即点4,7到点0的距离。
2. 接电话:可以计算右⼿到右⽿的距离(左⼿倒左⽿的距离)来进⾏判断,即点4到点16的距离(点7到点17的距离)。
2.
太极姿势分为23式,原作者根据需求提取⼿臂姿势、腿部姿势:
笔记:⼗五组⼈体姿态⾻骼关键点之间的距离作为特征,同时选择
了⼗五组夹⾓作为⾓度特征整合到⼀个数组中去。
为什么需要⾓度作为辅助判断参数呢?
图片下载站源码
仅选择距离判断因素,当⼈离摄像头更远⼀些,⼈就会缩⼩,距离会变短;⼈靠近摄像头,距离会变⼤,距离因素远远不够。
通过引⼊⾓度信息,我们都知道:⼀条直线不能确定其⽅向和⼤⼩,若是⼀个向量(有⽅向有⼤⼩的定点线段),那么这就可以在图像表⽰唯⼀。所以,这⾥是通过⾓度来约束距离。
引⼊⾓度有哪些弊端呢?
出⾃太极⼿势识别:
出⾃太极⼿势识别:
组合特征:距离和⾓度,能够提⾼复杂关系的拟合能⼒,同时由于有些⾓度在某些情况下的值为零值,⽐如 2-3-4(整个⼿臂:⼿,胳膊肘,肩膀之间的夹⾓的余弦值)夹⾓为直⾓的时候余弦值是零值,当 OpenPose 丢失⼀个点⽐如说 4 号位置⼿的信息没有检测出来的时候,返回零值,它的余弦值就和肩膀之间的夹⾓的余弦值)夹⾓为直⾓的时候余弦值相同了,因此仅仅依据距离信息有时候也会对数据训练产⽣⼀定的误导作⽤,所以就按照距离约束⾓度,⾓度约束距离的设计思路设计了独特的太极姿态识别的训练数据。
通过上述的分析,我们暂且提炼出25组关键特征,如图:
现在特征点也规划好了,上代码——在其中连线,圈圈画画,计算长度⾓度。
三、实现
1.获取关键点坐标
主要还是参考前⼀⽂:
前⽂是单独提取⾻骼特征点和⼿势特征点,这⾥对其进⾏⼀个融合,思路是:
1. 传⼊原图像,获取⾻骼的coco模型18特征点
2. ⼿势特征点:通过⾻骼特征点point[4]和point[7]标注出两只⼿⾸的位置,以⼿⾸为中⼼,取⼩臂长范围对图⽚进⾏分割;再别对两个
图⽚进⾏识别。