Win平台下使用Python截图的各种方法
0x00 前言
一年前,我在油管上曾经看到过一位大神使用Py进行GTA5 的自动驾驶,但他做出来的性能很差,常需要人为干预,于是在学习了一个暑假的深度学习后,我决定做一个自己的基于深度学习的GTA5自动驾驶.
第一步,就是获取数据,即截图与按键,本文讲大致叙述如何在win平台下截图,并对它们的性能进行对比.
0x01 使用PIL库
PIL简介
PIL只支持到了Python 2.x, 但是我们依然可以在Python 3安装pillow,和PIL一样的:
pip install pillow
PIL可以对图像进行缩放旋转剪裁模糊锐化balabala…等一大堆操作,当然,这里只介绍使用PIL截图!
使用PIL截图
主要代码如下:
import time #用于统计帧率
import numpy as np
from PIL import ImageGrab # 一会将要使用ImageGrab模块中的grab方法进行截图
import cv2 #显示图片
def get_screen(region):
"""
region: tuple,参数为(up, left ,width, height),
up和left是窗口距离屏幕左上角的偏移,width和height是窗口的宽和高
"""
while True:
temp_time = time.time()
img = ImageGrab.grab(bbox=region)
# 由于grab方法得到的图片是尺寸是(w*h,1),所以我们还要reshape成(w,h,channel)的形式
img = np.array(img.getdata(), np.uint8).reshape(img.size[1], img.size[0],3)
cv2.imshow('window', img)
cv2.waitKey(1)
print(1/(time.time()-temp_time),"frames per sec")
运行以下看看效果:
淦,1~2的FPS,做个P的python auto-drive,就算在我关闭了图片显示后性能依然捉鸡,而后发现在我注释掉转化为np.array之后的帧率却大大上升了,达到了20FPS左右.虽然这些图像之后扔进网络里炼的时候还要做preprocess,但是谁想平白无故地多写代码呢,对不对?
而且