成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

AI虛擬手勢(shì)玩飛機(jī)大戰(zhàn)

人工智能
計(jì)算思路很簡(jiǎn)單,游戲邊框大小為(480, 700),游戲在屏幕正中間啟動(dòng),只要獲取到屏幕的尺寸,就能大概估算出按鈕的坐標(biāo)。在調(diào)用PyMouse的move函數(shù),檢驗(yàn)、微調(diào)一下即可。

哈嘍,大家好。

下面我們分解一下這個(gè)小項(xiàng)目,帶大家來一步一步實(shí)現(xiàn),文末獲取項(xiàng)目完整的源代碼。

1. 準(zhǔn)備飛機(jī)大戰(zhàn)程序

Github?上找到一個(gè)Python?版本的飛機(jī)大戰(zhàn)程序,安裝Pygame即可運(yùn)行。

圖片

游戲操作簡(jiǎn)單,右上角是游戲暫停/開始按鈕,用鼠標(biāo)點(diǎn)擊操作。

鍵盤的A、D、W、S?鍵用來控制飛機(jī)的移動(dòng)方向,分別對(duì)應(yīng)左、右、上、下。

所以我們的AI程序要完成兩個(gè)最核心的功能,第一,識(shí)別手勢(shì);第二,將手勢(shì)轉(zhuǎn)換成鼠標(biāo)、鍵盤操作,便可控制游戲。

2. 識(shí)別手勢(shì)

這里,我們用opencv讀取攝像頭中的視頻流。

將視頻流中的每一幀送入mediapipe中的手掌檢測(cè)模型,識(shí)別手掌 21 個(gè)關(guān)鍵點(diǎn)。

圖片

在我們的項(xiàng)目中,只用到了食指和中指,也就是左右中的第8和第12個(gè)點(diǎn)。

核心代碼如下:

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

frame?是視頻流中的每一幀,hands是手掌檢測(cè)模型。

解析出來的finger_axis_8和finger_axis_12?兩個(gè)對(duì)象中分別存放食指和中指的x、y坐標(biāo)。

3. 手勢(shì)控制游戲暫停

計(jì)算食指與中指坐標(biāo)之間的距離,大于某個(gè)閾值,則移動(dòng)鼠標(biāo),點(diǎn)擊暫停游戲按鈕。

圖片

游戲暫停

若食指與中指坐標(biāo)之間的距離,小于某個(gè)閾值,則移動(dòng)鼠標(biāo),點(diǎn)擊開始游戲按鈕

圖片

游戲開始

距離計(jì)算很簡(jiǎn)單,這里不貼代碼了,重點(diǎn)說下Python控制鼠標(biāo)。

我用的是PyUserInput?庫(kù),它提供了PyMouse和PyKeyboard兩個(gè)類,分別控制鼠標(biāo)和鍵盤。

當(dāng)我們想用Python程序控制游戲的暫停與開始,只需要將鼠標(biāo)移動(dòng)到按鈕的位置,執(zhí)行一次點(diǎn)擊操作即可。

# 定義鼠標(biāo)對(duì)象
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?函數(shù)的參數(shù)dist是食指與中指之間的距離。

暫停/開始按鈕的坐標(biāo)為(915, 125),每個(gè)電腦坐標(biāo)不一樣,需要大家根據(jù)自己的實(shí)際情況重新計(jì)算。

計(jì)算思路很簡(jiǎn)單,游戲邊框大小為(480, 700)?,游戲在屏幕正中間啟動(dòng),只要獲取到屏幕的尺寸,就能大概估算出按鈕的坐標(biāo)。在調(diào)用PyMouse的move函數(shù),檢驗(yàn)、微調(diào)一下即可。

PyMouse的move?函數(shù)用來移動(dòng)鼠標(biāo)位置,click函數(shù)用來執(zhí)行鼠標(biāo)點(diǎn)擊操作。

4. 手勢(shì)控制飛機(jī)移動(dòng)

這里,需要計(jì)算相鄰兩幀食指的x?坐標(biāo)和y?坐標(biāo)的移動(dòng)方向和距離。從而決定按下鍵盤A、D、W、S中的哪一個(gè)。

同樣的,移動(dòng)的方向和距離很簡(jiǎn)單,這里也不說了,重點(diǎn)說下PyKeyboard模塊控制鍵盤按鍵。

self.key_board = PyKeyboard()
# 按下按鍵
self.key_board.press_key(key)
# 停留一段時(shí)間
time.sleep(press_dwell)
# 釋放按鍵
self.key_board.release_key(key)

