阅读 104

毕业设计之—基于CNN的手势识别技术研究与游戏应用实现

1.摘要

     手势操作作为一种全新的操作方式,在智能设备中得到了广泛应用。传统的手势识别方法需要复杂的预处理过程,识 别速度与准确度比较差。文章提出一种基于CNN的手势识别技术,取得了较好的识别效果,识别速度也有明显的提升。最后我们将本文设计实现的手势识别技术应用到玩Chrome 浏览器 Dino Jump 游戏上,将“Punch(冲拳手势)”手势与 Dino 角色的跳跃动作绑定在一起进行玩向前跳跃游戏。

2. CNN概述

     随着人工智能技术的快速发展,人机交互得到了极大的 丰富,从打字、触屏到语音,交互方式的发展给人们的操作 带来了便利和极佳的使用体验。近年来,手势操作得到了人 们广泛的重视,通过对用户不同手势的识别,系统能够理解 用户的意图并完成相应的操作。本文主要利用卷积神经网络 (Convolutional Neural Network,CNN)较强的容错性与鲁 棒性,提出了一种新的手势识别技术,实现了较好的手势识 别性能。 神经网络是一种利用仿生学原理,模仿大脑神经突触的 信息处理过程而建立的网络模型。CNN是一种局部激活的 前馈型神经网络,具有局部感受野、权值共享与降采样三大 基本特征。典型的CNN主要由输入层、输出层、卷积层、池 化层以及全连接层组成,其典型网络结果如图所示。

        通过图可以看出,当待处理图像传入输入层后,需要经 过若干个卷积层与池化层的处理,通过若干个全连接层得 到最终的输出结果。在卷积层通过滤波掩膜对图像进行卷 积操作,能够实现图像局部特征的提取,CNN局部感受野 的特征得到了体现。同时在同一卷积层中掩膜的参数保持一 致,体现了CNN权值共享的特征。经过卷积层的处理,图像 提取的特征进入池化层进行降采样以减少后续数据的处理 量,最大值池化是最常用的池化方式。通过上述处理,将提 取的图像特征拉伸为特征向量,再经过若干全连接层后,即 可实现图像特征的较好分类识别。 CNN主要包括各卷积层的掩膜参数、层与层间的传递 权值等。这些参数需要利用大量的训练数据进行优化调节, 一般采用误差反向传递传播的方法,将误差反向进行传递, 并根据误差逐层调节模型参数,最终达到较好的分类识别 性能。 CNN的复杂网络结果、大规模的可设置参数赋予其较 强的容错能力与鲁棒性。一方面对图像特征的提取具备平 移、旋转及尺度不变性,使得训练好的CNN模型能够较好 地适应不同场景的识别问题。另一方面CNN模型在训练中的 调参过程耗时较长,一旦训练完成,其识别过程十分迅速, 极大增强了CNN的实用价值。

3.模型设计

代码实现:

model = Sequential()
model.add(Conv2D(nb_filters, (nb_conv, nb_conv), padding='valid', input_shape=(img_channels, img_rows, img_cols)))
convout1 = Activation('relu')
model.add(convout1)
model.add(Conv2D(nb_filters, (nb_conv, nb_conv)))
convout2 = Activation('relu')
model.add(convout2)
model.add(MaxPooling2D(pool_size=(nb_pool, nb_pool)))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(nb_classes))
model.add(Activation('softmax'))复制代码

模型结构:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 32, 198, 198)      320       
_________________________________________________________________
activation_1 (Activation)    (None, 32, 198, 198)      0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 32, 196, 196)      9248      
_________________________________________________________________
activation_2 (Activation)    (None, 32, 196, 196)      0         
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 32, 98, 98)        0         
_________________________________________________________________
dropout_1 (Dropout)          (None, 32, 98, 98)        0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 307328)            0         
_________________________________________________________________
dense_1 (Dense)              (None, 128)               39338112  
_________________________________________________________________
activation_3 (Activation)    (None, 128)               0         
_________________________________________________________________
dropout_2 (Dropout)          (None, 128)               0         
_________________________________________________________________
dense_2 (Dense)              (None, 5)                 645       
_________________________________________________________________
activation_4 (Activation)    (None, 5)                 0         
=================================================================复制代码

4.实验结果分析

4.1 数据来源

本文采用:

  • OK

  • PEACE

  • STOP

  • PUNCH

  • NOTHING (即当没有输入上述手势时)

其数据展示如下:

 4.2 模型训练

    手势图像的预处理: 在实际应用中,手势图像通常只占全部图像的一小部分, 为了排除无关图像对手势识别可能造成的影响,需要对图像 进行简单的预处理,主要包括手势区域的检测、分割与二值 化操作。首先在较大尺度下,通过对人体躯干等结构的识别 并在彩色图像中检测手势所在区域;其次利用图像分割,将 手势区域分割出来;然后将得到的手势区域利用自适应阈值 对图像进行二值化操作,并将背景区域置0,手势区域置1; 最后再将手势区域平移至图像中心,并将图像规范为统一大 小,作为神经网络的输入。

      选择5类手势作为训练对象,每类收拾选择 1 000张手势图片,其中每次迭代训练随机选择900张  作为训 练样本,另外100张作为测试样本,共计迭代15次,得到最终 的CNN模型。

4.3 结果分析与展示

         CNN模型训练完成后,利用数据集中已选取的测试样 本对模型的识别性能进行测试,得到5种手势的识别结果, 结果如图所示。








OKPEACESTOPPUNCHNOTHING
识别率100% 100% 92.18% 93.67% 100%

总体来看,本文提出的基于CNN 的手势识别方法取得了较好的识别效果。

5.应用实现

  在 电脑上没有安装任何游戏下,我们将尝试 Chrome 浏览器 Dino Jump 游戏。因此,本文将“Punch”手势与 Dino 角色的跳跃动作绑定在一起,实现控制玩这个游戏。实现结果如下:玩Dino Jump 游戏

 6.总结

       针对传统手势识别方法所存在的弊端,本文设计了针对 手势识别方法的CNN结构,并利用手势数据集实现了网络 模型的训练与参数的调节,通过实验的结果可以证明该方法的识别准确率较高,最后在 玩Chrome 浏览器 Dino Jump 的游戏上显示该研究在实际生活中具有较强的应用价值。



作者:毕业设计
链接:https://juejin.cn/post/7024157381411995685


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