原文名称:Reading game frames in Python with OpenCV - Python Plays GTA V原文链接:https://pythonprogramming.net/game-frames-open-cv-python-plays-gta-v/原文作者:@Harrison本文是Harrison《Python Plays GTA V》系列教程第一篇。

当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 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帧的样子。这个成绩不算好,但是够用了。

——————————————————————————————————————

第一篇翻译完啦~关于配套的还有一部视频(配套视频详见原文),本来想做个字幕出来的...但是...我这初中英语水平实在是应付不来了...有机会再做吧~(考虑后面利用语音识别做个机翻)

翻译这篇文章一方面是对Python的兴趣,另一方面也算是锻炼自己的英文水平了。巧的是,这两个技能水平都不高,所以如果看到错误,欢迎指正~

作者:地球的外星人君

来源:https://zhuanlan.zhihu.com/p/28164389

————广告时间————

《马哥Linux云计算及架构师》网络课程,由知名Linux布道师马哥创立,经历了8年的发展,联合阿里巴巴、唯品会、大众点评、腾讯、陆金所等大型互联网一线公司的马哥课程团队的工程师进行深度定制开发,课程采用 Centos7.2系统教学,加入了大量实战案例,授课案例均来自于一线的技术案例。

开课时间:随到随学

课程咨询请长按即可咨询

gta python解指纹_用Python玩GTA 5—使用OpenCV读取游戏面面相关推荐

  1. gta python解指纹_基于图像处理和tensorflow实现GTA5的车辆自动驾驶——第四节通过Python控制人物前进后退...

    一开始想采用PyAutoGUI,然后GTA并不支持,遂采用DirectX的输入模式 这部分的代码看不太懂了,我就Github上搜了一下代码,然后调整了一下. Kyes.py文件 键盘映射,主要是把键位 ...

  2. python解包裹_关于Python中包裹传参和解包裹的理解

    原标题:关于Python中包裹传参和解包裹的理解 1.包裹传参 首先思考一个问题:为什么要有包裹传参?原因包括但不仅限于以下两点:①不确定参数的个数.②希望函数定义的更加松散灵活 包裹传参分两种:包裹 ...

  3. python解矩阵方程_用Python代写的Numpy求解线性方程组

    在本文中,您将看到如何使用Python的Numpy库解决线性方程组. 什么是线性方程组? 维基百科将线性方程组定义为: 在数学中,线性方程组(或线性系统)是两个或多个涉及同一组变量的线性方程的集合. ...

  4. 用python解矩阵方程_用Python的Numpy求解线性方程组

    原文链接:拓端数据科技 / Welcome to tecdat​tecdat.cn 在本文中,您将看到如何使用Python的Numpy库解决线性方程组. 什么是线性方程组? 维基百科将线性方程组定义为 ...

  5. python deepcopy函数_用Python解数独[6]:递归获得最终答案

    目录 用Python解数独[0] 用Python解数独[1]:求每个单元格的行值域 用Python解数独[2]:求列值域和九宫格值域 用Python解数独[3]:求总值域 用Python解数独[4]: ...

  6. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  7. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  8. python硬件交互_对Python的交互模式和直接运行.py文件的区别详解

    对Python的交互模式和直接运行.py文件的区别详解 看到类似C:\>是在Windows提供的命令行模式,看到>>>是在Python交互式环境下. 在命令行模式下,可以执行p ...

  9. python的精髓_教你玩转Python!一文总结Python入门到精髓的窍门

    (建议收藏) 很多人应该都有过这种经历,大量重复性工作:日报.周报.各种报,无穷无尽:不计其数的数据提取······琐碎繁杂的事务让工作的效率极低.如果可以一键完成就好了. 对这些问题来说,最高效的解 ...

最新文章

  1. HashMap底层原理分析(put、get方法)
  2. SpringMVC中的文件上传
  3. AI理论知识整理(8)-素数与最大公因数
  4. java 加法 溢出_java实现两个大数相加,可能出现溢出错误
  5. BugKuCTF WEB flag在index里
  6. c++median search中位数搜索的实现算法(附完整源码)
  7. 最新8篇ICML2020投稿论文:自监督学习、联邦学习、图学习、数据隐私、语言模型、终身学习...
  8. 机器学习用于数字图像处理_用于创建数字内容的免费电子学习工具
  9. 调整SAP系统中物料账和财务账的期间
  10. html语言ppt,HTML语言课件.ppt
  11. ant+testng 搭建
  12. css鼠标移上去向上移动,css3鼠标移动图片上移效果
  13. php 读取js文件,JS中如何读取文件
  14. 联想android刷机教程,联想YOGA Tablet 2线刷刷机教程 Android版可救砖
  15. 电源设计经验之 MOS 管驱动电路
  16. 运维分级发布_运维必备制度:故障分级和处罚规范
  17. 怎么看懂晦涩难懂的书
  18. 程序员吐槽培训班简历造假,经验包装竟拿到阿里外包26k的offer
  19. openGauss:(5)openGauss简介
  20. warning MSB8012 VS2010

热门文章

  1. hibernate-curl增删改查
  2. 入门心理咨询师心路历程
  3. angular.uppercase()
  4. 新国标插座插排究竟有哪些规定?盘点那些被我们忽略的安全知识
  5. 企业公司邮箱 | 什么是邮件归档和邮件备份?
  6. 说说摩拜单车的骑后感
  7. java/php/python/nodejs汽车维修零配件库存管理系统vue+elementui
  8. lalaljhjje
  9. mysql购物车标设计_只需轻松点两下,人人都会设计的 Logo 图!
  10. 计算机硬件造型,带你见识下那些稀奇古怪的电脑造型!