怎么用Python玩GTA5?跟着教程玩!

描述

当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的一部分。

python

果然出错了,我们改一下:

python

什么鬼?dtype明显应该是字符串,而不是什么没定义的变量名。这哥们写完代码到底运行了没?

python

这回终于正常了。不过这段代码太长,而且太慢。改一下吧。

python

这个看着还不错,就是太慢了,每秒大概只能有个2-3帧的样子。再改一下试试。

还是2-3帧。所以问题不是出在imshow函数上。

好了,现在的成绩是:

loop took 0.05849909782409668 seconds loop took 0.044053077697753906 seconds loop took 0.04760456085205078 seconds loop took 0.04805493354797363 seconds loop took 0.05989837646484375 seconds

我们还需要一个numpy数组给OpenCV的imshow函数使用。相对于重新编写.getdata,我还是选择把ImageGrab.grab(bbox=(0,40,800,640))转化为numpy数组。重写是没必要的。

做了这么多事,现在大概有个每秒12-13帧的样子。这个成绩不算好,但是够用了。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分