Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ Плагины и доп. ПО _ Программа Unique Colors Search

Автор: Zeleax 31.10.2010, 11:05

Программа Unique Colors Search

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

По найденным цветам можно быстро искать этот предмет на экране (обычно используется для поиска мобов при создании ботов для онлайн-игр).
В UOPilot для поиска цвета используется функция findcolor

Скачать можно здесь в разделе Downloads
https://sites.google.com/site/leaxplace/
Или с http://ifolder.ru/25284482
Или прям https://forum.uokit.com/index.php?act=Attach&type=post&id=1036 smile.gif

http://radikal.ru/F/s009.radikal.ru/i307/1010/b7/50be553a1add.jpg.html

http://radikal.ru/F/s006.radikal.ru/i213/1010/a5/36535076f4dc.jpg.html

Как ни странно идея данной программы возникла по совершенно пустячному (и очень важному!) поводу: захотелось сделать бота для одной из онлайн игр.

Мысль вроде бы разумная - раз есть компьютер и он потр<вырезано анти-матом>ет электроэнергию, так пусть хоть отрабатывает часть своего хлеба сам, нечего меня ещё нагружать сбором всяких ресурсов, убийством мобов и т.д.! =))

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

Одно из её полезных умений - поиск на экране пикселей заданного цвета. Эта функция как раз и используется при поиске объектов, на которых нужно кликнуть, чтоб что-нибудь с ними сделать (или просто проанализировать какую-то информацию на экране). И все было бы хорошо, но вот не попадались мне однотонно фиолетовые ёжики и однотонно зеленые яблоки. Ёжики были с разноцветными иголками и крутились всеми боками, яблоки тоже были с кучей оттенков и лежали в разноцветно-зеленом лесу на разноцветно-зеленой травке. Попробуй тут найди нужный тебе цвет, по которому можно обнаружить именно яблоко и не перепутать его с филейкой крокодила! =))

Программа Unique Colors Search именно это и умеет делать. Она находит те уникальные цвета объекта, по которым можно обнаружить только яблоко, а не листик, травинку или кузнечика.

При практическом использовании очень важно сохранять копии экрана в графические файлы без потери качества. Например, для этого подходят файлы в форматах PNG или BMP.

Принцип пользования простой: нажимая на кнопки над левым списком добавляете/удаляете картинки с яблоками. Файлы и папки также можно добавлять путем перетаскивания из окна Проводника Windows. Нажимая кнопки над правым списком добавляете/удаляете картинки леса без яблок, которые предварительно вырезаны (т.е. картинки фона). Я, например, просто грубо обвожу яблоки по контуру захватывая немного лишнего фона и все внутри заливаю белым цветом. В практике намного лучше ситуация, когда в изображениях объекта будут лишние пиксели фона, чем если в картинки фона попадут части объекта! Вывод: выделяйте объекты по контуру "с запасом наружу".
Потом нажимаем кнопку "Start Analyze", ждем немного (или много- зависит от размера картинок и количества присутствующих цветов) и получаем в окне отчета информацию по цветам, которые присутствуют только в яблоках, но отсутствуют на всех картинках леса! Вот по этим значениям цвета и можно автоматически найти фрукты. Чем больше значение Frequency (частота), тем с большей вероятностью можно обнаружить яблоко по данному цвету. Максимально возможное значение 100% (оно же является оптимальным и достаточным для поиска).
Программа позволяет искать не только отдельные цвета, но также может подобрать оптимальное сочетание 2-х и более цветов, дающих максимальное значение Frequency и Density (плотность цвета).
Также добавлена экспериментальная функция поиска шестнадцатеричного диапазона цветов, который дает максимальное значение Frequency.

В программе встречается несколько параметров цвета (или комбинаций цветов):
Frequency - наиболее важный параметр- частота появления цвета в наборе изображений. Чем выше частота - тем больше вероятность найти объект по данному цвету. Оптимальное значение 100%
Density - средняя плотность цвета. Чем выше средняя плотность, тем больше пикселей этого цвета на изображениях. Нужно учесть, что "больше" - не всегда значит "лучше". Например, цвет A встречается в 100% изображений объекта всего в 1 пикселе. Цвет B встречается в 50% изображений объекта, но зато в 500 пикселах в каждом. Таким образом плотность цвета B гораздо выше, но объект можно найти в 100% случаев именно по цвету A. Таким образом, параметр Frequency гораздо важнее параметра Density.
Duplication (Dubl, Dupl) - дублирование информации. Применяется к комбинации цветов или к диапазону цветов. Чем больше коэффициент дублирования, тем лучше. (Если он больше 1.0 - уже хорошо!). Его еще можно назвать "коэффициентом запаса надежности" при поиске объекта.

Анализ изображений и поиск оптимального диапазона цветов занимают довольно много времени (возможно несколько минут), так что просьба проявить терпение и подождать пока программа досчитает.
Результаты анализа и всех расчетов/поисков появляются в окне Отчета (добавляются в начало). Текст отчета можно выделить, а затем скопировать в буфер обмена нажав Ctrl+C или Ctrl+Ins.

При пользовании программой зацикливаться на ёжиках и яблоках не обязательно - можно искать и другие объекты/мобов. ;-)
Кроме того, чем больше различных изображений объекта для анализа у вас будет, тем более точный результат даст программа!
Лично я для подбора уникальных цветов использую не менее 7-10 различных изображений объекта (иногда до 15-20) и столько же различных изображений фона без этого предмета. Вообще, чем больше, тем лучше (но считает дольше).

Для работы программы нужно иметь предварительно установленный пакет Microsoft .NET Framework 3.5 SP1, который можно скачать http://download.microsoft.com/download/2/0/E/20E90413-712F-438C-988E-FDAA79A8AC3D/dotnetfx35.exe.


Прикрепленные файлы
Прикрепленный файл  UniqueColorsSearch2.zip ( 28,48 килобайт ) Кол-во скачиваний: 23666

Автор: kellas 31.10.2010, 11:58

ну а как она связана с пилотом ???
точнее как рисунок связать со скриптом
а так штука нужная)))

Автор: Zeleax 31.10.2010, 12:04

Цитата(kellas @ 31.10.2010, 11:58) *

ну а как она связана с пилотом ???
точнее как рисунок связать со скриптом
а так штука нужная)))

после анализа изображений в нижних квадратах остаются только те цветные точки, которые нужно скриптами искать с помощью findcolor.
Цвета этих точек лучше определять увеличив картинку экранной лупой+ определение цвета с помощью UOPilot. Или FastStone Capture- очень удобно! (там есть встроенная экранная лупа) - тоже сразу показывает десятичное и HEX значения цвета.
Буду дорабатывать программу - может сделаю встроенный определитель цвета точек )

Автор: DarkMaster 31.10.2010, 12:22

И все же не до конца понятно что делать с найденными различиями... Руками в пилот? Может хоть тхт под массив генерить? Так же возможна связь через буфер обмена. Насколько быстро происходит обработка? Если все происходит достаточно быстро нет ли у тебя желания сделать обработку на лету без скриншотов, заменив по факту финд колор?

Автор: Zeleax 31.10.2010, 12:27

Цитата(DarkMaster @ 31.10.2010, 12:22) *

И все же не до конца понятно что делать с найденными различиями... Руками в пилот? Может хоть тхт под массив генерить? Так же возможна связь через буфер обмена. Насколько быстро происходит обработка? Если все происходит достаточно быстро нет ли у тебя желания сделать обработку на лету без скриншотов, заменив по факту финд колор?

Пока что руками в пилот, цвета для поиска мобов то есть... Я еще близко с пилотом не знаком, только форум читал, вот и буду учиться применять UCS+UOPilot в реальной ситуации. Если есть пожелания, то желательно излагать подробнее.
В принципе, для поиска моба достаточно цвета 1 любой найденной точки, так как этот цвет встречается на ВСЕХ скринах мобов, но его нигде нет на скринах фонов.

Обработка занимает 3-30 секунд для каждого скрина фона (мобы обрабатываются быстро).

За подсказку насчет выгрузки массива в текстовый файл - спасибо =)
Дай, пожалуйста, пример такого файла - как хотелось чтобы оно выглядело

Автор: DarkMaster 1.11.2010, 20:00

Посидел подумал как будет лучше реализовать. Во 1 хотелось бы чтобы работал не только с отдельными файлами, но и с папками для того, чтобы сравнивать сразу несколько скриншотов. Разные ракурсы могут дать разные результаты. Так же очень бы хотелось счетчик совпадений. Т.е. взяли мы моба, нашли уникальные цвета, но зачмем нам перебирать тот цвет который встречается 1 раз, если есть тот который бывает 100 раз. Файлик очень простой:
x y количество_совпадений
разделитель табуляция. Как наверное сам уже догадался, не помешает сортировка от большего к меньшему по количеству совпадений.

Автор: Zeleax 1.11.2010, 20:42

Цитата(DarkMaster @ 1.11.2010, 20:00) *

