搜索
首页科技周边人工智能AI虚拟手势玩飞机大战

AI虚拟手势玩飞机大战

May 17, 2023 am 11:34 AM
ai计算虚拟手势

哈喽,大家好。

下面我们分解一下这个小项目,带大家来一步一步实现,文末获取项目完整的源代码。

1. 准备飞机大战程序

Github​上找到一个Python​版本的飞机大战程序,安装Pygame即可运行。

AI虚拟手势玩飞机大战

游戏操作简单,右上角是游戏暂停/开始按钮,用鼠标点击操作。

键盘的A、D、W、S​键用来控制飞机的移动方向,分别对应左、右、上、下。

所以我们的AI程序要完成两个最核心的功能,第一,识别手势;第二,将手势转换成鼠标、键盘操作,便可控制游戏。

2. 识别手势

这里,我们用opencv读取摄像头中的视频流。

将视频流中的每一帧送入mediapipe中的手掌检测模型,识别手掌 21 个关键点。

AI虚拟手势玩飞机大战

在我们的项目中,只用到了食指和中指,也就是左右中的第8和第12个点。

核心代码如下:

ret, frame = cap.read()
results = hands.process(frame[:, :, ::-1])
if results.multi_hand_landmarks:
# 遍历每个手掌
for hand_landmarks in results.multi_hand_landmarks:
finger_axis_8 = hand_landmarks.landmark[8]
finger_axis_12 = hand_landmarks.landmark[12]

frame​是视频流中的每一帧,hands是手掌检测模型。

解析出来的finger_axis_8和finger_axis_12​两个对象中分别存放食指和中指的x、y坐标。

3. 手势控制游戏暂停

计算食指与中指坐标之间的距离,大于某个阈值,则移动鼠标,点击暂停游戏按钮。

AI虚拟手势玩飞机大战

游戏暂停

若食指与中指坐标之间的距离,小于某个阈值,则移动鼠标,点击开始游戏按钮

AI虚拟手势玩飞机大战

游戏开始

距离计算很简单,这里不贴代码了,重点说下Python控制鼠标。

我用的是PyUserInput​库,它提供了PyMouse和PyKeyboard两个类,分别控制鼠标和键盘。

当我们想用Python程序控制游戏的暂停与开始,只需要将鼠标移动到按钮的位置,执行一次点击操作即可。

# 定义鼠标对象
self.mouse = PyMouse()

def pause_or_start_game(self, dist):
"""
判断是否需要暂停(开始)游戏
:param dist:
:return:
"""
if (not self.is_pause and dist > 80) or (self.is_pause and dist < 80):
self.mouse.move(915, 125)
self.mouse.click(915, 125)

self.is_pause = not self.is_pause

pause_or_start_game​函数的参数dist是食指与中指之间的距离。

暂停/开始按钮的坐标为(915, 125),每个电脑坐标不一样,需要大家根据自己的实际情况重新计算。

计算思路很简单,游戏边框大小为(480, 700)​,游戏在屏幕正中间启动,只要获取到屏幕的尺寸,就能大概估算出按钮的坐标。在调用PyMouse的move函数,检验、微调一下即可。

PyMouse的move​函数用来移动鼠标位置,click函数用来执行鼠标点击操作。

4. 手势控制飞机移动

这里,需要计算相邻两帧食指的x​坐标和y​坐标的移动方向和距离。从而决定按下键盘A、D、W、S中的哪一个。

同样的,移动的方向和距离很简单,这里也不说了,重点说下PyKeyboard模块控制键盘按键。

self.key_board = PyKeyboard()
# 按下按键
self.key_board.press_key(key)
# 停留一段时间
time.sleep(press_dwell)
# 释放按键
self.key_board.release_key(key)

press_key和release_key​函数之间,调用了time.sleep(press_dwell)控制按键的时长,按键时间长,则飞机移动距离就长,反之,按键时间短,则飞机移动距离就短。

所以,这里的难点在于如何将食指的移动距离映射为按键的时长。

我用的是下面这段代码测出来

for i in range(n):
kb.press_key('A')
time.sleep(0.05)
kb.release_key('A')

固定按键时长为0.05秒,测试飞机从中部移动到最左边,需要的最小的n。

AI虚拟手势玩飞机大战

