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