Файлик очень простой:
x y количество_совпадений
разделитель табуляция. Как наверное сам уже догадался, не помешает сортировка от большего к меньшему по количеству совпадений.

Наверное,
цвет количество_совпадений
?

И цвет в каком лучше формате десятичном или шестнадцатеричном?

Автор: DarkMaster 1.11.2010, 20:56

Правильно цвет. Я очепятался чуток.
Цвет в десятичном инвертированном (в пилотном). Можно добавить еще обычный шестнадцатиричный, чтобы можно было понять что было найдено, но это не критично.

Автор: Zeleax 3.11.2010, 15:08

Цитата(DarkMaster @ 1.11.2010, 20:00) *

Посидел подумал как будет лучше реализовать. Во 1 хотелось бы чтобы работал не только с отдельными файлами, но и с папками для того, чтобы сравнивать сразу несколько скриншотов. Разные ракурсы могут дать разные результаты. Так же очень бы хотелось счетчик совпадений. Т.е. взяли мы моба, нашли уникальные цвета, но зачмем нам перебирать тот цвет который встречается 1 раз, если есть тот который бывает 100 раз. Файлик очень простой:
x y количество_совпадений
разделитель табуляция. Как наверное сам уже догадался, не помешает сортировка от большего к меньшему по количеству совпадений.

Сделал - данные копируются в буфер обмена. Групповую обработку файлов сделаю чуть позже - полностью переработаю программу. Свежая версия, как всегда - на сайте
https://sites.google.com/site/leaxplace/

Кстати, хотел извиниться перед разработчиком UOPilot: цвета он определяет корректно. Тот же FastStone Capture - дает те же десятичные значения цветов, чтои UOPilot. Проблема возникла из-за неправильного преобразования Dec <-> HEX в Numlock Calculator - возможно я там что-то недонажал. Это связано судя по всему с порядком отображения байтов при преобразовании 4-хбайтового целого десятичного в HEX значение.

Автор: Zeleax 11.11.2010, 0:30

По поводу findcolor...
Может ли он искать сразу несколько цветов хранящихся в массиве ну или хотя бы несколько цветов, например, взятых в круглые скобки и записанных через запятую?

Я сейчас делаю полную переработку программы поиска уникальных цветов (точнее пишу с нуля =) и эта возможность findcolor в скором будущем была бы очень кстати...

Автор: DarkMaster 11.11.2010, 0:45

нет. в текущей версии не может.

Автор: Zeleax 11.11.2010, 7:55

Ну тогда было бы здорово реализовать такую возможность findcolor.
Кроме того, добавить возможность поиска внутри диапазона цветов ограниченного нижним и верхним значенями. Возможно даже лучше начать с поиска внутри диапазона- сравнение всего с 2-мя значениями на проверку rolleyes.gif

Автор: GhostHunter 13.11.2010, 11:05

Цитата(Zeleax @ 11.11.2010, 1:30) *

По поводу findcolor...
Может ли он искать сразу несколько цветов хранящихся в массиве ну или хотя бы несколько цветов, например, взятых в круглые скобки и записанных через запятую?

Я сейчас делаю полную переработку программы поиска уникальных цветов (точнее пишу с нуля =) и эта возможность findcolor в скором будущем была бы очень кстати...

У меня самого все критится такая мысля - возможность хранить и загружать битовые образы с картинкой (bmp - это и есть массив цветов) и искать не точку, а как раз этот загруженный массив. Возможно, он будет иметь какие-то "прозрачные" биты, т.е. "дырки", по которым сравнение не производится.
Уточню - это не поиск всех точек, содержащихся в bmp, по очереди, а поиск такой картинки на экране целиком. Воть это было бы реально круто. Кто-то там жаловался, что приходится писать кучу условий в одну строчку - if ( x1 y1 цвет1 ) and ( и т.д. ) - вот оно решение, хоть и не простое, в плане реализации.
Синтаксически представляю как-то так:
Код

set #hBmp loadbitmap <относительный_путь к файлу>
set #result findimage #hBmp

Могу реализовать это на С, прислать код, если автору интересно будет что-то такое прикурутить.

Автор: Zeleax 13.11.2010, 13:25

Цитата(GhostHunter @ 13.11.2010, 11:05) *

Уточню - это не поиск всех точек, содержащихся в bmp, по очереди, а поиск такой картинки на экране целиком. Воть это было бы реально круто.

Согласен, альтернатива хорошая. Скорость поиска правда будет очень низкая.
По сути поиск такой картинки - это как сделать findcolor столько раз, сколько пикселов в этом bmp файле.
Возможно следует еще добавить к такой команде для ускорения нахождения опцию статистики+рандомный поиск точек внутри области.
Код
set #hBmp loadbitmap <относительный_путь к файлу> [b]<%_совпадения>[/b]
set #result findimage #hBmp

Т.е. ищется сначала на экране первый "непрозрачный" пиксел bmp-файла. Потом, если он найден и задан например %_совпадения=60% (меньший 100%), то проверяются не по порядку все остальные пиксели, а в случайном порядке внутри области проверки. Когда совпадает с объектом 60% случайно выбранных пискелов подряд то объект считается найденным.

Автор: GhostHunter 13.11.2010, 15:27

Цитата(Zeleax @ 13.11.2010, 14:25) *

Согласен, альтернатива хорошая. Скорость поиска правда будет очень низкая.
По сути поиск такой картинки - это как сделать findcolor столько раз, сколько пикселов в этом bmp файле.

...

Т.е. ищется сначала на экране первый "непрозрачный" пиксел bmp-файла.
...

Продолжу нить рассуждений, ты почти опроверг сам свою мысль насчет медленного поиска ))
Находится первый верхний левый (именно в таком порядке, самый левый из линнии (либо точки) самых верхних) "непрозрачный" искомый пиксель, назовем его точкой A. Допустим, это точка B экране (с координатами X0, Y0).
Тут же начинают сравниваться остальные искомые пиксели, уже относительно найденной точки B. Далее либо подтверждается 100% совпадение с картинкой (ну или N%, если дать развитие идее неполного сравнения), либо продолжается поиск пикселя от точки B далее на экране.
Это достаточно простой переборный алгоритм (поиск "в лоб"), но он гораздо быстрее, чем
Цитата(Zeleax @ 13.11.2010, 14:25) *

сделать findcolor столько раз, сколько пикселов в этом bmp файле

И, кстати, в частности, так можно искать надписи на экране, заранее известного размера.

Автор: Zeleax 13.11.2010, 20:54

Да, чет я сегодня устал после вчера ))
Перемкнуло, и не только по этому вопросу... biggrin.gif

Автор: Zeleax 16.11.2010, 9:02

Сделал новую версию программы UniqueColorsSearch2 (лежит на https://sites.google.com/site/leaxplace в разделе Downloads).
Для работы программы нужно скачать и установить библиотеку .NET Framework 3.5 (все ссылки есть на сайте).

Описание её работы есть пока только в архиве с программой - на сайте еще не успел.
Программа сыровата в интерфейсе, но уже полностью работает. Буду еще дорабатывать интерфейс и улучшать алгоритм.

Скачаете, оцените - отпишитесь плиз, советы и мнения не помешают smile.gif

Если кратко - теперь она может обрабатывать кучу изображений и давать расширенную статистику для выбора нужных цветов. Сама тоже может цвета подбирать rolleyes.gif

Автор: Zeleax 17.11.2010, 0:54

Немного обновил версию программы на сайте (раздел Downloads), чтоб не вылетала с ошибкой при преждевременном запуске глубокого анализа.

Также на сайте дал прямую ссылку на пакет Microsoft .NET Framework 3.5 SP1 потому как с 4-й версией пакета программа работать почему-то не желает (я тихо балдею от совместимости между разными версиями своих же продуктов Microsoft)

Автор: Zeleax 21.11.2010, 14:39

Внёс в программу значительные улучшения:

1) изменения в интерфейсе;
2) фоновый анализ скринов (при подборе комбинации цветов- фоновый пока не использовал- не было необходимости);
3) статистика прямо в поле отчета;
4) поиск оптимальной комбинации цветов с перебором всех возможных вариантов;
5) подсветка пикcелей одного из выбранных цветов на изображениях объектов (при двойном клике на коде цвета в поле отчета).

Теперь подбирать нужный цвет для поиска мобов - одно удовольствие! smile.gif

Автор: Zeleax 4.12.2010, 21:51

Новая версия Unique Colors Search 2.1.3

http://radikal.ru/F/i013.radikal.ru/1012/e3/f3342b9b7b63.jpg.html

1) изменен интерфейс
2) оптимизирован алгоритм анализа
3) добавлена возможность поиска оптимального диапазона цветов объекта (в будущем пригодится, если findcolor улучшат)

На https://sites.google.com/site/leaxplace/ описаны её основные возможности и порядок работы.

Автор: Zeleax 5.12.2010, 12:34

