Performant UI автоматизация с использованием распознавания изображений в Python - PullRequest
0 голосов
/ 30 января 2019

Поэтому, когда я попытался автоматизировать какое-то программное обеспечение на основе распознавания изображений, я начал изучать некоторый питон, используя сопоставление шаблонов opencv и библиотеку pyautogui.Я знаю, что такие инструменты, как autohotkey или autoit, могли бы облегчить работу, но я хотел использовать python, потому что меня интересует и машинное обучение в целом.

До python я изучал Sikuli, Autohotkeyи Autoit, но посчитал их слишком громоздкими для работы через некоторое время.Я видел программное обеспечение, созданное на основе этих структур, которые понимают, чего я хочу достичь.

Что я хочу сделать, это: сопоставить набор изображений с текущим экраном и щелкнуть по ним, когда они будут найдены.Процесс не имеет состояния и, следовательно, каждый раз должны совпадать все шаблоны.

Требования:

  • Работа с любым приложением (не только windows wpf и т. Д.)
  • Возможность нескольких мониторов (у pyautoui есть проблемы с этим).Это также делает очень большие снимки экрана (например, 3840x1080 с 2 мониторами)
  • Найти и найти элемент интерфейса почти мгновенно (<0,5 с) </li>
  • Необязательно: Неблокирующее взаимодействие мыши / курсора

Моя первая реализация этого в python сработала, но для каждого изображения потребовалось около 1 секунды.Поэтому, когда я просмотрел их (20 изображений), это заняло около 20 секунд.Я уменьшил это, используя библиотеку joblib для использования многопоточности.Это сократило время на 75% (в зависимости от доступных ядер), что все еще слишком медленно.Кроме того, это все еще не похоже на масштабируемый подход.

Итак, мои вопросы:

  • Каков лучший масштабируемый подход к этому?
  • Разве это не похоже?использовать автономное вождениеКак его программное обеспечение справляется с этим?
  • Подходящие для этого инструменты, которые я выбрал (python, pyautogui, opencv)?

Коллега дал мне идею поставить CNN (сверточная нейронная сеть) в качестве верхнего уровня и запускает цикл только тогда, когда классификатор находит какой-либо шаблон.Это действительно решает проблему?В какой-то момент все еще нужно перебрать все изображения.

Надеюсь, я прояснил проблему.При необходимости я также могу привести примеры кода.

...