搜尋
首頁科技週邊人工智慧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 無盡。

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)