Мне вот интересно - я только для себя эту прогу написал или люди ей тоже пользуются?
Просто никаких вопросов ни по работе, ни по глюкам, ни пожеланий....

Хоть до конца понятно для чего Unique Colors Search нужна и когда ей удобно пользоваться? rolleyes.gif

Автор: DarkMaster 5.12.2010, 12:57

ну я себе ее в папочку к пилоту пристроил сразу =) даже потестил. но я давненько уже не бегал, там, где ее можно использовать. прога полезная однозначно - пару лет назад была бы основным инструментом.

Автор: DarkMaster 5.12.2010, 14:27

Drag&Drop бы не помешал =)

Автор: Zeleax 5.12.2010, 14:29

Цитата(DarkMaster @ 5.12.2010, 13:27) *

Drag&Drop бы не помешал =)

откуда-куда? blink.gif

Автор: DarkMaster 5.12.2010, 16:09

скриншоты в список из папки перекидывать. ну и папки перетаскивать.

Автор: Zeleax 5.12.2010, 23:57

Цитата(DarkMaster @ 5.12.2010, 13:27) *

Drag&Drop бы не помешал =)

UniqueColorsSearch 2.1.4

1) исправлены ошибки ранее приводившие к краху программы при повторном запуске анализа с новыми данными
2) появилась возможность добавления файлов и папок в списки путем перетаскивания из окна Проводника Windows (drag & drop)

smile.gif

Автор: Zeleax 6.12.2010, 21:02

UniqueColorsSearch 2.1.5

1) улучшен алгоритм работы интерфейса программы
2) поиск оптимального диапазона цветов не тормозит программу (переведен в фоновый режим)

Всё, пока остановился, так как вроде улучшать особо нечего biggrin.gif
Буду ждать замечаний и пожеланий smile.gif

Скачать программу можно https://sites.google.com/site/leaxplace/

Автор: Denker 7.1.2011, 15:37

Начал искать цвета, но что-то я не понял функции "Find Combination". Можете объяснить подробнее что она делает? У меня не зависимо от числа, что я ставлю в окошке, всегда выдаёт одно значение цвета, причём самое первое.

Если задать число больше, чем найдено цветов, выскакивает ошибка

"Индекс находился вне границ массива."

Если надо, могу выложить скрин сообщения ошибки и папку с проверяемыми картинками (вся папка весит 56кб).

Автор: Zeleax 7.1.2011, 17:12

Find combination - ищет комбинацию из 2-х или более цветов, с помощью которых можно обнаружить объект с наибольшей вероятностью.
Найденные цвета потом можно использовать в поиске (начиная с цвета с наибольшей вероятностью).
Если при поиске комбинации 2-х цветов возвращает только 1 цвет, значит есть смысл использовать для поиска только 1 цвет. Второй цвет искать нет смысла (и так вероятность нахождения 100%)

Например, программа показала, что оптимальной является комбинация цветов 5922925 и 6514807.
Потом я их последовательно ищу в скрипте:

Код
set $a findcolor (#lookX1, #lookY1 #lookX2, #lookY2 1 1 5922925 %arr 2) // волк 95% вероятность нахождения
if $a = 0 // если не найден 1-й цвет, то пробуем найти объект по 2-му цвету
   set $a findcolor (#lookX1, #lookY1 #lookX2, #lookY2 1 1 6514807 %arr 2) // волк 87% (95% и 87% дают вобщем 100% вероятность)
end_if
if $a  <> 0 // нашли объект
   // что-то делаем

end_if


желательно выложить всю папку для проверки (и скрин программы с результатами обработки и сообщением об ошибке)

З.Ы.: я обычно использую комбинацию максимум из 2-х цветов с суммарной вероятностью нахождения 95-100%. В большинстве случаев достаточно и 1 цвета

Автор: Denker 7.1.2011, 18:05

Скрин проги и ошибки положил в папку.
Прикрепленный файл  color.rar ( 162,34 килобайт ) Кол-во скачиваний: 1778

Автор: Zeleax 7.1.2011, 19:31

Единственный подходящий для вас цвет, относящийся к стрелке - 8481633:
616B81 0,084 100,0 8481633

все остальные относятся к фону.
Увидеть легко - достаточно сделать двойной клик на этой строчке отчета, когда активна картинка l2.bmp

Программу буду поправлять =)
В данном случае все цвета появляются с вероятностью 100% (что естественно, т.к. есть только один объект для поиска - l2.bmp). Поэтому второй цвет и не предлагается (в Find Combination).

Интересно, а какая была цель поиска в данном случае? т.к. l2 и l3 почти идентичны.
Кроме того, обычно слева указывается несколько объектов для поиска, между которыми нужно найти что-то общее. А у вас 1 (l2.bmp)

Автор: Denker 7.1.2011, 20:14

Цитата(Zeleax @ 7.1.2011, 18:31) *

Интересно, а какая была цель поиска в данном случае? т.к. l2 и l3 почти идентичны.
Кроме того, обычно слева указывается несколько объектов для поиска, между которыми нужно найти что-то общее. А у вас 1 (l2.bmp)


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

это специально сделано, что нельзя менять размер окна?

Автор: Zeleax 8.1.2011, 16:57

Цитата(Denker @ 7.1.2011, 19:14) *

это специально сделано, что нельзя менять размер окна?

да. А что - нужно?

Автор: Zeleax 10.1.2011, 14:12

Цитата(Denker @ 7.1.2011, 19:14) *

на экране появляется четыре картинки со стрелками и за ограниченое время их надо нажать в правильном порядке

Обновил версию программы до 2.1.6 - исправил ошибку с вылетом при задании большого числа цветов в Find Combination и еще небольшой глюк при подсветке пикселей (двойной клик в окне отчета на нужном цвете).

Кстати, в вашем случае стрелку влево все-таки следует искать по 2-цветам как минимум (для надежности) - см.прикрепленную картинку.

А вообще для улучшения статистики было бы лучше для каждой стрелки взять по 8-15 картинок (и чем больше- тем лучше =)


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: Denker 10.1.2011, 19:37

Спасибо за помощь и советы, учту на будущее. Но благодаря FastStone Capture решил свою проблемму другим образом, более экономичным. Подробнее свои результаты описал в теме "Поиск Цвета По Слоям".
Но Unique Colors Search мне понравилась, буду пользоваться.

Автор: Zeleax 11.1.2011, 9:01

Цитата(Denker @ 10.1.2011, 18:37) *

благодаря FastStone Capture решил свою проблему другим образом, более экономичным

А можно поподробнее, как именно проявилась экономия? можно в https://forum.uokit.com/index.php?showtopic=20806

Автор: Zeleax 1.3.2011, 1:13

https://sites.google.com/site/leaxplace/
Добавлена возможность поиска целых изображений с помощью самого UOPilot (с выборочной степенью проверки совпадения с оригиналом) посредством генерации скрипта поисковой подпрограммы. Уточню: программа проверяет заданный процент пикселей от общего числа пикселей Объекта, и если ВСЕ они совпали с оригинальным изображением, то Объект считается найденным. Пиксели проверяются по всей площади изображения в особом "разбросанном" по всей площади порядке (в таком же, как происходило построение объекта при нажатии кнопки Rebuild points).

Созданную подпрограмму следует вставить в конец вашего основного скрипта. (пример использования нужно удалить или использовать в своём скрипте).
Еще добавлю: функция findcolor в текущей версии пилота (v.2.18.8) во многих программах возвращает координаты найденной точки со смещением. Как правильно получить результат findcolor - читаем в теме https://forum.uokit.com/index.php?showtopic=20548 (прилеплена в Важном в общем форуме по UOPilot). Если у вас именно такая ситуация, то нужно подправить код сгенерированного скрипта: добавить смещение #ucsX1 и #ucsY1 в строчки с присваиванием координат в начале цикла for:
For #ucsi 1 #ucssz
set #ucsXb sar[ #ucsi 1 ] + #ucsX1
set #ucsYb sar[ #ucsi 2 ] + #ucsY1

Функция поиска целых изображений полезна в случае, если выполняются сразу оба условия:
1) у объекта нет уникальных цветов (например одна из нескольких похожих текстовых кнопок на экране);
2) объект на экране всегда выглядит одинаково (с точностью до пикселя)

Если же у объекта есть уникальный цвет, то лучше объект искать именно по этому цвету с помощью findcolor (так будет намного быстрее).

Для использования новой функции:
- загружаем в левый список искомый объект, в правый - скрины без этого объекта (рекомендую для генерации оптимального кода поиска, хотя на крайний случай можно и без них)
- выполняем анализ изображений (Start Analyze)
- выделяем в левом списке нужный файл-Объект и нажимаем кнопку Find Image (появится новое окно);
- пересоздаем точки изображения кнопкой (Rebuild Points)
- ползунком выбираем нужный процент совпадения с оригинальным изображением (100% - явно лишнее) и визуально контролируем что получится (в принципе иногда может хватить даже 10-30% точек из-за хитрого порядка проверки точек =)
- генерируем код скрипта (кнопка Generate)
- копируем код в буфер обмена (кнопка Copy)
- вставляем полученный код в конец своего скрипта и "прикручиваем" поиск изображения (вызов подпрограммы и проверку результата) в нужное место вашего скрипта (пример использования есть в начале сгенерированного кода)

