IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 毕业设计之—基于CNN的手势识别技术研究与游戏应用实现 -> 正文阅读

[人工智能]毕业设计之—基于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 的游戏上显示该研究在实际生活中具有较强的应用价值。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章           查看所有文章
加:2021-11-06 15:11:52  更:2021-11-06 15:12:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 6:34:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码