# HandPose X 手势 21 个关键点检测 ## 项目介绍 注意:该项目不包括手部检测部分,手部检测项目地址:https://codechina.csdn.net/EricLee/yolo_v3 该项目是对手的21个关键点进行检测,示例如下 : * 图片示例: ![image](https://codechina.csdn.net/weixin_42140236/handpose_x/-/raw/master/samples/test.png) * 视频示例: ![video](https://codechina.csdn.net/weixin_42140236/handpose_x/-/raw/master/samples/sample.gif) ## Demo小样 * 示例1 - 按键操作 因为考虑到目前没有三维姿态不好识别按键按下三维动作,所以目前采用二维方式。 该示例的原理:通过简单的IOU跟踪,对二维目标如手的边界框或是特定手指的较长时间位置稳定性判断确定触发按键动作的时刻,用特定指尖的二维坐标确定触发位置。 (注意:目前示例并未添加到工程,后期整理后会进行发布,只是一个样例,同时希望同学们自己尝试写自己基于该项目的小应用。) ![keyboard](https://codechina.csdn.net/weixin_42140236/handpose_x/-/raw/master/samples/keyboard.gif) * 示例2 - 手势交互:指定区域物体识别 该示例的出发点是希望通过手势指定用户想要识别的物体。那么就要选中物体的准确边界框才能达到理想识别效果。如果待识别目标边界框太大会引入背景干扰,太小又会时目标特征不完全。所以希望通过手势指定较准确的目标边界框。因为边界框涉及左上、右下两个二维坐标,所以通过两只手的特定指尖来确定。且触发逻辑与示例1相同。 该示例的原理:通过简单的IOU跟踪,对二维目标如手的边界框或是特定手指的较长时间位置稳定性判断确定触发按键动作的时刻,用特定指尖的二维坐标确定触发位置。 (注意:目前示例并未添加到工程,后期整理后会进行发布,只是一个样例,同时希望同学们自己尝试写自己基于该项目的小应用。) 该示例依赖于另外一个物体识别分类项目。 ![keyboard](https://codechina.csdn.net/weixin_42140236/handpose_x/-/raw/master/samples/recognize_obj0.gif) ![recoobj_book](https://codechina.csdn.net/weixin_42140236/handpose_x/-/raw/master/samples/recobj_book.gif) 该物体识别分类项目的地址为: https://codechina.csdn.net/EricLee/classification ## 项目配置 * 作者开发环境: * Python 3.7 * PyTorch >= 1.5.1 ## 数据集 该数据集包括网络图片及数据集<>筛选动作重复度低的部分图片,进行制作(如有侵权请联系删除),共49062个样本。 <>数据集,其官网地址 http://www.rovit.ua.es/dataset/mhpdataset/ 感谢《Large-scale Multiview 3D Hand Pose Dataset》数据集贡献者:Francisco Gomez-Donoso, Sergio Orts-Escolano, and Miguel Cazorla. "Large-scale Multiview 3D Hand Pose Dataset". ArXiv e-prints 1707.03742, July 2017. * 标注文件示例: ![label](https://codechina.csdn.net/weixin_42140236/handpose_x/-/raw/master/samples/label.png) * [数据集下载地址(百度网盘 Password: ara8 )](https://pan.baidu.com/s/1KY7lAFXBTfrFHlApxTY8NA) * 如果使用该数据集并发布相关项目或网络资源文章等,请讲述其数据集的出处 "https://codechina.csdn.net/EricLee/handpose_x" * 数据集读取脚本为:read_datasets.py,并需要相应更改脚本中的数据集路径。 ## 预训练模型 * [预训练模型下载地址(百度网盘 Password: 99f3 )](https://pan.baidu.com/s/1Ur6Ikp31XGEuA3hQjYzwIw) ## 项目使用方法 ### 模型训练 * 根目录下运行命令: python train.py (注意脚本内相关参数配置 ) ### 模型推理 * 根目录下运行命令: python inference.py (注意脚本内相关参数配置 ) * ------------------------------------------------------------------------- *建议 ``` 检测手bbox后,进行以下的预处理,crop手图片送入手关键点模型进行推理,可以参考 hand_data_iter/datasets.py,数据增强的样本预处理代码部分,关键代码如下: # img 为原图 ,np为numpy x_min,y_min,x_max,y_max,score = bbox w_ = max(abs(x_max-x_min),abs(y_max-y_min)) w_ = w_*1.1 x_mid = (x_max+x_min)/2 y_mid = (y_max+y_min)/2 x1,y1,x2,y2 = int(x_mid-w_/2),int(y_mid-w_/2),int(x_mid+w_/2),int(y_mid+w_/2) x1 = np.clip(x1,0,img.shape[1]-1) x2 = np.clip(x2,0,img.shape[1]-1) y1 = np.clip(y1,0,img.shape[0]-1) y2 = np.clip(y2,0,img.shape[0]-1) ```