Вдруг что не работает - отписываемся тут =)

P.S.: если хотите искать на экране текст в виде картинки и поиск пилотом почему-то его не находит- попробуйте отключить в Windows сглаживание экранных шрифтов, а только потом делайте скрины экрана, текста, анализ в программе, поиск пилотом и т.п.
Если ищете просто картинку без текста - сглаживание шрифтов отключать не надо

Автор: xphoenix305 2.3.2011, 14:09

Ребят здравствуйте, помогите мне в 1 проблемке, если сможете. Играю Battle of Immortals. Uopilot 2.17
Все работает норм. винда 7, запуск от админа. Но... никак не могу сделать автопоиск сундучков лута с мобов. Пробовал и через диапазон делать (добавлял пару картинок сундука и пару фона без него), так же пробовал через поиск картинки, но либо просто не получается, либо я че то не догоняю так как не юзаю сложные скрипты в пилоте. Ну из примера в коде заменил "msg Object found! Left upper corner at #ucsPosX , #ucsPosY" на райтклик по тем же координатам. Еще не понял при поиске по картинке обязательно ли вставлять рисунок фона или можно открывать только один объект?

for #a 303 713 5 // поставил 5 чтоб было быстрее (у нас же диапозон цветов, по идее должно работать)
for #b 242 460 5
if #a, #b 2698583 2960983
move #a, #b
right #a, #b
end_if
end_for
end_for
это вариант моего простого скрипта.

вариант с файндколором содрал с форумов
set $a 0
while $a = 0
set $a findcolor (905, 62 934, 87 1 1 3185728 %arr 2)
end_while
set #x %arr 2 [1 1]
set #y %arr 2 [1 2]
move #x, #y
wait 1s
right #x, #y
wait 1s
// так и не нашел описание команды findcolor, но сказали надо писать так )) вроде верхлев граница, низправ граница,шаг1, шаг2,цвет

все скриншоты делаются по умолчанию в bmp норм качества. >2мб. Так же делаю и сундуками. Сглаживание шрифтов убирал ток что, но не помогло.
Путем случайных переборов нашел значения пикселей в сундуке, но часто щелкает и в другие места фона, т.е. не уникальные ((
Так же заметил что findcolor как-то странно работает. Нахожу цвет в точке, указываю ренж поиска вокруг этой точки 10х10 а findcolor в этом время тыкает абсолютно в другую область!
Кроме того пилот часто жалуется на неправильность скрипта, хотя все правильно. После перезапуска снова работает некоторое время.


Эскизы прикрепленных изображений
Прикрепленное изображение Прикрепленное изображение Прикрепленное изображение

Прикрепленные изображения
Прикрепленное изображение

Автор: Zeleax 2.3.2011, 14:22

Нужно сделать несколько картинок только той области экрана, где происходит поиск (весь экран - нет смысла). Там где есть сундук и несколько там где его нет, но перс там бегает (чем больше тем лучше, в обоих случаях штук по 6-12, я себе вообще по 20шт делал). Из скринов с сундуками повырезать сундуки (оставить только белый фон вместо них), а эти сундуки сохранить в отдельные файлы (в отдельную папку для удобства). Потом в UCS загрузить все файлы с сундами в левый список, а все файлы без сундов (в т.ч. с вырезанными) в правый.
Потом анализ...
Картинки фона без сундов программе как раз и нужны, чтоб пилот не кликал где попало, а только по сундам (чтобы знать - где не кликать =).

Если что-то не получается - все подготовленные картинки пакуй в архив и выкладывай на файлообменник, чтоб скачать проверить можно было.

З.Ы.: функция поиска целых изображений полезна в случаях, когда объект на экране всегда выглядит одинаково (с точностью до пикселя) и только в том случае, если для него не удается найти уникальные цвета. Всё же лучше искать по 1-2 уникальным цветам (если они есть) - намного быстрее будет.

И версию пилота обнови, уже есть 2.18.8

Кстати, диапазоны цветов - вещь мутная. Не совсем понятно как оно работает в пилоте (и правильно ли)

Автор: xphoenix305 2.3.2011, 14:36

Обновил ток что. И отредактировал. Проблема еще и в том что сундуки всегда подсвечиваются желтыми огоньками, которые очень динамично изменяются, поиск картинки тут ничего не даст, верно?

Автор: Zeleax 2.3.2011, 14:56

не факт, нужно попробовать. Уникальные цвета для поиска могут быть подобраны. (тогда сундов побольше надо).
У меня в игре мобы вообще разноцветные и крутятся - а цвета подходящие нашлись )

Сорь, сразу не так понял вопрос =)
Действительно, поиск целой картинки в твоём случае точно не даст ничего. Нужно искать по подобранным уникальным цветам

Автор: xphoenix305 2.3.2011, 17:49

Забил на поиски картинки. Вторые сутки мучаю findcolor. щелкает совсем в другое место на экране!
set $a 0
while $a = 0
set $a findcolor (789, 399 874, 477 1 1 2177585 %arr 2)
end_while
wait 1s
move %arr [1 1], %arr [1 2]
wait 1s
right %arr [1 1], %arr [1 2]

тоже самое если arr [1 1] приравнивать к #x, y
оч интересует еще 1 момент. если в строке с findcolor в скрипте идет "%arr 2" то в move уже без "2", это опечатка? я так понимаю "arr 2" это название массива и указание что там всего 2 ячейки?

Автор: Zeleax 2.3.2011, 17:54

%arr -название массива
2 - метод поиска (еще может быть 1)

Автор: DarkMaster 9.4.2011, 18:52

Потестил генерацию кода поиска картинки. Несколько моментов честно говоря ввели в ступор и я подумал, что пациент мертв.
1) Почему для генерации условия необходимо сначала с чем то сравнить картинку для нахождения уникальных цветов?
Ну ладно допер сравнить с пустотой, сравнил активировалась кнопка.
2) Нажал Find Image, появилась картинка. Зачем? Тут я вообще не понял зачем мне ее показали и дали одну кнопку "преобразовать"... Я так понял, что на этом этапе задумывалась возможность выбора области генерации. Собственно или штаны наденьте или крестик снимите)) Или сразу преобразовывать либо дать возможность выбора области(еще бы и с лупой).
3) Началось преобразование. Признаюсь честно засунул полноценный скриншот, естественно не для того предназначено. Программа повисла основательно - пришлось закрыть диспетчером задач(закрылась с ошибкой). Попытался еще раз, решил подождать и дать подольше поработать. Вспомнил минут через 40 - справилась).
4) Здесь я был приятно поражен - filling просто потрясает. Алгоритм шикарен.

В целом за счет филлига остался пораженным и в некотором недоумении из-за проблем доступа к анализу и какой-то нелогичности кнопочек.
Пожелания:
1) Активность кнопки "Find Image" независимо от предварительного сравнения.
2) Выбор области для анализа.
3) Лупа при выборе.
4) Полосы прокрутки при просмотре рисунка.
5) Белый фон у рисунка, когда крутишь filling.
6) Лупа при прокрутки filling.
7) Возможность вставки изображения из буфера.
8) Предупреждение о слишком большой области поиска либо полоска прогресса, а то все колом встает.

Автор: Zeleax 9.4.2011, 20:54

Цитата(DarkMaster @ 9.4.2011, 17:52) *

Потестил генерацию кода поиска картинки. Несколько моментов честно говоря ввели в ступор и я подумал, что пациент мертв.
1) Почему для генерации условия необходимо сначала с чем то сравнить картинку для нахождения уникальных цветов?
Ну ладно допер сравнить с пустотой, сравнил активировалась кнопка.
2) Нажал Find Image, появилась картинка. Зачем? Тут я вообще не понял зачем мне ее показали и дали одну кнопку "преобразовать"... Я так понял, что на этом этапе задумывалась возможность выбора области генерации. Собственно или штаны наденьте или крестик снимите)) Или сразу преобразовывать либо дать возможность выбора области(еще бы и с лупой).
3) Началось преобразование. Признаюсь честно засунул полноценный скриншот, естественно не для того предназначено. Программа повисла основательно - пришлось закрыть диспетчером задач(закрылась с ошибкой). Попытался еще раз, решил подождать и дать подольше поработать. Вспомнил минут через 40 - справилась).
4) Здесь я был приятно поражен - filling просто потрясает. Алгоритм шикарен.

1) можно было сделать и без сравнения. Но при сравнении с реальными скринами фона оптимизируется выбор базовой точки (по цвету) для поиска объекта на экране. Так что можно сравнивать и с пустотой, просто потом в скрипте картинка на экране будет дольше искаться- возможно будет больше "холостых циклов".
2) задумывалась опция, чтоб указать "прозрачный" цвет, который не будет сравниваться с изображением на экране. Но можно конечно и сразу запустить процесс разбивки/воссоздания изображения
3) согласен без вопросов
4) спасибо, действительно алгоритм продумывал основательно smile.gif

