當(dāng)OpenAI's Universe(Universe)出現(xiàn)后,很多文章都在鼓吹大量的游戲(甚至GTA5)已經(jīng)做好了迎接AI時(shí)代的準(zhǔn)備。我當(dāng)時(shí)躍躍欲試,然而GTA5最終被神神秘秘的清除出Universe,連個(gè)解釋都沒(méi)有。
后來(lái)我短暫的放棄了這個(gè)念頭,但偶爾想起來(lái)依然有點(diǎn)抑制不住的小激動(dòng)。所以我還是決定在這件事情上多花點(diǎn)功夫,同時(shí)好好思考這件事情到底是不是非得用OpenAI不可。OpenAI的好處在于針對(duì)一些簡(jiǎn)單的游戲項(xiàng)目可以實(shí)現(xiàn)每分鐘上千次的迭代訓(xùn)練,但是GTA5這種游戲嘛,情況就不一樣了。
我們來(lái)說(shuō)一下為什么選擇GTA5。至少對(duì)我來(lái)說(shuō),GTA5是一個(gè)有無(wú)數(shù)理由讓我去進(jìn)行練習(xí)的絕佳環(huán)境。在這個(gè)開(kāi)放世界里你幾乎沒(méi)有不能做的事情——舉一個(gè)最簡(jiǎn)單的例子:自動(dòng)駕駛汽車。在游戲中,我們可以用MOD控制時(shí)間、天氣、交通、速度、遇到的緊急狀況等等等等。這是個(gè)完全的、可以量身訂制(有時(shí)需要MOD)的世界。
我的教程有時(shí)候經(jīng)過(guò)充足的計(jì)劃、有些計(jì)劃過(guò)一點(diǎn)、有的完全沒(méi)有計(jì)劃過(guò)。這個(gè)項(xiàng)目就是完全沒(méi)有計(jì)劃的教程之一。我知道不是所有人都有GTA5,不過(guò)我想你可以使用其他類似的游戲來(lái)和我一起學(xué)習(xí)這個(gè)項(xiàng)目——我們有很多游戲都可以拿來(lái)使用。(如果使用其他游戲)你需要對(duì)某些部分進(jìn)行調(diào)整以使其正常運(yùn)行,所以你可能得有點(diǎn)基礎(chǔ)才行。
我的初步目標(biāo)是創(chuàng)造一個(gè)自動(dòng)駕駛汽車,所以任何一個(gè)有公路和汽車的游戲都可以拿來(lái)用。我用來(lái)接入游戲的方法幾乎可以在其他所有游戲中也使用,如果你選擇了更簡(jiǎn)單的游戲,那就省事多了。因?yàn)镚TA5的高度擬真,陽(yáng)光會(huì)讓電腦識(shí)別變得更加具有挑戰(zhàn)性。
我可能也會(huì)嘗試其他游戲——因?yàn)槲蚁嘈盼覀兛梢酝ㄟ^(guò)簡(jiǎn)單示范來(lái)教AI怎么玩。通過(guò)卷積神經(jīng)網(wǎng)絡(luò)處理信息,然后讓AI進(jìn)行練習(xí)就行。
我的初步判斷是:
盡管Python并沒(méi)有現(xiàn)成的庫(kù)可用,不過(guò)1.我們可以讀取屏幕圖像2.我們可以模擬按鍵
這兩項(xiàng)足夠我們處理常規(guī)事務(wù),不過(guò)對(duì)于深度學(xué)習(xí)來(lái)說(shuō),我們可能還想要記錄游戲世界的進(jìn)程。好在現(xiàn)在的大部分游戲已經(jīng)完全可視化,這已經(jīng)不再是個(gè)難題,我們可以通過(guò)追蹤鼠標(biāo)和按鍵,這一切都為深度學(xué)習(xí)提供了條件。
我猜這一路不會(huì)一帆風(fēng)順,但至少會(huì)很有趣。我的擔(dān)憂主要集中在項(xiàng)目推進(jìn)的速度上。我們可以做,最少是值得做。
總而言之,這是一個(gè)大項(xiàng)目,如果我們不拆分來(lái)做,顯然就超綱了。所以我們來(lái)一點(diǎn)一點(diǎn)的嘗試,第一步的目標(biāo)是:
找個(gè)像樣的FPS工具以訪問(wèn)游戲畫面,能用就行的那種。我們的要求是能看就行。
確保鍵盤輸入的指令可用。我覺(jué)得這很簡(jiǎn)單,但是必須得試試才知道。
嘗試手柄輸入。特別是轉(zhuǎn)向、剎車等操作。
嘗試使用OpenCV。希望不會(huì)遇到大問(wèn)題。
在簡(jiǎn)單的道路環(huán)境下實(shí)現(xiàn)自動(dòng)駕駛。
好了,第一步,我們?nèi)绾螌?shí)現(xiàn)讀取屏幕畫面?我一直在想可以做,但還真沒(méi)想過(guò)怎么做。所以,Google!我找到不少案例,不過(guò)大部分都不能用,只有這個(gè)還算可以:Screen Capture with OpenCV and Python-2.7。
注意:導(dǎo)入的時(shí)候似乎有點(diǎn)錯(cuò)誤,ImageGrab是PIL的一部分。
果然出錯(cuò)了,我們改一下:
什么鬼?dtype明顯應(yīng)該是字符串,而不是什么沒(méi)定義的變量名。這哥們寫完代碼到底運(yùn)行了沒(méi)?
這回終于正常了。不過(guò)這段代碼太長(zhǎng),而且太慢。改一下吧。
這個(gè)看著還不錯(cuò),就是太慢了,每秒大概只能有個(gè)2-3幀的樣子。再改一下試試。
還是2-3幀。所以問(wèn)題不是出在imshow函數(shù)上。
好了,現(xiàn)在的成績(jī)是:
loop took 0.05849909782409668 secondsloop took 0.044053077697753906 secondsloop took 0.04760456085205078 secondsloop took 0.04805493354797363 secondsloop took 0.05989837646484375 seconds
我們還需要一個(gè)numpy數(shù)組給OpenCV的imshow函數(shù)使用。相對(duì)于重新編寫.getdata,我還是選擇把ImageGrab.grab(bbox=(0,40,800,640))轉(zhuǎn)化為numpy數(shù)組。重寫是沒(méi)必要的。
做了這么多事,現(xiàn)在大概有個(gè)每秒12-13幀的樣子。這個(gè)成績(jī)不算好,但是夠用了。
-
AI
+關(guān)注
關(guān)注
88文章
34421瀏覽量
275800 -
python
+關(guān)注
關(guān)注
56文章
4825瀏覽量
86295 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5555瀏覽量
122539
原文標(biāo)題:用Python玩GTA 5—使用OpenCV讀取游戲面面
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
云里物里電子價(jià)簽顯示方案助力潮玩行業(yè)數(shù)字化升級(jí)
樹(shù)莓派復(fù)古游戲機(jī):用科技重現(xiàn)經(jīng)典,讓童年永不落幕!

你還在以為智能家居是玩?我家是真能用!

為啥要玩“工業(yè)引擎”,不老老實(shí)實(shí)賣模組?
玩美移動(dòng)AI解決方案再拓展:全新AI卷發(fā)分析,將AI發(fā)質(zhì)檢測(cè)技術(shù)推向新高度
Share Boom第12期:云終端2.0時(shí)代-無(wú)影隨行,且玩好贏沙龍圓滿落幕
剛到手的NAS怎么玩?這些TIPS請(qǐng)收好~

評(píng)論