热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深度学习_深度学习手势识别带你玩转神庙逃亡

本文由编程笔记#小编为大家整理,主要介绍了深度学习手势识别带你玩转神庙逃亡相关的知识,希望对你有一定的参考价值。
本文由编程笔记#小编为大家整理,主要介绍了深度学习手势识别带你玩转神庙逃亡相关的知识,希望对你有一定的参考价值。




随着经济社会的进步,人们对美好生活的追求也不断地刺激着电子娱乐行业的发展。但这些应用场景的人机交互方式却一直被束缚在通过键盘、鼠标、触摸屏的物理接触方式上。这些传统的交互方式将玩家的操作范围局限在简单的二维平面空间,也限制了游戏开发者创意的发挥。因此,我们引入了一种新的人机交互模式——手势识别交互。


 


手势交互方式符合人类思维逻辑,具有自然性和直观性等特点。使用者不需要有过高的门槛,便可以很好地体验到人机交互的乐趣。手势识别技术具有良好的应用前景——包括电子娱乐、智能家居、VR及自动驾驶等热点领域。这个项目设计的目的就是实现简单直观的人机交互方式,并促使该技术和产品在未来大规模民用成为可能。






我们的项目基于飞桨及其高性能端侧推理引擎Paddle Lite开发,实现了在基于android系统的手机、平板电脑、嵌入式开发板上利用手势来实时控制贪吃蛇、神庙逃亡、地铁跑酷等交互式游戏,并可在大屏幕端进行投屏展示。




















项目内容




















手势识别交互系统采用分层架构、模块化方式进行设计,可满足系统定制及扩展的灵活要求。主要包括:前端采集模块、算法模块、通信模块。






深度学习手势识别带你玩转神庙逃亡








01




采集模块








采集模块实现了Android设备上图像采集与设备运行状态的监控功能。通过高频调用关联相机来获取手势图片,将采集到的图片放入缓冲池中以供算法分析模块使用。此外,采集模块还负责对所连设备进行状态监测,如相机离线将及时产生预警,并支持自动重连等功能,保证系统的稳定性。






1. 拍照方法的实现






Android Camera是安卓系统提供的实现自定义相机功能的官方支持库,采集模块封装了一系列相关调用方法,实现了连续抓拍存储及浮窗实时预览的效果。






此外,对于没有自带摄像头的安卓设备(如嵌入式开发板),我们使用外接USB摄像头,并完成 USB摄像头的驱动模块的编写,实现了设备对外接摄像头的调用及相关配置功能。






2. 浮窗实时预览






为了便于调试,通过Service组件定制浮窗的方式来在实时显示当前摄像机的预览画面、手势识别结果、处理响应延时等信息,并设立了开关来一键控制程序,如图所示.






深度学习手势识别带你玩转神庙逃亡


浮窗实时预览效果(镜像显示)








02




算法模块








算法模块负责对输入的手势图片进行分类,并将识别结果返还。此部分的开发流程如下所示。






深度学习手势识别带你玩转神庙逃亡






1. 数据集的选取与采集






在数据集的选取上,从NUS Hand Posture Dataset II[1]中选择了5类作为手机、平板电脑等小型设备的手势。该数据集每一类手势由40名志愿者分别在不同的环境下拍摄,并重复5次;同时每类还含有75张有人类身体噪音的图片。共(200+75)×5=1375张图片。






在研究过程中,我们发现NUS数据集的手势不符合所应用游戏的正常操作习惯(即上下左右)。因此,我们重新设计并自己采集了数据集,用于电视端远距离的演示。该数据集同样有5种类别,每类由3名志愿者在6种场景下重复6次,共540张图片。但自己在实验室采集的数据集环境比较单一,只适用于特定环境的展示。






从NUS Hand Posture Dataset II选取的5中手势, 环境复杂、部分手势不符合游戏操作习惯:






深度学习手势识别带你玩转神庙逃亡


从左至右分别对应控制命令:无控制、上、下、左、右