飞机从中部移动到最左边,移动距离为 240,因此,240 / (n * 0.05)便是飞机每秒的移动距离。

我测出来的n=7​,因此,飞机每秒移动距离为685.7142857。

只要计算出食指的移动距离,除以685.7142857,就可以得出键盘的按键时长。

手势控制飞机移动的完整代码为:

def press_key_board(self, direction, move_dist):
"""
将手指移动距离,换算为按键间隔,并执行按键操作
:param direction:移动方向
:param move_dist:移动距离
:return:
"""
dist_per_sec = 685.7142857
if direction == 'x':
key = 'A' if move_dist < 0 else 'D'
elif direction == 'y':
key = 'W' if move_dist < 0 else 'S'
else:
return

press_dwell = math.fabs(move_dist / dist_per_sec)
self.key_board.press_key(key)
time.sleep(press_dwell)
self.key_board.release_key(key)

项目的核心部分已经讲解完毕,完整代码已经整理好,需要的朋友评论区留言即可。

获取代码后,先看运行步骤.txt。

如果大家觉得本文对你有用就点个 在看 鼓励一下吧,后续我会持续分享优秀的 Python AI 项目。

以上是AI虚拟手势玩飞机大战的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:51CTO.COM。如有侵权,请联系admin@php.cn删除
如何使用Huggingface Smollm建立个人AI助手如何使用Huggingface Smollm建立个人AI助手Apr 18, 2025 am 11:52 AM

利用“设备” AI的力量:建立个人聊天机器人CLI 在最近的过去,个人AI助手的概念似乎是科幻小说。 想象一下科技爱好者亚历克斯(Alex)梦见一个聪明的本地AI同伴 - 不依赖

通过斯坦福大学激动人心的新计划,精神健康的AI专心分析通过斯坦福大学激动人心的新计划,精神健康的AI专心分析Apr 18, 2025 am 11:49 AM

他们的首届AI4MH发射于2025年4月15日举行,著名的精神科医生兼神经科学家汤姆·因斯尔(Tom Insel)博士曾担任开幕式演讲者。 Insel博士因其在心理健康研究和技术方面的杰出工作而闻名

2025年WNBA选秀课程进入联盟成长并与在线骚扰作斗争2025年WNBA选秀课程进入联盟成长并与在线骚扰作斗争Apr 18, 2025 am 11:44 AM

恩格伯特说:“我们要确保WNBA仍然是每个人,球员,粉丝和公司合作伙伴,感到安全,重视和授权的空间。” anno

Python内置数据结构的综合指南 - 分析VidhyaPython内置数据结构的综合指南 - 分析VidhyaApr 18, 2025 am 11:43 AM

介绍 Python擅长使用编程语言,尤其是在数据科学和生成AI中。 在处理大型数据集时,有效的数据操作(存储,管理和访问)至关重要。 我们以前涵盖了数字和ST

与替代方案相比,Openai新型号的第一印象与替代方案相比,Openai新型号的第一印象Apr 18, 2025 am 11:41 AM

潜水之前,一个重要的警告:AI性能是非确定性的,并且特定于高度用法。简而言之,您的里程可能会有所不同。不要将此文章(或任何其他)文章作为最后一句话 - 目的是在您自己的情况下测试这些模型

AI投资组合|如何为AI职业建立投资组合?AI投资组合|如何为AI职业建立投资组合?Apr 18, 2025 am 11:40 AM

建立杰出的AI/ML投资组合:初学者和专业人士指南 创建引人注目的投资组合对于确保在人工智能(AI)和机器学习(ML)中的角色至关重要。 本指南为建立投资组合提供了建议

代理AI对安全操作可能意味着什么代理AI对安全操作可能意味着什么Apr 18, 2025 am 11:36 AM

结果?倦怠,效率低下以及检测和作用之间的差距扩大。这一切都不应该令任何从事网络安全工作的人感到震惊。 不过,代理AI的承诺已成为一个潜在的转折点。这个新课

Google与Openai:AI为学生打架Google与Openai:AI为学生打架Apr 18, 2025 am 11:31 AM

直接影响与长期伙伴关系? 两周前,Openai提出了强大的短期优惠,在2025年5月底之前授予美国和加拿大大学生免费访问Chatgpt Plus。此工具包括GPT-4O,A A A A A

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)