Я пытаюсь остановить возможный блок в моей программе бота, используя функцию распознавания изображений PyAutoGUI (pyautogui.locateCenterOnScreen
), чтобы распознать простую кнопку «ОК», чтобы избавиться от возможного сообщения об ошибке блока. Тем не менее, функция работает только иногда, как я выяснил, делая снимки экрана с различными сообщениями об ошибках и сравнивая цвет пикселя рядом. Результат, который я обнаружил, заключается в том, что цвет пикселя на двух разных кнопках «ОК» обычно отключен на 1, что объясняет, что функция распознавания изображений возвращает None
большую часть времени. Я хотел бы иметь возможность распознавать изображение, даже если цвет отключен на 1 или 2 пикселя. Я понимаю, что есть ключевой аргумент tolerance
, но положение кнопки меняется на экране, что затрудняет использование функции getpixel
, и вы не можете использовать tolerance
с locateCenterOnScreen
(насколько я понимаю). Будут ли какие-либо предложения относительно того, как я могу решить эту проблему? Заранее спасибо.
Распознавание изображений PyAutoGUI — небольшая проблема с сопоставлением цветов пикселей
Ответы (1)
Попробуйте это ниже (см. здесь: http://pyautogui.readthedocs.io/en/latest/screenshot.html )
Из комментария я знаю, что вы пробовали это, и это не решило проблему в вашем случае.
Другая идея, которая может помочь, заключается в том, что вы обрезаете изображение кнопки до абсолютного минимума, необходимого для ее обнаружения на экране. Обычно цвета ближе к центру более «стабильны», чем тени.
Из комментария я знаю, что это также не решило вашу проблему.
Разрешаете ли вы ПРОЗРАЧНОСТЬ для Windows в вашей ОС (прозрачность - это когда вы можете "видеть" через то, что отображает текущее приложение, что находится в фоновом режиме окна этого приложения - это функция, которая является значением по умолчанию во многих версиях новейших операционных систем)?
Из комментария я знаю, что да.
Это может привести к серьезным проблемам с распознаванием. Снижение (до какого уровня?) прозрачности не решило проблему, а значит, единственный правильный путь:
Отключите функцию прозрачности, чтобы получить стабильные цвета
Все - проблема решена (как это сделать для вашей конкретной системы - другой вопрос, не относящийся к теме распознавания изображений).
Все или одно из приведенных выше должно решить вашу проблему, а если нет, вам, вероятно, придется самостоятельно распознавать изображения, используя другие инструменты обработки изображений рядом с pyautogui
.
ДОБАВЛЕНИЕ: Форма и цвет кнопки [ОК] могут зависеть от многих факторов. При отображении в интернет-браузере он может изменить свой размер при изменении размера страницы. Если пользовательский диалог создается разными приложениями, форма и цвет кнопки [ОК] также могут различаться, если приложение не использует системные стандарты. И, как сказано выше, цвета могут отличаться, если система использует функцию прозрачности.
grayscale=True
в своем коде, но ему все еще не удается распознавать кнопки каждый раз, когда он появляется.
- person D.Vious; 28.04.2017
pyautogui.screenshot()
для сохранения двух изображений png
и сравниваю их по пикселям. Я обнаружил, что некоторые пиксели немного отличаются, например Другое изображение в позиции [316, 904], пиксель 1 [42, 42, 42, 42], пиксель 2 [41, 41, 41, 41].
- person sfz; 18.12.2018