Поэтому, когда я попытался автоматизировать какое-то программное обеспечение на основе распознавания изображений, я начал изучать некоторый питон, используя сопоставление шаблонов 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 (сверточная нейронная сеть) в качестве верхнего уровня и запускает цикл только тогда, когда классификатор находит какой-либо шаблон.Это действительно решает проблему?В какой-то момент все еще нужно перебрать все изображения.
Надеюсь, я прояснил проблему.При необходимости я также могу привести примеры кода.