先说一下总体思路,这一块需要读者有一定的机器学习基础。我们在玩游戏的时候,是眼睛看到了屏幕的画面之后,大脑思考应该怎么操作,然后发送指令到我们的手指,按下指定的按键。
利用机器学习玩游戏也是同样的道理,我们可以把游戏的过程离散化,以每一帧游戏画面为单位,连续的操作则对应到每一张图片的操作。
输入一张图片,就对应了一个操作,这个操作可以作为图片的标签。这时候我们就可以把玩游戏的过程建模为一个图片的分类过程,在跑跑卡丁车自动驾驶中,我对操作进行了简化,一共只有三种操作,左转,右转和直行。
每个图片对应着一种操作,我们要做的就是得到大量的训练数据,然后输入到神经网络中进行训练,训练完成后,把游戏画面一帧一帧的送入网络中,网络根据画面输出一个操作,就可以实现自动驾驶。
这里面有几个比较重要的步骤,首先是如何获取游戏图片和图片对应的操作,将在本篇文章中说明。
1.如何获取数据
这里我们需要用到python中的几个包,win32包和opencv包
win32包主要用来获取按键信息,而opencv包则用来获取图像信息。
下面直接给出代码供大家参考
import win32api
import time
keyList = ["\b"]
for char in "ABCDEFGHIJKLMNOPQRSTUVWXYZ 123456789,.'£$/\\":
keyList.append(char)
def key_check():
keys = []
for key in keyList:
if win32api.GetAs