体感游戏 | 手势识别玩飞机大战游戏(三) 使用OpenCV实现手势识别玩飞机大战游戏
后面将分四篇文章来介绍实现手势识别控制飞机大战游戏的功能,它们分别是:
使用Pygame实现简易飞机大战小游戏
使用Python+OpenCV实现简单手势识别
使用OpenCV实现手势识别玩飞机大战游戏
使用TensorFlow实现手势识别玩飞机大战游戏
今天是第三部分:使用OpenCV实现手势识别玩飞机大战游戏的功能。前面的两篇文章我们已经介绍了使用Pygame实现一个简易的飞机大战游戏以及使用Python+OpenCV实现简单手势识别。那么,实现手势识别来玩飞机大战游戏就是把它们两部分组合起来,听起来很简单,让我们一起实现它吧。
第一步:先学会Windows下模拟按键按下的响应。
Python中我们使用pypiwin32这个包,需要先安装pip install pypiwin32,然后导入使用:
import win32con
import win32api
import time
#第一个参数,键盘对应数字,查表
#第二个,第四个没用
#第三个参数,0代表按下,win32con.KEYEVENTF_KEYUP松开
while True:
#win32api.keybd_event(37, 0, 0, 0) # 键盘按下左键 37 <-
#time.sleep(0.5)
#win32api.keybd_event(37, 0, win32con.KEYEVEddddddddNTF_KEYUP, 0) # 键盘松开
win32api.keybd_event(38, 0, 0, 0) #38对应上键
time.sleep(0.3)
win32api.keybd_event(38, 0, win32con.KEYEVENTF_KEYUP, 0) # 键盘松开
#win32api.keybd_event(39, 0, 0, 0) # 键盘按下右键 39 ->
#time.sleep(0.1)
#win32api.keybd_event(39, 0, win32con.KEYEVENTF_KEYUP, 0) # 键盘松开
不同按键对应什么数字,查看一下VKCode即可(如下)
第二步:将虚拟按键响应代码加入手势识别代码中。
这里将上面的代码整理为函数使用(最好是分装成线程类方便调用):
class KeyEvent(threading.Thread):
def __init__(self, caller):
threading.Thread.__init__(self)
self.caller = caller #父类调用者
def action(self,num):
if num == 2:
self.move_left_key()
elif num == 3:
self.move_right_key()
elif num == 4:
self.shooting_key()
def shooting_key(self):
win32api.keybd_event(38, 0, 0, 0) # 键盘按下上键 38上键
time.sleep(0.1)
win32api.keybd_event(38, 0, win32con.KEYEVENTF_KEYUP, 0)
def move_left_key(self):
win32api.keybd_event(37, 0, 0, 0) # 键盘按下左键 37左键
time.sleep(0.1)
win32api.keybd_event(37, 0, win32con.KEYEVENTF_KEYUP, 0)
def move_right_key(self):
win32api.keybd_event(39, 0, 0, 0) # 键盘按下下键 39下键
time.sleep(0.1)
win32api.keybd_event(39, 0, win32con.KEYEVENTF_KEYUP, 0)
def run(self): #线程启动后自动调用此函数
while True:
if self.caller.exitFlag:
break
action()
在手势识别后加入手势数字判断然后开启虚拟按键线程:
def show_camera(self):
flag, self.img = self.cap.read()
if self.img is not None:
num,img = self.Gesture_Recognize(self.img)
self.refreshShow(img)
self.Key=KeyEvent(self)#开启测试线程
self.Key.setDaemon(True)
self.Key.action(num)
第三步:运行测试。
我们设定手势2对应按键左移<-,手势3对应按键右移->,手势4对应发射炮弹。先打开并运行pygame游戏界面,然后运行手势识别程序,将鼠标点击到游戏界面窗口,然后通过手势识别控制飞机行动,效果如下:
视频演示效果:https://www.bilibili.com/video/BV1UK411M73n
代码还有很多待完善的地方,这里只做功能实现演示故没进一步做优化,有兴趣的朋友可以自己试着修改一下,最明显的比如子弹与敌人的距离关系设置不合理。下篇文章我们来介绍使用TensorFlow来替代OpenCV手势识别来控制飞机行动玩游戏,敬请期待。
本文代码在公众号回复“OpenCV飞机大战”即可获取,更多视觉学习资讯请关注:OpenCV与AI深度学习,感谢支持!
体感游戏 | 手势识别玩飞机大战游戏(三) 使用OpenCV实现手势识别玩飞机大战游戏相关推荐
- c语言全民飞机游戏代码,课内资源 - 基于VC++和OpenCV实现的全民飞机大战游戏
摘要功能:利用C++语言完成了一个小游戏项目-全民飞机大战,该游戏首先能够给用户提供注册,登录功能:提供了菜单栏及两种游戏模式,一种是无尽模式,另一种是一般模式:一般模式中用户通过控制玩家飞机攻击敌方 ...
- python猜密码游戏规则_【python笔记 三 】python脚本实战---数字密码小游戏
描述:A输入一个数值,输入时该数值已隐藏无法看到,让B猜该数字为多少,数值过小或过大都会提示,并会在最后猜对时统计出共猜了几次. 脚本内容: #!/usr/bin/env python #FileNa ...
- 用python玩转数据第三周_用Python玩转数据(三)
1 找人程序(4分) 题目内容: 有5名某界大佬xiaoyun.xiaohong.xiaoteng.xiaoyi和xiaoyang,其QQ号分别是88888.5555555.11111.1234123 ...
- 在线试玩,在体感游戏中打败泰森,这位小哥破解了任天堂「拳无虚发」
视学算法报道 编辑:张倩.陈萍 加入体感控制,这位小哥破解了原版任天堂的拳击格斗游戏「拳无虚发」. 在经典红白机上玩拳击游戏是很多人的童年回忆,其中就包括任天堂 1987 年发布的拳击格斗游戏--「P ...
- 【去后厂村开游戏厅吧】基于pp-tinypose的体感贪吃蛇游戏
[去后厂村开游戏厅吧]基于pp-tinypose的体感贪吃蛇游戏 你是否也被腰痛所困扰!你是否也是久坐一族!你是否也是网瘾少年! 来玩体感贪吃蛇吧!只需要电脑上有摄像头就可以玩体感游戏啦~远离屏幕,扭 ...
- 体感开发学习总结 - 二
Kinect开发学习笔记之(一)Kinect介绍和应用 http://blog.csdn.net/zouxy09/article/details/8145592 一.Kinect简介 Ki ...
- kinect体感互动拍照软件开发,支持绿幕/无背景两种,自定义成像区域
体感互动拍照软件主要利用抠像技术和影像合成技术实现,参与者走进游戏区域内,会看见自己的影像已经被合成到前方的屏幕里,这就是抠像互动. 产品介绍: 佩京AR虚拟拍照系统支持绿幕和无背景,通过体感控制拍摄 ...
- 坦克大战系列二:从零编写【坦克大战】
目录 1. 我方坦克发射单颗子弹 2.敌方坦克发射子弹 3. 击中敌方坦克 4. 爆炸效果 5. 敌方坦克自由移动 6.移动范围问题 7. 我方坦克发射多颗子弹 8. 敌方发射的子弹消亡后可以再发射子 ...
- 体感游戏 | 手势识别玩飞机大战游戏(二) Python+OpenCV实现简易手势识别功能
后面将分四篇文章来介绍实现手势识别控制飞机大战游戏的功能,它们分别是: 使用Pygame实现简易飞机大战小游戏 使用Python+OpenCV实现简单手势识别 使用OpenCV实现手势识别玩飞机大战游 ...
最新文章
- 【区块链Go语言实现】区块链基本原型
- android源码framework下添加新资源的方法
- 不用鼠标,只用键盘,你还能操作自如吗?
- 【正一专栏】内马尔留不留下都已经是伤痕累累
- Delphi IDE使用的一些主要技巧
- Java八种基本数据类型的大小,以及封装类,自动装箱/拆箱的用法?
- qq拼音输入法下载|qq拼音输入法纯净版下载
- adadelta算法_【深度学习】深入理解优化器Optimizer算法(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)...
- ansys命令流——网格划分基础操作
- 使用HTML5 Canvas API中的clip()方法裁剪区域图像
- 用C++做的文本分割器(就是黑乎乎的那个)
- leetcode LCP 02. 分式化简
- 初识AutoIt v3
- 数据基础设施创新如火如荼,主要方向有哪些(下)
- TTL反相器、OC门、TS门、推挽输出、开漏输出
- 【知识图谱系列】动态知识图谱表示学习综述 | 十篇优秀论文导读
- 安装 Cartographer问题记录汇总
- input常见输入限制及金额转货币
- ghost博客mysql_centos 上快速搭建ghost博客方法分享
- 过拟和处理方法.md
热门文章
- 【数项级数】无穷个数相加一定是个数吗?
- Dubbo面试题及答案,2021年Dubbo面试题-持续更新中
- linux中yum安装splunk,Splunk tips
- Http文件分块上传
- 香港中文大学岳翔宇老师招收人工智能全奖博士生/博士后/研究助理/实习生
- vue+element-ui之tree树形控件有关子节点和父节点之间的各种选中关系详解
- NLP领域基本名词、算法
- 方差,标准差,标准误,均方根误差,平均绝对误差(SD,SE,RMSE,MAE)简单介绍
- 服务器异常重启,导致mysql启动失败,问题解决过程记录
- 关于http状态码302 请求重定向 前后端数据交互http302