press_key和release_key?函數(shù)之間,調(diào)用了time.sleep(press_dwell)控制按鍵的時(shí)長(zhǎng),按鍵時(shí)間長(zhǎng),則飛機(jī)移動(dòng)距離就長(zhǎng),反之,按鍵時(shí)間短,則飛機(jī)移動(dòng)距離就短。

所以,這里的難點(diǎn)在于如何將食指的移動(dòng)距離映射為按鍵的時(shí)長(zhǎng)。

我用的是下面這段代碼測(cè)出來

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

固定按鍵時(shí)長(zhǎng)為0.05秒,測(cè)試飛機(jī)從中部移動(dòng)到最左邊,需要的最小的n。

圖片

飛機(jī)從中部移動(dòng)到最左邊,移動(dòng)距離為 240,因此,240 / (n * 0.05)便是飛機(jī)每秒的移動(dòng)距離。

我測(cè)出來的n=7?,因此,飛機(jī)每秒移動(dòng)距離為685.7142857。

只要計(jì)算出食指的移動(dòng)距離,除以685.7142857,就可以得出鍵盤的按鍵時(shí)長(zhǎng)。

手勢(shì)控制飛機(jī)移動(dòng)的完整代碼為:

def press_key_board(self, direction, move_dist):
"""
將手指移動(dòng)距離,換算為按鍵間隔,并執(zhí)行按鍵操作
:param direction:移動(dòng)方向
:param move_dist:移動(dòng)距離
: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)

項(xiàng)目的核心部分已經(jīng)講解完畢,完整代碼已經(jīng)整理好,需要的朋友評(píng)論區(qū)留言即可。

獲取代碼后,先看運(yùn)行步驟.txt。

如果大家覺得本文對(duì)你有用就點(diǎn)個(gè) 在看 鼓勵(lì)一下吧,后續(xù)我會(huì)持續(xù)分享優(yōu)秀的 Python+AI 項(xiàng)目。

責(zé)任編輯:武曉燕 來源: 渡碼
相關(guān)推薦

2014-04-25 10:52:35

2022-07-01 16:55:17

調(diào)試板子手勢(shì)操作

2023-07-06 08:41:20

TTS?Mac?系統(tǒng)

2024-07-31 15:44:06

2019-10-17 21:37:28

微信飛機(jī)大戰(zhàn)Python

2014-12-05 10:25:18

2013-09-09 18:21:14

2020-10-06 15:59:38

AI

2023-02-13 18:32:59

AI繪畫

2020-05-15 10:52:41

大數(shù)據(jù)人工智能技術(shù)

2013-09-03 10:18:16

虛擬網(wǎng)絡(luò)VMware思科

2017-01-06 10:16:03

AI人工智能

2022-04-12 09:21:50

AIPython自動(dòng)駕駛

2012-11-12 16:47:56

2009-05-31 18:55:35

虛擬化UnixHyper-V

2023-02-28 14:57:02

MetaAI

2019-02-13 10:44:36

2011-10-29 21:25:56

虛擬化虛擬機(jī)windows
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 精品国产三级 | 国产精品久久久久久模特 | 精品一区视频 | 成人网在线观看 | 日本黄色高清视频 | 欧美精品一区二区三区蜜桃视频 | 久久久观看 | 一区二区三区免费在线观看 | 欧美一区二区在线观看 | 亚洲成人久久久 | 国产精品久久久久久亚洲调教 | 大香网伊人 | 日韩一区三区 | 亚洲欧洲成人 | 影音先锋中文字幕在线观看 | 欧美精品久久久久 | 在线视频第一页 | 久久精品综合网 | 欧美日韩专区 | 精品亚洲一区二区 | 精品一区二区久久久久久久网精 | 永久免费视频 | 国产成人精品免费视频大全最热 | 欧美视频网 | 国产精品一区二区久久久久 | 成人a视频在线观看 | 日日人人 | 中文字幕免费在线观看 | 亚洲国产精品一区二区第一页 | zzzwww在线看片免费 | 中文字幕在线不卡 | 国产精品成人在线播放 | 激情视频一区 | 亚洲精品在线播放 | 亚洲国产成人精品女人久久久 | 国产精品一区二区欧美黑人喷潮水 | 中文字幕精品一区二区三区精品 | av在线播放国产 | 国产精品久久久久久久久久久久久久 | 在线国产中文字幕 | 久草中文在线观看 |