Лупу можно прикрутить с выделением области на изображении, правда потрудиться придется изрядно.... А может можно картинку заранее подготовить и обрезать лишнее в любом редакторе? )

Автор: DarkMaster 9.4.2011, 21:05

1) Предварительное сравнение за частую смысла вообще не имеет. Пара простых примеров - сесть на трейд. Надо найти в инвентаре рисунок, он не прозрачный, прямоугольный.
Пример второй - была необходимость просканировать панельки скилов и занести в массив где и что находится. Скилы все так же не прозрачны и статичны.

вырезать то я и в паинте вырежу, поэтому и предложил передачу картинки из буфера минуя сохранение(вырезал, перекинул). А вот когда филинг крутишь, то тут уже надо присматриваться к мелким деталям и лупа точно не помешала бы. еще и серый цвет затрудняет имхо просмотр. Либо просто растягивать как в превью в основном окне, вот только не будет ли искажений по количеству пикселей?

Автор: Zeleax 9.4.2011, 21:56

Попробую пояснить для чего нужно сравнение со скринами.
Есть такой скриншот (см.прикрепленный файл). На нем нужно искать черную кнопку с 3 белыми кружками. Мой алгоритм начинает искать не с левого верхнего угла кнопки, а с самого редкого цвета. Для кнопки это белый цвет... А вот для скрина - этого белого цвета полно! Представь сколько будет холостых проверок, пока алгоритм доберется до пикселей кнопки перебирая на всём экране пиксели белого цвета слева-направо и сверху-вниз! Поэтому и делается анализ изображения кнопки и анализ изображения скрина фона чтобы понять, что искать начинать надо с чёрного цвета (как самого редкого), а не с белого.

Насчет буфера - можно сделать.

Скилы лучше искать по уникальным цветам (если такие для них обнаружены с помощью UCS).
Это гораздо быстрее, чем целую картинку сравнивать.

Можно сделать выбор цвета фона на генерируемой картинке (сделать белый по умолчанию).

Растянуть маленькую картинку можно. искажение по пикселям будет только на экране. В поисковый скрипт всё пойдёт как надо. Опять же у меня FastStone Capture с лупой - настольный инструмент )


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: DarkMaster 10.4.2011, 7:48

так учитывая, что область поиска выбрать все равно нельзя, зачем пихать кучу белого или любого другого фона? все равно вырезать кнопку придется... или я что-то не понял...

Цитата

Скилы лучше искать по уникальным цветам (если такие для них обнаружены с помощью UCS).
Это гораздо быстрее, чем целую картинку сравнивать.

Перебирать несколько тысяч итемов, сотен скилов и прочего, что может оказаться на панели я бы не захотел. А иначе цвет попросту может оказаться не уникальным, как и расположение цвета в иконке.

Цитата
Растянуть маленькую картинку можно. искажение по пикселям будет только на экране. В поисковый скрипт всё пойдёт как надо. Опять же у меня FastStone Capture с лупой - настольный инструмент

А я с WindowScanner сидел и его лупой смотрел)

Автор: Zeleax 10.4.2011, 10:25

Цитата(DarkMaster @ 10.4.2011, 6:48) *

так учитывая, что область поиска выбрать все равно нельзя, зачем пихать кучу белого или любого другого фона? все равно вырезать кнопку придется... или я что-то не понял...

Смысл процедуры анализа в том чтобы понять - по какому цвету нужно начинать искать кнопку на экране. Для этого слева загружается кнопка, а справа несколько примеров фона. Программе нужно понять - какой цвет на кнопке встречается реже всего на скринах. С этого цвета и начинается поиск кнопки на экране. Если такие пиксели находятся - проверяются другие пиксели кнопки смещенные относительно найденных первоначально. Это самый быстрый способ, имхо. Причем проверка идет в том же порядке, в каком работает filling

Автор: Zhorzh 7.7.2011, 23:32

не пашет с поиском уникальных цветов для рисунков в формате png у которых есть прозрачный фон - просто не находит уникальных цветов. сохранил их в bmp - и начало нахдить.

Автор: Zeleax 8.7.2011, 7:03

Цитата(Zhorzh @ 7.7.2011, 23:32) *

не пашет с поиском уникальных цветов для рисунков в формате png у которых есть прозрачный фон - просто не находит уникальных цветов. сохранил их в bmp - и начало нахдить.

Спасибо, а можно подборку этих изображений в личку (ссылку на архив на файлообменнике)?

Автор: WKnight 1.8.2011, 17:04

Цитата(Zeleax @ 2.3.2011, 14:22) *
Кстати, диапазоны цветов - вещь мутная. Не совсем понятно как оно работает в пилоте (и правильно ли)
существующий вариант поиска по диапазонам в условных операторах предложен кем-то по-моему на этом форуме, теоретически должен работать правильно, но подобрать диапазон может быть достаточно сложно.
в этом способе начальный и конечный указанные цвета разбиваются на каналы
ргб, и проверяется принадлежность каждому из полученных канальных диапазонов.

Автор: Zeleax 2.8.2011, 7:32

Цитата(WKnight @ 1.8.2011, 17:04) *

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

Тогда нужно что-то делать с такой проверкой, поскольку она реализована не совсем удачно.
На самом деле нужно проверять интервал для каждого канала RGB, т.е. должна быть не одна пара чисел, а три пары.

Автор: WKnight 2.8.2011, 10:43

так оно так и получается: 2 числа разбиваются на 3 канала, также как и проверяемый цвет, т.е. по сути получается даже 3 пары smile.gif
проверяется принадлежность каждого канала проверяемого цвета диапазону полученному из каналов указанных цветов.

но это в принципе уже не особо актуально.

Автор: Zeleax 2.8.2011, 13:49

Цитата(WKnight @ 2.8.2011, 10:43) *

так оно так и получается: 2 числа разбиваются на 3 канала, также как и проверяемый цвет, т.е. по сути получается даже 3 пары smile.gif
проверяется принадлежность каждого канала проверяемого цвета диапазону полученному из каналов указанных цветов.
но это в принципе уже не особо актуально.

Оппа, а кто об этом знал? )
Значит это нужно в Полезные советы! smile.gif

Автор: WKnight 2.8.2011, 17:19

Цитата
Оппа, а кто об этом знал? )
во времена появления этого способа, знали все присутствующие на тот момент, но поскольку подбор диапазона вещь достаточно сложная, его особо никто не юзал и потому постепенно забыли. тяж небыло придумать тот экселевский файлик преобразования цветов в диапазоны smile.gif

Автор: Zeleax 3.8.2011, 7:29

Цитата(WKnight @ 2.8.2011, 17:19) *

во времена появления этого способа, знали все присутствующие на тот момент, но поскольку подбор диапазона вещь достаточно сложная, его особо никто не юзал и потому постепенно забыли. тяж небыло придумать тот экселевский файлик преобразования цветов в диапазоны smile.gif

smile.gif

Автор: kocmuk 25.9.2011, 11:21

Где скачать новую версию?

Автор: Zeleax 25.9.2011, 16:43

Цитата(kocmuk @ 25.9.2011, 11:21) *

Где скачать новую версию?

в первом посте этой темы (мой официальный сайт накрылся гуглом).

Автор: Zeleax 29.9.2011, 0:22

Урра!!! https://sites.google.com/site/leaxplace/ на гугле снова открыли!!! ))

Автор: DarkMaster 29.9.2011, 3:23

Поздравляю =) Они сами успокоились или допинал?

Автор: Zeleax 29.9.2011, 7:12

Цитата(DarkMaster @ 29.9.2011, 3:23) *

Поздравляю =) Они сами успокоились или допинал?

Спасибо, допинал )

Автор: oleg1488 22.10.2011, 20:36

подскажите пожалуйста как пользоваться кодом, с файнд имейдж - генерейт код ?

Автор: Zeleax 22.10.2011, 20:43

Цитата(oleg1488 @ 22.10.2011, 20:36) *

подскажите пожалуйста как пользоваться кодом, с файнд имейдж - генерейт код ?

Генерация кода была нужна раньше, когда пилот не умел искать картинки.
Теперь в пилоте появилась команда findimage, которая удобнее и универсальнее, чем код сгенерированный в UCS.

А вообще - сначала загружается (-ются) нужные картинки в левый список, потом команда "Start Analyze", потом кликаем на нужной картинке в левом списке (которую искать надо), потом жмем кнопку Find Image - откроется новое окно для генерации кода.
Полученный код вставляется в нужное место скрипта.

Автор: Anwalt 4.11.2012, 23:51

Программка мучает меня уже 2 день, ни как не могу найти подходящий цвет, который бы работал в УО, наверное что то делаю не так, но в инструкции обратил внимание на "проверить изображения скринов - может где-то случайно попался кусочек вашего объекта и из-за этого многие цвета объекта были отброшены в процессе анализа."
Я делал вырезки обьектов, захватывая кусочки фона (как было показанно на скринах). Но по логике получается, что в левом окне обьект + кусочки фона. В правом окошке вырезки.

Может ли это помешать точности определения цвета?

У меня такая проблема, цвет определен с 100 % точностью судя по описанию Freq, но в пилоте все выглядет не так как задуманно, клиент кликает везде, прокручивает скрипт несколько раз в холостую, иногда находит, иногда тыкает в другую сторону...
Поправьте что не правельно...

В самом пилоте также пробывал определять цвет, но это ни чего не изменило

вот мой скрипт

Код

// привязка к окну Стрл+А

set $a 0
while $a < 1
set $a findcolor (173, 16 1309, 673 1 1 12302263 %arr 2)
// радиус поиска задаю нажав в левой верхней части Стрл+А и в нижней правой
end_while
left %arr [1 1], %arr [1 2]
wait 3s


За программку спасибо и респект, впечатлила rolleyes.gif , разобраться только надо dry.gif

Автор: Zeleax 5.11.2012, 0:10

Вы бы дали ссылку на архив всех картинок объекта и скринов без объекта, чтоб проще было разобраться в чём проблема.
Может вы только 1 изображение объекта анализируете? (тогда вероятность всегда равна 100%, что неверно). Так их нужно штук 6-10 или больше.

Автор: Anwalt 5.11.2012, 6:03

Цитата(Zeleax @ 4.11.2012, 22:10) *

Вы бы дали ссылку на архив всех картинок объекта и скринов без объекта, чтоб проще было разобраться в чём проблема.
Может вы только 1 изображение объекта анализируете? (тогда вероятность всегда равна 100%, что неверно). Так их нужно штук 6-10 или больше.


Попробывал сделать все заново, тщательно убирая лишнии детали обьекта с фона, выдало 55,6 %. Применил кодировку цвета в пилоте. Результат» 5 % в нужное место, 60 % в холостую прогон в пилоте, остальные по каким либо не запланированым местам...

Что то делаю не правильно, все прикрепил, можно посмотреть

http://www.fayloobmennik.net/2331311

пароль 1111

прошу прощения, не умею сылки прятать

Автор: Zeleax 5.11.2012, 8:35

Скачал, посмотрел. В принципе, почти всё правильно. Но есть некоторые нюансы:
- точно ли скрины делались _сразу_ в формате png?
- размер олова на скринах слишком отличается. Например, 1 и 4 скрины отличаются от остальных в несколько раз. Что-то здесь не так.
- при вырезке объекта не нужно захватывать лишний фон вокруг него специально. Я просто показывал, что это делать можно, но не нужно к этому стремиться )

Попробуйте эти два цвета для поиска: 3156263 или 6578015(нашел их по поиску Best combination, а потом выбирал разные картинки олова и даблкликал на предложенном в окне отчета цвете). Обычно нужно прокликать несколько верхних цветов при выбранных картинках искомого объекта, чтоб удостовериться, что они там есть (эти точки будут мигать на картинке). Алгоритм в программе нужно еще допиливать, чтоб не предлагал лишнего.

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

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

Скрипт поиска групп точек (находит крайнюю точку)
Код
set linedelay 1 // убираем задержку между строк
set $a findcolor (173, 16 1309, 673 1 1 (3156263) %arr 2) // ищем нужные цвета
set #sz size( %arr )
if #sz = 0 // цвет не найден
   goto not_found
end_if

// !!! в массиве %arr уже должен быть результат поиска команды findcolor !!!
set timer
set #r2 800 // квадрат радиуса захвата
set #last_group 0
for #i 1 #sz
   if %arr[#i 3] = ""
      set #last_group #last_group + 1
      set %arr[#i 3] #last_group
      set %rez[#last_group 1] %arr[#i 1]
      set %rez[#last_group 2] %arr[#i 2]
   end_if
   set #m #i + 1
   set #last_i #i
   for #j #m #sz
      if %arr[#j 3] = ""
         set #r (%arr[#i 1] - %arr[#j 1]) * (%arr[#i 1] - %arr[#j 1]) + (%arr[#i 2] - %arr[#j 2]) * (%arr[#i 2] - %arr[#j 2])
         if #r <= #r2
            set %arr[#j 3] #last_group
            set #p #j - 1
            if #p =  #last_i
               set #last_i #j
            end_if
         end_if
      end_if
   end_for // j
   set #i #last_i
end_for // i
msg Обнаружено #last_group групп состоящих из #sz точек. Потрачено времени - timer мс.
//save_array %arr d:\Install\UOPilot\arr2.txt
for #i 1 #last_group
   msg %rez[#i 1], %rez[#i 2]  
end_for
:not_found

// другие команды...
end_script

Автор: Anwalt 5.11.2012, 14:43

- да, скрины были сделаны сразу в npg формате, программой ScreenShot.

- обьект 4, 1 не измененного размера, остальные я увеличивал, эксперементировал, мне казалось что они маленькие. Хотя до этого делал все одинаковые.

- понял, буду стараться как можно меньше захватывать лишнего smile.gif

цвета потэстил второй подходит больше, но проблемку не решил, без контроля оставлять опасно))

я тут что подумал, а не лучше ли в моем случае пользоваться findimage?
И на сколько тщятельно нужно вырезать обьект?
Можно ли воспользоваться функцией Find image в UCS?

Благадарствую за скрипт, буду разбераться, для меня он еще сложноватый, не все команды известны, что бы проследить логику, пилот просто прогоняет его меньше чем за секунду и останавливает скрипт, больше в принципе ни чего не происходит, квадрат поиска увеличил, сижу размышляю куда вставить лефт и под какие координаты, хочется дать независимость персу для ремесла biggrin.gif

Автор: Zeleax 5.11.2012, 15:18

Если картинки строго одинаковые, то вполне подходит пилотовский findimage.

Для анализа в UCS картинки тщательно вырезать не нужно, можно захватывать немного фона вокруг объекта- это вообще без проблем, но специально увлекаться лишним фоном - излишне.
Главное, чтобы части объекта на фоне не остались.
Картинки перед анализом нельзя обрабатывать (увеличивать/уменьшать)- они должны быть точно такие как на экране, иначе будет неверный результат.
findimage лучше использовать пилотовский (в каком случае - уже написал выше).

Автор: veiron 8.2.2013, 10:12

В игре есть мобы, которые вроде и стоят на месте, но постоянно ворочаются влево вправо, попробовал их отлавливать Фимеджем, не получается из за того что он ворочается и картинка все время разная, Фколор то же самое, как их можно отлавливать пилотом . Сами мобы стоят на одном месте, но из за того что перс ходит по полю, координаты постоянно меняются.

Автор: artem04321 8.2.2013, 11:06

Цитата(veiron @ 8.2.2013, 11:12) *

В игре есть мобы, которые вроде и стоят на месте, но постоянно ворочаются влево вправо, попробовал их отлавливать Фимеджем, не получается из за того что он ворочается и картинка все время разная, Фколор то же самое, как их можно отлавливать пилотом . Сами мобы стоят на одном месте, но из за того что перс ходит по полю, координаты постоянно меняются.

а картинки выложить...

Автор: veiron 8.2.2013, 12:23

Цитата(artem04321 @ 8.2.2013, 12:06) *

а картинки выложить...

Вот картинка
Изображение

Автор: artem04321 8.2.2013, 13:08

Цитата(veiron @ 8.2.2013, 13:23) *

Вот картинка
Изображение

а какая игра?

Автор: veiron 8.2.2013, 13:10

Цитата(artem04321 @ 8.2.2013, 14:08) *

а какая игра?

Не знаю можно ли тут давать ссылки с игрой. Выкладываю ссылку, если нельзя модераторы удалите тогда ее.
http://tmgame.ru

Автор: zavas 8.2.2013, 14:02

А можно скрин поля с картинкой и персом

Автор: veiron 8.2.2013, 14:06

Цитата(-AL- @ 8.2.2013, 14:58) *

попробуй точность картинки поставить = 30%, вариацию цвета = 6...12 , больше 12 уже осторожно

Попробую. 50% я пробовал, и 5 вариацию цвета делал, Фимедж пытается найти,раз 50 - 60 цикл прогонит 1 раз может найти, а может и не найти, нет постоянного нахождения.

Цитата(zavas @ 8.2.2013, 15:02) *

А можно скрин поля с картинкой и персом

Изображение

Автор: veiron 8.2.2013, 17:00

Цитата(DarkMaster @ 8.2.2013, 16:56) *

вам сюда https://forum.uokit.com/index.php?showtopic=20545
специальный анализатор скриншотов под дальнейшее использование в финдколоре.

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

Автор: Zeleax 8.2.2013, 20:17

Если цвета присутствуют и в других мобах и проходящих рядом персах, значит нужно картинки лишних мобов и персов добавлять туда же, куда и фон - в правый список для игнора лишних цветов.

Можете- выложите сюда подготовленные скрины в архиве в разных папках (искомые объекты, "фон") - чтоб было видно где что анализируется

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

Автор: veiron 8.2.2013, 21:01

Цитата(Zeleax @ 8.2.2013, 21:17) *

Можете- выложите сюда подготовленные скрины в архиве в разных папках (искомые объекты, "фон") - чтоб было видно где что анализируется

Вот скрины которые анализировал. В игре нашел неподвижную точку. мобы постоянно стоят на одном месте. от этой точки путем смещения смотрел есть моб или нет. И что получилось, точку нахожу,смотрю моб ЕСТЬ, нажимаю в этих координатах лефт, он почему то не всегда срабатывает, и перс просто стоит на месте. или если лефт сработал, и перс туда пошел, то пилот может отправить его еще куда нибуд, ведь цикл продолжается, хотя не пойму почему так, ведь есть неподвижная точка А от нее на постоянном расстоянии находится неподвижная точка В, тогда почему пилот отправляет перса не туда понять не могу.

Автор: Zeleax 8.2.2013, 21:11

искомые нужно хоть как-то обводить по контуру, а не кидать целый кусок экрана. Фона нужно больше. И картинок вообще больше нужно, если хотите результат нормальный получить.

Автор: veiron 8.2.2013, 21:19

Цитата(Zeleax @ 8.2.2013, 22:11) *

искомые нужно хоть как-то обводить по контуру, а не кидать целый кусок экрана. Фона нужно больше. И картинок вообще больше нужно, если хотите результат нормальный получить.

То есть мне нужно в качестве фона взять весь экран с игрой так что ли ? Я в паинте обводил, картинку увеличил и старался как можно ближе к мобу обвести, ведь написано в проге, что лучше кусок фона захватить, а не картинки.

Автор: Zeleax 8.2.2013, 21:27

в качестве фона - вся область, в которой могут находиться мобы (в менюшках же их искать не будете?). Из фона вырезать всех искомых мобов, обведя их с _небольшим_ запасом наружу.

Каждый искомый моб должен быть на отдельной картинке.

Автор: veiron 8.2.2013, 21:36

Цитата(Zeleax @ 8.2.2013, 22:27) *

в качестве фона - вся область, в которой могут находиться мобы (в менюшках же их искать не будете?). Из фона вырезать всех искомых мобов, обведя их с _небольшим_ запасом наружу.

Каждый искомый моб должен быть на отдельной картинке.


То есть, я должен сделать скрин всей области, вырезать всех мобов. у меня 4 моба, я их должен вырезать и сохранить как отдельные скрины и потом сравнивать фон с этими 4 скринами отдельных мобов ? Вроде к проге написано: фон с мобами и фон без мобов, это и сравнивается.

Автор: Zeleax 8.2.2013, 21:39

Цитата
То есть, я должен сделать скрин всей области, вырезать всех мобов. у меня 4 моба, я их должен вырезать и сохранить как отдельные скрины и потом сравнивать фон с этими 4 скринами отдельных мобов ?

Совершенно верно. И желательно сделать несколько разных скринов игры, чтоб накопилось 5-7 больших скринов фона без искомых мобов и около 10-15 скринов искомых мобов.

Автор: Zeleax 9.2.2013, 10:24

Вообще, если мобы не двигаются или всегда выглядят строго одинаково, то действительно проще findimage использовать и не подбирать уникальные цвета для findcolor.

Автор: veiron 9.2.2013, 11:51

Цитата(Zeleax @ 9.2.2013, 11:24) *

Вообще, если мобы не двигаются или всегда выглядят строго одинаково, то действительно проще findimage использовать и не подбирать уникальные цвета для findcolor.

В том и проблема, что двигаются. Наскринил 10 фонов и 10 мобов, тока результат получился хуже, чем делал первый раз с 4

Автор: Zeleax 9.2.2013, 11:59

могу архив глянуть - давайте картинки

Автор: veiron 9.2.2013, 12:47

Цитата(Zeleax @ 9.2.2013, 12:59) *

могу архив глянуть - давайте картинки

Вот архивы по которым делал. Загрузились тока мобы, фон не пускает сайт, там более 6 мб. Кстати когда вчера прогой искал цвет, комп сильно нагружало, я первый раз услышал шум кулера, 50% съело процесса и 8 гб оперативы. На более мощный комп не стал переходить, если бы на 100% загрузило тогда перешел бы.

Автор: Zeleax 9.2.2013, 12:52

Цитата(veiron @ 9.2.2013, 13:47) *

Вот архивы по которым делал. Загрузились тока мобы, фон не пускает сайт, там более 6 мб. Кстати когда вчера прогой искал цвет, комп сильно нагружало, я первый раз услышал шум кулера, 50% съело процесса и 8 гб оперативы. На более мощный комп не стал переходить, если бы на 100% загрузило тогда перешел бы.

Так надо было на файлообменник закинуть, а сюда только ссылку

Автор: veiron 9.2.2013, 12:55

Цитата(Zeleax @ 9.2.2013, 13:52) *

Так надо было на файлообменник закинуть, а сюда только ссылку

http://www.fayloobmennik.net/2586511

Автор: Zeleax 9.2.2013, 13:10

Цитата

Best combination for 2 colors: Frequency= 100,0%. Duplication = 1,50
HEX Dens Freq Dec
color % % color

E2E7E8 0,004 75,0 15263714
AEB5B8 0,004 75,0 12105134

Total 4440 colors are listed below:

HEX Dens Freq Dec
color % % color

E2E7E8 0,004 75,0 15263714
AEB5B8 0,004 75,0 12105134
D4D7D7 0,004 62,5 14145492
D2D2D2 0,004 62,5 13816530
F7FFF9 0,004 62,5 16383991
070503 0,004 62,5 197895
F9FFFF 0,004 62,5 16777209
6E7075 0,004 62,5 7696494
AFB3B7 0,004 50,0 12039087

Попробуйте в findcolor использовать верхние 2 цвета одновременно (или больше).
12105134 и 15263714
Правда, может быть проблемой, что они находятся чаще всего на руках мобов.

А если на моба навести мышку - появляется какая-нибудь картинка (полоска жизни и т.п.)?

Автор: veiron 9.2.2013, 13:19

Цитата(Zeleax @ 9.2.2013, 14:10) *

А если на моба навести мышку - появляется какая-нибудь картинка (полоска жизни и т.п.)?

Да если навести на ноги моба, появляются скрещенные мечи, только если рядом кто то будет сражаться там тоже такие мечи будут. то есть когда сражаешься с мобом, на том месте где был моб остаются скрещенные мечи и ты видишь что там идет бой.

Автор: Zeleax 9.2.2013, 13:21

А при наведении мышки на правую руку моба мечи появляются?

Автор: veiron 9.2.2013, 13:22

Цитата(Zeleax @ 9.2.2013, 14:21) *

А при наведении мышки на правую руку моба мечи появляются, или куда надо наводить?

Только на ноги, тогда появятся мечи, на руку если кликать, то перс просто станет сзади моба.

я пробовал фколор делать с 2 цветами, тогда он у меня вообще ни чего не определяет. делал так:
Код
set #b findcolor ( 339 501 341 631 1 1 12105134 15263714  %close 2 )

Автор: Zeleax 9.2.2013, 13:24

Предлагаю реализовать такой алгоритм:
- находим все точки нужного цвета (findcolor)
- вокруг каждой найденной точки "водим" мышкой по небольшому прямоугольнику вокруг точки
-- если мышка попала на ноги моба, то должны появиться мечи - их ищем с помощью findimage
--- если появились мечи - кликаем на мобе (относительно картинки с мечами)

Правильно искать несколько цветов так:

Код
set #b findcolor ( 339 501 341 631 1 1 (12105134, 15263714)  %close 2 )


а почему поле поиска такое маленькое?

Автор: veiron 9.2.2013, 13:38

Цитата(Zeleax @ 9.2.2013, 14:24) *

а почему поле поиска такое маленькое?


Это образец был, область поиска у меня 86, 46 на 863, 370

Цитата(Zeleax @ 9.2.2013, 14:24) *

Предлагаю реализовать такой алгоритм:
- находим все точки нужного цвета (findcolor)
- вокруг каждой найденной точки "водим" мышкой по небольшому прямоугольнику вокруг точки
-- если мышка попала на ноги моба, то должны появиться мечи - их ищем с помощью findimage
--- если появились мечи - кликаем на мобе (относительно картинки с мечами)


А может можно просто сделать смещение от руки моба к ногам, там может быть на поле и 3 меча от боев других персов с мобами.
Вот скрин скока там мечей, да и финимедж не очень хочет работать, я пробавал постоянные объекты скринить. Вообще, что то странное происходит в игре, если финдколор поймал в массив нужный цвет, и записал координаты найденной точки с цветом, делаю left #x #y , так вот этот лефт может сработать с 1 раза, может с 3. почемуто клик не постоянен, логом все определяется координаты в массив записываются, а клик не происходит, kleft не помогает.
Изображение

Автор: Zeleax 9.2.2013, 13:47

Цитата
А может можно просто сделать смещение от руки моба к ногам, там может быть на поле и 3 меча от боев других персов с мобами.
Вот скрин скока там мечей, да и финимедж не очень хочет работать, я пробавал постоянные объекты скринить. Вообще, что то странное происходит в игре, если финдколор поймал в массив нужный цвет, и записал координаты найденной точки с цветом, делаю left #x #y , так вот этот лефт может сработать с 1 раза, может с 3. почемуто клик не постоянен, логом все определяется координаты в массив записываются, а клик не происходит, kleft не помогает.

Сначала пробуйте как проще, усложнить потом всегда можно.
Я предлаю искать мечи не на всем поле, а только в маленьком прямоугольнике ниже найденной точки.

В настройках гляньте чтоб было включено "Перемещать курсор в точку клика", и выключено - "Возвращать курсор после кликов"

Автор: veiron 9.2.2013, 16:04

Цитата(Zeleax @ 9.2.2013, 14:47) *

Сначала пробуйте как проще, усложнить потом всегда можно.
Я предлаю искать мечи не на всем поле, а только в маленьком прямоугольнике ниже найденной точки.

В настройках гляньте чтоб было включено "Перемещать курсор в точку клика", и выключено - "Возвращать курсор после кликов"

Помогло с кликами после включения "Перемещать курсор в точку клика". Правда все равно бывают пропуски нажатия. Просто появляются мечи при наведении, а сам клик не происходит. Если искать по двум цветам, тогда получается плохо, если нет на поле не одного нужного моба, то пилот все равно находит цвет на поле и кликает. С цветом 15263714 попроще, он находит мобов при помощи смещения удается кликнуть, но что интересно, вроде и находит на нужных мобах, но иногда все равно находит этот цвет на не нужных мобах, хорошо они слабые.
Теперь о программе:
1. Хорошо бы сделать, когда добавляешь картинки, что бы запоминала прога из какой папки берешь, а то заново каждый раз не удобно искать нужную папку.

2. Взял 1 изображение фона и нажал кнопку Find Image, в открытом окне нажал кнопку Rebuild points и прого намертво повисла. Пришлось убивать диспетчером задач. Сделал еще 2 попытки и ситуация таже, прога намертво зависает.

Теперь вопрос по нахождению:
Взял картинки фона и мобов те что выложил на сайте по вашей просьбе. 3 раза прогонял их прогой и у меня выходит:
Код
100C08 0,005 100,0  527376


тогда ВОПРОС как у Вас могло получится это:
Код
E2E7E8     0,004     75,0    15263714
AEB5B8     0,004     75,0    12105134


И можно как то в проге копировать полученные цвета, а не переписывать вручную?

Автор: Zeleax 9.2.2013, 21:52

1. Вряд ли ) Хотя подумаю
2. Не жмите кнопку "Find Image", она нужна была, пока в пилоте не сделали команду findimage. Тем более, что она изначально использовалась на изображении моба. Прога не виснет, а долго и сильно думает )

Цитата
Взял картинки фона и мобов те что выложил на сайте по вашей просьбе. 3 раза прогонял их прогой и у меня выходит:

тогда ВОПРОС как у Вас могло получится

3. Папку с картинками мобов перетащил из Проводника в левый список, папку с картинками фонов (без мобов) - в правый, нажал "Start Analyze" - и получилось.(см.Картинку. Если б имена файлов мобов и фонов были разные - было бы ещё нагляднее)
Цитата
Если искать по двум цветам, тогда получается плохо, если нет на поле не одного нужного моба, то пилот все равно находит цвет на поле и кликает.

А это не ошибка программы- это значит, что цвета не было на картинках фонов при анализе, но он был в картинках мобов. Поэтому при анализе он к мобам и попал. Чем больше правильных картинок для анализа - тем точнее результат.


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: veiron 9.2.2013, 22:13

Цитата(Zeleax @ 9.2.2013, 22:52) *

1. Вряд ли ) Хотя подумаю
2. Не жмите кнопку "Find Image", она нужна была, пока в пилоте не сделали команду findimage. Тем более, что она изначально использовалась на изображении моба.

3. Папку с картинками мобов перетащил в левый список, папку с картинками фонов (без мобов) - в правый - нажал "Start Analyze" - и получилось.(см.Картинку. Если б имена файлов мобов и фонов были разные - было бы ещё нагляднее)

А это не ошибка программы- это значит, что цвета не было на картинках фонов при анализе, но он был в картинках мобов. Поэтому при анализе он к мобам и попал. Чем больше картнок для анализа - тем точнее результат.

Я разобрался как быстро перетаскивать скрины в прогу. Спасибо за(см Картинку), я просто не так делал, мобов я кидал в правую колонку, а фон в левую. Нажал кнопку Find Diapason получил:
Код
Found best Diapason (7 colors) of hexRGB-colors:
Freq = 87,5%, Dupl = 1,63
hexRGB: BFC2C1 - BFC4C5 , dec: 12698303 - 12960959

Best combination for 2 colors: Frequency= 100,0%. Duplication = 1,50
HEX    Dens    Freq    Dec
color    %    %    color

E2E7E8      0,004      75,0    15263714
AEB5B8      0,004      75,0    12105134


Что за цвет dec: 12698303 - 12960959 , я так понимаю должно стать типо : 12105134 - 15263714 то есть от и до по само лучшему цвету который нашла прога, а тут получается другое значение почему то .

Автор: Zeleax 9.2.2013, 22:19

Поиск диапазонов была экспериментальной функцией...
В пилоте лучше использовать "оптимальную комбинацию" цветов - Best combination:
15263714, 12105134

Переписывать руками значения цветов не нужно - выделили мышкой нужный текст в окошке отчёта, нажали Ctrl+C - скопировали в буфер. Потом нажали Ctrl+V - вставили куда нужно. (как вы уже сами поняли)

Автор: veiron 9.2.2013, 22:22

Цитата(Zeleax @ 9.2.2013, 23:19) *

Переписывать руками значения цветов не нужно - выделили мышкой нужный текст в окошке, нажали Ctrl+C - скопировали в буфер. Потом нажали Ctrl+V - вставили куда нужно.

Спасибо. Полезная програмулина.

Автор: Andros 3.7.2013, 20:59

Классная программа - порадовала. Я просто сделал скрин всего окна, а потом вырезал из него нужный объект, прихватив немного фона.

Автор: affdey 3.2.2016, 16:48

Огромное спасибо автору! Программа просто шикарная.
Бился над написанием одного скрипта почти неделю, основная проблема была как раз в подборе нужных цветов.
В результате при помощи UniqueColorsSearch2 все проблемы решились буквально за пару часов, скрип заработал как часики без сбоев.

Автор: Sectop 23.9.2016, 18:02

Всем привет! Помогите кто может с командой Findcolor. Написал примитивного мини бота, всё брал из видео которых всего лишь в интернете 3-4 штуки.


Как мне можно сделать чтобы эта команда нажимала мышкой на определённый класс мобов.

К этому Мобы двигаются, не выделяются при нажатии клавиш (как это делается в Перфект ворлд) Тут нужно каждого моба нажать мышкой. Потом только на определённые клавишы (скилы начинает его бить)

Вот что я написал.


1 лист. (Тут мой персонаж атакует)

send F1 (Супер удар волшебника)
wait 200 + random (100)
send B (Кнопка на которую он будет поднимать падающий лут)
send B (Кнопка на которую он будет поднимать падающий лут)


2. Лист (Тут персонаж будет себя лечить если в определённом участке нет того цвета что нужен)

if_not 243, 49 50735
send F10
wait 100
end_if

3. Лист (Это места на локации по которым персонаж будет бегать, а агро мобы будут на него нападать)

/// ПЕРЕХОД /// 1

send N (Это кнопка на ноторую персонаж будет нажимать, что бы включить карту и выбрать место куда он будет бежать)
left 182, 937
left 141, 415
wait 200
send N (Нажав второй раз на кнопку карта отключается и персонаж начинает бежать, в указанное ему место)
wait 10000

/// ПЕРЕХОД /// 2

send N
left 182, 937
left 167, 364
wait 200
send N
wait 10000

Помогите решить эту проблему, мне нужно что бы персонаж нападал на нужного мне моба, а не только агро мобы нападали на моего персонажа, так сложнее качатся и дольше, не могу так начать качать своего перса, с самого 1 ЛВ.


http://i7.5cm.ru/i/nx0D.png

Вот ещё: http://i7.5cm.ru/i/eOKV.png

Хочу к примеру что бы программа находила эту кнопку по картине, но выдаёт вот такие ошибки, Нашёл в интернете по видео.

Автор: dunkel 22.1.2017, 19:10

Отличная программа. Большое спасибо автору за его труд! tongue.gif

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)