Проблема не столько в функции, которую вы используете для получения значений, а в бесконечном цикле, который постоянно работает постоянно.
Если точность времени не требуется, то ярекомендовал бы поставить узкое место в циклах цикла, используя функцию, подобную sleep()
TRY:
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 для определенного пикселя, я скорее использовал модуль getpixel()
из PIL
(Python Imaging Library), причина в том, что функция pyautogui.pixel()
является просто оболочкой ImageGrab.grab().getpixel()
, и, поскольку мы стремимся к производительности, мы должны вместо этогоиспользуется getpixel()
напрямую, для небольшого повышения производительности.
PS:
pyautogui.pixel()
имеет ограничение на общее количество просмотров пикселей, которое составляет где-то около 10 000. Прочитать этот ответ .Это может привести к неверным результатам, если значение поиска превышает 10 000, PIL
getpixel()
не имеет этого порогового значения.