数据增广+手势识别[Paddlehub+PaddleX]
时间:2025-07-28 | 作者: | 阅读:0作者为提升手势识别在复杂背景下的准确率,用Paddlehub的deeplabv3p_xception65_humanseg模型抠出手势,与复杂背景图合成增广数据,将“5”手势与其他手势作二分类。增广后“5”的样本从979张增至2988张,再用PaddleX的MobileNetV3_small_ssld模型训练30个epoch,测试效果良好,摄像头实测表现佳。
使用Paddlehub 和 PaddleX完成数据的增广和训练~? ? ? ?
大家好,我是只会心疼giegie的桨师,最近因为想做一个手势相关的小游戏,所以看了一下手势识别。但是目前搜到的数据集中,手势识别的背景都是纯色(纯白或是纯绿),一旦在验证的时候背景变得复杂,则准确率会大大降低。既然如此......那就来做个数据增广吧,把这些数据集里的手全都抠出来,然后贴到复杂场景里就行了。那把手抠出来......当然优先选择?Paddlehub
模型
当然我并没有使用ace2p这种更细粒度的模型,而是使用了deeplabv3p_xception65_humanseg,不因为别的,只是因为我顺手......这个模型用得很熟练哈哈
用到的数据集
手势数据集:aistudio前排手势的数据基本上都用了,因为还有背景数据,用的比较多,一个项目好像只能索引两个数据集,所以我就不引入了,以防不公平,这里把链接贴出来。?手势识别手势gesture手势手势_石头剪头布背景数据集,我直接使用的我本地的图,只有上次从ADE2K里挑出来的segsky分割出的数据了。segsky
任务
由于我的任务只需要检测到“5”的手势,所以这里是一个简单的2分类,区分“5”及其他增广前的“5”
import paddlehub as hubimport cv2import numpy as npimport globimport osimport randomimport argparseclass segUtils(): def __init__(self): super().__init__() self.module = hub.Module(name=”deeplabv3p_xception65_humanseg“) def doseg(self, frame): res = self.module.segmentation(images=[frame], use_gpu=True) return res[0]['data']def randomCrop(frame, h, w): bh, bw = frame.shape[:2] if bw - w > 0 and bh - h > 0: randx = random.randint(0, bw - w) randy = random.randint(0, bh - h) return frame[randy:randy + h,randx:randx + w] else: return cv2.resize(frame, (w, h))def main(args): backlist = glob.glob(os.path.join(args.backdir, ”*.jpg“)) handlist = glob.glob(os.path.join(args.handdir, ”*.png“)) + glob.glob(os.path.join(args.handdir, ”*.jpg“)) print(”back image: “, len(backlist)) print(”hand image: “, len(handlist)) save_dir = args.savedir if not os.path.exists(save_dir): os.makedirs(save_dir) SU = segUtils() for handpath in handlist: img = cv2.imread(handpath) basename = os.path.basename(handpath) filename, ext = os.path.splitext(basename) mask = SU.doseg(img) mask[mask <= 1] = 0 mask[mask > 1] = 1 mask = np.repeat(mask[:,:,np.newaxis], 3, axis=2) h,w = img.shape[:2] for i in range(2): rback = cv2.imread(backlist[random.randint(0, len(backlist)-1)]) crop = randomCrop(rback, h, w) res = mask * img + (1 - mask) * crop newname = filename + str(i) + ext cv2.imwrite(os.path.join(save_dir,newname), res.astype(np.uint8))if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument(”--backdir“, type=str, required=True) parser.add_argument(”--handdir“, type=str, required=True) parser.add_argument(”--savedir“, type=str, required=True) args = parser.parse_args() main(args)登录后复制 ? ?
训练
至于训练,当然是直接paddleX啦,直接用GUI版本的快速验证自己的想法啦,快速的选择分类模型,开始吧~ 选择的MobileNetV3_small_ssld这个模型,batchsize32,训练了30个epoch,太过简单,就不写流程了。
? ? ? ? ?测试
一些测试结果图,效果完全OK哈哈哈
本地开着摄像头视频做了一些测试,效果还不错,但是忘了保存视频了,之后补上。In [?]# 验证 上传一张test.jpg的图片进行测试吧!python predict.py登录后复制 ? ?
福利游戏
相关文章
更多-
- Gemini AI能离线使用吗 Gemini AI联网与本地使用说明
- 时间:2025-07-28
-
- Claude AI如何查看历史对话 Claude AI聊天记录保存与导出方式
- 时间:2025-07-28
-
- ChatGPT如何安装本地桌面版 ChatGPT桌面程序安装详细图文教程
- 时间:2025-07-28
-
- ChatGPT使用后如何清除记录 ChatGPT聊天与使用记录管理方法
- 时间:2025-07-28
-
- Perplexity AI支持中文提问吗 Perplexity AI多语言支持设置方式
- 时间:2025-07-28
-
- multimodal AI需要哪些权限 multimodal AI设备访问权限说明详解
- 时间:2025-07-28
-
- multimodal AI图片无法识别怎么办 multimodal AI图像处理异常解决技巧
- 时间:2025-07-28
-
- 【PaddlePaddle+OpenVINO】打造一个会发声的电表检测识别器
- 时间:2025-07-28
大家都在玩
大家都在看
更多-
- 李楠:别再问我魅族22了
- 时间:2025-07-28
-
- 全球首款多模态梦境脑机接口发布:枕头形态 可缓解焦虑、改善睡眠
- 时间:2025-07-28
-
- 以太币(ETH)价格:623枚ETH价值几何?
- 时间:2025-07-28
-
- 再次刷新安全成绩!特斯拉Model Y获“最高安全车型”认证
- 时间:2025-07-28
-
- 大卡与运动强度的关系 心率与热量消耗
- 时间:2025-07-28
-
- 这种瓜正上市 一旦发苦千万别吃!有毒
- 时间:2025-07-28
-
- 欧翼交易所注册攻略:简单易上手
- 时间:2025-07-28
-
- 鸣潮弗洛洛阵容搭配
- 时间:2025-07-28