重新设计并自己采集的数据集示例,环境单一、手势符合游戏操作习惯:






深度学习手势识别带你玩转神庙逃亡


从左至右分别对应控制命令:无控制、上、下、左、右






2. 数据集增广、划分与预处理






由于深度神经网络的训练需要足够的数据支持,规模过小的数据集会使得模型的泛化能力差,容易导致过拟合。因此,我们按以下步骤对NUS数据集进行了增广,并划分为训练集、测试集:








  • 从原始1000张无噪音图片、375张有噪音图片中都分别选择125张,共250张作为测试集,以保证数据集在有无噪音、类别等维度的分布相同;



  • 将剩余的875张无噪音图片、250张有噪音图片都分别扩充为3500张,共7000张图片形成训练集。增广方式有:0.8~0.9倍的随机裁剪、以图片中心为旋转中心的±10°的随机旋转。







此外,还通过padding的方式将图片调整为方形,以保持原始手势及背景的长宽比。最后,在将图片传入神经网络之前,对图片进行z-score归一化,以加快神经网络的收敛速度。






数据集增广及预处理效果如下图所示:


 


深度学习手势识别带你玩转神庙逃亡


数据集增广、预处理示意图(左:padding后的原图为方形,中:随机裁剪,右:随机旋转)






3. 设计、搭建与训练神经网络






在卷积神经网络的选取与设计上,由于要将模型应用于计算资源非常受限的Android平台上,因此考虑选用轻量级神经网络MobileNet[2]。






MobileNet是目前常用的可以在移动设备端部署的轻量级神经网络。它将标准卷积用Depthwise Convolution和Pointwise Convolution代替,减少了模型参数与计算量。我们利用百度开源深度学习框架飞桨搭建MobileNet并进行训练。


 


较低延时是手势实时控制游戏的关键。为了降低算法延时,即尽可能减少模型参数量与计算量,但同时保证算法准确率,我们在MobileNet模型(


https://github.com/PaddlePaddle/models/blob/develop/PaddleCV/image_classification/models/mobilenet_v1.py
)的基础上,通过调整网络结构(层数、各层通道数),设计多组实验进行对比,结果如表1所示。其中模型输入图片尺寸为120×120×3。最终选择了算法延时小,同时识别准确率较高的模型(序号3),其结构如表2所示。






深度学习手势识别带你玩转神庙逃亡






深度学习手势识别带你玩转神庙逃亡






4. 模型保存






在训练过程中,将模型进行保存,用于之后的推理预测。具体地,在训练时每个epoch都将神经网络的参数进行保存,并评估测试集准确率。训练完成后,选择测试集准确率最高的模型作为预测模型。






5. Android端推理






最后,基于Paddle Lite在Android端加载模型并进行推理预测。






深度学习手势识别带你玩转神庙逃亡






首先我们要编译Android端能够调用的CPP库。本项目中编译的是Paddle Lite。编译时,参考Paddle Lite在GitHub平台上Android部分开发文档



https://github.com/PaddlePaddle/Paddle-Lite/blob/develop/mobile/doc/development_android.md
),基于Ubuntu系统,利用Android NDK及CMake交叉编译出符合我们Android硬件环境的库libpaddle-mobile.so文件。


 


之后,将采集模块中摄像头捕捉的图片按照训练模型前完全一致的方法进行预处理,并加载保存好的预测模型,通过调用刚才编译的libpaddle-mobile.so库提供的API,就能实现Android端的推理。


 


下面是没有运行游戏的演示效果。将识别结果和包括摄像头拍照、算法推理、控制的总延时显示在浮窗上,方便调试。















03




通信模块








通信模块根据算法不同的推理预测结果,向操作系统发送相对应的控制命令,就实现了应用程序的控制。








跨进程操作通常采用进程间通讯,可建立专用通讯管道实现,我们采用向Android系统直写shell命令模拟动作事件的方式来实现系统控制功能,这种方式快捷高效,但需先取得root权限。






实验中用到的设备参数如表3所示。




















