pyautogui.pixel(x,y) 在 while 循环中开始滞后

pyautogui.pixel(x,y) starts lagging in a while loop

我想检查屏幕上的像素何时发生变化,然后在像素发生颜色变化时放置键盘事件。但是大约 2-4 分钟后,当 pyautogui.pixel() 被多次调用时,计算机速度变慢。

这是我的代码

import pyautogui

OldC1 = None

while True:
   NewC1 = pyautogui.pixel(750, 550)

   if NewC1 != OldC1:
      pyautogui.press('up')

   OldC1 = NewC1;

有没有办法解决延迟问题?

我遇到过类似的问题,我的规避方法是直接使用PIL的函数,而不是pyautogui的包装函数:

from PIL import ImageGrab

pixelRGB = ImageGrab.grab().getpixel((x, y))

使用这个功能并没有降低我的电脑速度。

问题不在于您用来获取值的函数,而在于始终 运行 连续不断的无限循环。

如果不需要时间精度,那么我建议通过类似于 sleep()

的函数在循环周期上设置瓶颈

尝试:

from PIL import ImageGrab
import time

OldC1 = (0, 0, 0)

while True:

   time.sleep(.3)
   NewC1 = ImageGrab.grab().getpixel((750, 550))

   if NewC1 != OldC1:
      pyautogui.press('up')

   OldC1 = NewC1

time.sleep(2) 会降低迭代频率,进而会在长 运行.

中带来更好的性能

编辑:

我没有使用 pyautogui 的像素函数来获取特定像素的 RGB 值,而是使用 PIL(Python 成像库)模块中的 getpixel(),原因是因为 pyautogui.pixel() 函数只是 ImageGrab.grab().getpixel() 的包装器,并且由于我们正在努力提高性能,我们应该直接使用 getpixel() 来提高性能。

PS:

pyautogui.pixel() 对总像素查找有限制,约为 10,000。 Read This Answer。这可能会导致不正确的结果,如果查找值超过 10,000,PILgetpixel() 没有此阈值。