使用 PIL 或 cv2 等模块在 python 中捕获屏幕的最有效方法是什么?

使用 PIL 或 cv2 等模块在 python 中捕获屏幕的最有效方法是什么?因为它占用大量内存。


我想教 AI 通过屏幕抓取和整洁的方式来玩 Chrome 的恐龙游戏,但它的速度很慢......


我努力了:


import numpy as np

from PIL import ImageGrab

import cv2

import time


last_time = time.time()

while True:

    printscreen_pil = ImageGrab.grab(bbox= (0, 40, 800, 640))


    printscreen_numpy = np.array(printscreen_pil.getdata(), dtype = 'uint8').reshape((printscreen_pil.size[1], printscreen_pil.size[0], 3))

    

    print(f'the loop took {time.time() - last_time} seconds')

    last_time = time.time()

 

     cv2.imshow('window', printscreen_numpy)

     if cv2.waitKey(25) & 0xFF == ord('q'):

         cv2.destroyAllWindows()

         break


    # average time = the loop took 2.068769931793213 seconds 


动漫人物
浏览 156回答 1
1回答

叮当猫咪

您可以使用mss“纯 python 中的超快速跨平台多个屏幕截图模块”。例如:import timeimport cv2import numpy as npfrom mss import mssstart_time = time.time()mon = {'top': 200, 'left': 200, 'width': 200, 'height': 200}with mss() as sct:    while True:        last_time = time.time()        img = sct.grab(mon)        print('The loop took: {0}'.format(time.time()-last_time))        cv2.imshow('test', np.array(img))        if cv2.waitKey(25) & 0xFF == ord('q'):            cv2.destroyAllWindows()            break结果:The loop took: 0.024120092391967773输出:结果比当前结果快 100 倍。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python