基于图像处理和tensorflow实现GTA5的车辆自动驾驶——第九节获取图像数

代码已放入码云

作者在上一节主要讲了关于伪AI的几点,图像处理部分应该就结束了。作者不想深入研究图像处理。从这一部分开始,他计划使用神经网络训练来优化代码。强烈建议从本节创建一个新文件以创建 py 文件。为了与上一节分开制作训练集,使用采集窗口的数据集。 py文件获取用户输入的按键:W(前进)、A(左转)、B(右转)、S(后退) 使用采集窗口的数据集注:这是有人上传的代码,并且使用了PIL库来获取图像,但是帧率太低,作者尝试了这个新代码,发现帧率比PIL库的高,所以我采用了这个代码

实现代码见Gitee项目

使用方法,参考文件,直接调用方法

from grabscreen import grab_screen
screen = np.array(grab_screen(region=(0, 40, 800, 640)))

将获取的图像转换为灰度图像(因为灰度图像比彩色图像数据少,计算成本低)

screen = cv2.cvtColor(screen, cv2.COLOR_BGR2GRAY)

获取到的图片,原来的800*600转换成80、60,这样图片的计算量也减少了

screen = cv2.resize(screen, (80, 60))

至此,采集窗口的数据集步骤就完成了使用.py文件获取用户输入的按键:W(前进)、A(左转)、B(右转) ), S(向后) 使用方法,参考这个文件,直接调用方法即可

图片[1]-基于图像处理和tensorflow实现GTA5的车辆自动驾驶——第九节获取图像数-唐朝资源网

from getkeys import key_check
key = key_check()
# key 为列表,包含用户press的按键(大写)

这次只考虑前进,左转右转

# [A, W ,D]
outPutDatamat = [0, 0, 0]
if 'A' in key:
    outPutDatamat[0] = 1
elif 'W' in key:
    outPutDatamat[1] = 1
elif 'D' in key:

    outPutDatamat[2] = 1
# 如果按下了`A`键,那么`outPutDatamat=[1, 0, 0]`

合并训练集并保存注意:倒计时完成后,会记录窗口。当得到2000帧时,循环结束,将200帧的训练集test.npy尽量保存在有左转右转的地方。奔跑吧,左右转会有更多数据

i = 3
    while i != 0:
        print("time:", i)
        time.sleep(0.5)
        i -= 1
    training_data = []
    last_time = time.time()
    paused = False
    print('STARTING!!!')

图片[2]-基于图像处理和tensorflow实现GTA5的车辆自动驾驶——第九节获取图像数-唐朝资源网

while True: if not paused: screen = np.array(grab_screen(region=(0, 40, 800, 640))) last_time = time.time() # run a color convert: screen = cv2.cvtColor(screen, cv2.COLOR_BGR2GRAY) # resize to something a bit more acceptable for a CNN screen = cv2.resize(screen, (80, 60)) # get key datamat output = get_key() training_data.append([screen, output]) print(len(training_data)) # cv2.imshow('window', cv2.cvtColor(screen, cv2.COLOR_BGR2RGB)) if len(training_data) % 2000== 0: np.save('test.npy', np.array(training_data), allow_pickle=True) break if cv2.waitKey(25) & 0xFF == ord('q'): cv2.destroyAllWindows() break

阅读训练集,看看它是否有效

这段代码比较简单,我就不解释了

import time
from grabscreen import grab_screen
import cv2

from getkeys import key_check
import numpy as np
train_data = np.load('test.npy', allow_pickle=True)
for data in train_data:
    img = data[0]
    choice = data[1]
    cv2.imshow('test',img)
    print(choice)
    if cv2.waitKey(25) & 0xFF == ord('q'):
        cv2.destroyAllWindows()
        break

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片