代码已放入码云
作者在上一节主要讲了关于伪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(向后) 使用方法,参考这个文件,直接调用方法即可
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!!!')
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
© 版权声明
本站下载的源码均来自公开网络收集转发二次开发而来,
若侵犯了您的合法权益,请来信通知我们1413333033@qq.com,
我们会及时删除,给您带来的不便,我们深表歉意。
下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,访问及下载者下载默认同意本站声明的免责申明,请合理使用切勿商用。
THE END
暂无评论内容