作品展示






















01




手机端贪吃蛇游戏


















02




平板电脑端神庙逃亡游戏

















03




嵌入式板+电视投屏端神庙逃亡游戏



















总结




















我们的手势识别交互系统是面向人机交互的嵌入式应用程序,用户仅需使用带有摄像头的安卓设备便可以利用手势实现对界面(游戏)的控制。利用嵌入式主板丰富的接口带来的多平台投影功能,还可以得到更好的展示与体验效果。


 


本项目中手势指令发出、识别不依赖任何可穿戴的设备,可以使用户获得沉浸式体验,并可带动相关游戏开发、设备制造等产业的发展。相信手势识别等AI技术在未来会更加完善,改善人类生活。














参考文献




















[1] Pisharady P K, Vadakkepat P, Loh A P. Attention Based Detection and Recognition of Hand Postures Against Complex Backgrounds[J]. International Journal of Computer Vision, 2013, 101(3): 403-419.






[2] Howard A G, Zhu M, Chen B, et al. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications[J]. arXiv: Computer Vision and Pattern Recognition, 2017.







推荐阅读






















推荐阅读
  • 百度AI的2020
    百度AI的2020-世界的2020,是充满不确定性的变局之年;中国的2020,是团结一心、共克时艰、于变局中开新局的希望之年;百度AI的2020,是坚定信念,拥抱变化,践行“科技为 ... [详细]
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • 全面解析Java虚拟机:内存模型深度剖析 ... [详细]
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • 深入解析 C 语言与 C++ 之间的差异及关联
    深入解析 C 语言与 C++ 之间的差异及关联 ... [详细]
  • 华为200万年薪招聘AI应届生——有多少本事,给多少钱
    据新浪科技报道,阿里AIlabs年薪百万美元引进两位科学家。除AI顶尖科学家外,华为也是为多位AI应届博士开出了200万的高价年薪。19年9月,各大互联招聘企业陆续发布2019年人 ... [详细]
  • 以赛促学,飞桨助力大学生智能车竞赛升级!
    点击左上方蓝字关注我们第十六届智能汽车竞赛-百度人工智能创意赛道已经开启!比赛虽好,但同学们苦核心开发硬件久矣!百度飞桨作为大赛的赞助商之 ... [详细]
  • 学习提醒 | 如何训练RNN?解决梯度消失与梯度爆炸问题!
    点击左上方蓝字关注我们今天就要进入RNN的终章,每日一问:它们如何运行?应用在哪里?你学完了吗?????顾名思 ... [详细]
  • 从零起步:使用IntelliJ IDEA搭建Spring Boot应用的详细指南
    从零起步:使用IntelliJ IDEA搭建Spring Boot应用的详细指南 ... [详细]
  • Java队列机制深度解析与应用指南
    Java队列机制在并发编程中扮演着重要角色。本文深入解析了Java队列的各种实现类及其应用场景,包括`LinkedList`、`ArrayBlockingQueue`和`PriorityQueue`等,并探讨了它们在高并发环境下的性能表现和适用场景。通过详细分析这些队列的内部机制和使用技巧,帮助开发者更好地理解和应用Java队列,提升系统的设计和架构能力。 ... [详细]
  • 抠图前vsPython自动抠图后在日常的工作和生活中,我们经常会遇到需要抠图的场景,即便是只有一张图片需要抠,也会抠得我们不耐烦ÿ ... [详细]
  • 世界人工智能大赛OCR赛题方案!
     Datawhale干货 作者:阿水,北京航空航天大学,Datawhale成员本文以世界人工智能创新大赛(AIWIN)手写体OCR识别竞赛为实践背景,给出了OCR实践的常见思路和流 ... [详细]
  • 词表|句子_自然语言处理(NLP)基于序列到序列的中英机器翻译
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了自然语言处理(NLP)基于序列到序列的中-英机器翻译相关的知识,希望对你有一定的参考价值。【自然语言处理&#x ... [详细]
author-avatar
风华绝代LL58
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有