Распознование обьекта по его иконке
#1
Отправлено 25 апреля 2006 - 08:49
Меня интересует наличие возможности у WR распозновать обьекты по их графическому отображению (например иконке). Другими словами интересует возможность кликнуть в область экрана, являющуюся определенным набором пикселей.
Вопрос не критичен, при отсутствии такой возможности у WR буду кликать в координаты, но согласитесь... если есть конкретный обьект (даже графический), это значительно удобней и приятней =)
#2
Отправлено 25 апреля 2006 - 10:16
obj_check_bitmap("....
Вам не подходит ?
Или Вы хотите что-то другое ?
#3
Отправлено 25 апреля 2006 - 10:46
Майк.
#4
Отправлено 25 апреля 2006 - 11:12
Ф-я obj_check_bitmap ищет соотвецтвие графических обьектов в конкретных, указанных мной координатах, да еще к обьекту привязывается в который я кликаю.
А мне хотелось бы наоборот. Чтобы WR находил сохраненное заранее графическое изображение и кликал в его центр например. Как еще одно свойство классов в GUI configuration. =)
#5
Отправлено 25 апреля 2006 - 11:15
А чем "obj_check_bitmap" Вас не устраивает ?
Надо только предварительно набрать изображения по всем интересуюшим объектам и пройти по ним...
Вообще-то, "...хотелось бы заслушать начальника Транспортного цеха..." , что же он все-таки хочет ?
Если нужны ф-ции получения части изображения с экрана или целиком всего экрана в виде файла, то они входят в состав cso2lib
А уж сравнить этот файл с эталонным - это дело техники...
#6
Отправлено 25 апреля 2006 - 11:16
На 99% уверен, что нет такой встроенной функции. Можно, конечно, написать такое самому (во внешней DLL), но работать будет уж очень медленно (ну, либо нужно полноценное распознавание образов).
Понятно, я почти в этом не сомневался... =(
но на всяк случай решил спросить.
Думаю в некоторых ситуациях, такая функция была бы удобна.
Спасибо.
#7
Отправлено 25 апреля 2006 - 11:29
чего я хочу:
1) у меня в какой-то папочке лежит набор имеджей (это мои обьекты)
2) в процессе выполнения скрипта WR понимает, что в открывшемся окне есть какой-то из сохраненных имеджей (обьектов) и кликает по нему.
т.е. папочка это такая самодельная GUI map.
вроде все понятно написал... =)
меня интересовало есть ли такая встроенная ф-я, но я так понимаю что таковой точно нет. А следовательно, что делать если я хочу придерживаться данной схемы? Каким функциями посоветуете пользоваться? Может примерный алгоритм подскажите....
#8
Отправлено 25 апреля 2006 - 12:18
Теперь понятно, что Вы хотите...
В таком случае, я бы подключил к WR бибилиотеку cso2lib, из которой понадобится только одна ф-ция "CaptureAreaToFile".
Ес-но, что известны габариты имеджей в Вашей коллекции и предположим, что габариты одинаковые
А теперь собственно алгоритм:
- взять габариты области, в которой надо найти имидж из коллекции
- начальная точка соответствует левому верхнему углу области
- сделать цикл прохождения по этой области
- вырезать с помощью "CaptureAreaToFile" область, соотв.габариту имиджа, и положить в файл (f1)
- пройти по коллекции имиджей и сравнить бинарно f1 (для этого надо воспользоваться командой DOS "fc /b..." или написать свою ф-цию и положить в DLL) с каждым имиджем из коллекции (я исхожу из того, что имиджы представлены в виде файлов)
- если сравнение не прошло, то сместить вырезаемую область на один пиксел
и продолжить цикл.
Удач !
#9
Отправлено 25 апреля 2006 - 12:53
1) Если ты знаешь класс объекта, то получить лист всех объектов этого класса. Если не знаешь, то взять все объекты без класса.
2) Применять к объектам листа функцию "CaptureBitmap"
3) Сравнивать полученную картинку и исходную
4) Если совпадает, то объект найден.
И не надо тут мудрить с попиксельным сканированием всего монитора.
По моему я ясно выразился.
#10
Отправлено 25 апреля 2006 - 13:07
Все зависит от того, как были получены имиджы. Если с использованием геометрии объектов, тогда я с Вами согласен, а если области вырезались с экрана примерно над объектом, тогда Ваш способ не подходит.
#11
Отправлено 25 апреля 2006 - 14:16
По моему не стоит вырезать с экрана какой-то кусок. Поиск иконки попиксельно по экрану может занять много времени. Хотя ХЗ. Может и нормально работать, если сделать нормальный алгоритм поиска. И такие алгоритмы есть. Есть даже алгоритмы пописка, если размеры не соответствуют, это уже поиск образа или шаблона. И т.д. и т.п.
#12
Отправлено 26 апреля 2006 - 11:38
Правда пока эту тему закрою =) буду кликать в координаты экрана. Просто нет времени пока заниматься сравнением изображений. Тем более что я не давно с WR работаю и возможно эта разработка отнимет у меня много времени =)
Большое всем спасибо =)
#13
Отправлено 26 апреля 2006 - 11:48
Спасибо большое за помощь и проявление интереса к данному топику, приятно общаться со знающмим людьми.
Правда пока эту тему закрою =) буду кликать в координаты экрана. =)
Большое всем спасибо =)
И Вам спасибо за интересный вопрос ! Возможно мне придется в самое ближайшее время заниматься решением именно этой проблемы - если тупо перебирать пикселы на уровне TSL - это, действительно, займет много времени.
А Вам, в свою очередь, настоятельно рекомендую не "..кликать в координаты экрана..", а использовать виртуальные объекты и уже работать с ними, это более правильный подход. Тем более, что в библиотеке cso2lib есть, например, ф-ции получения значения с элемента виртуального списка и т.д.
Удач !
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных