Программа 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
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 килобайт )
Кол-во скачиваний: 23857
ну а как она связана с пилотом ???
точнее как рисунок связать со скриптом
а так штука нужная)))
И все же не до конца понятно что делать с найденными различиями... Руками в пилот? Может хоть тхт под массив генерить? Так же возможна связь через буфер обмена. Насколько быстро происходит обработка? Если все происходит достаточно быстро нет ли у тебя желания сделать обработку на лету без скриншотов, заменив по факту финд колор?
Посидел подумал как будет лучше реализовать. Во 1 хотелось бы чтобы работал не только с отдельными файлами, но и с папками для того, чтобы сравнивать сразу несколько скриншотов. Разные ракурсы могут дать разные результаты. Так же очень бы хотелось счетчик совпадений. Т.е. взяли мы моба, нашли уникальные цвета, но зачмем нам перебирать тот цвет который встречается 1 раз, если есть тот который бывает 100 раз. Файлик очень простой:
x y количество_совпадений
разделитель табуляция. Как наверное сам уже догадался, не помешает сортировка от большего к меньшему по количеству совпадений.
Правильно цвет. Я очепятался чуток.
Цвет в десятичном инвертированном (в пилотном). Можно добавить еще обычный шестнадцатиричный, чтобы можно было понять что было найдено, но это не критично.
По поводу findcolor...
Может ли он искать сразу несколько цветов хранящихся в массиве ну или хотя бы несколько цветов, например, взятых в круглые скобки и записанных через запятую?
Я сейчас делаю полную переработку программы поиска уникальных цветов (точнее пишу с нуля =) и эта возможность findcolor в скором будущем была бы очень кстати...
нет. в текущей версии не может.
Ну тогда было бы здорово реализовать такую возможность findcolor.
Кроме того, добавить возможность поиска внутри диапазона цветов ограниченного нижним и верхним значенями. Возможно даже лучше начать с поиска внутри диапазона- сравнение всего с 2-мя значениями на проверку
set #hBmp loadbitmap <относительный_путь к файлу>
set #result findimage #hBmp
set #hBmp loadbitmap <относительный_путь к файлу> [b]<%_совпадения>[/b]
set #result findimage #hBmp
Да, чет я сегодня устал после вчера ))
Перемкнуло, и не только по этому вопросу...
Сделал новую версию программы UniqueColorsSearch2 (лежит на https://sites.google.com/site/leaxplace в разделе Downloads).
Для работы программы нужно скачать и установить библиотеку .NET Framework 3.5 (все ссылки есть на сайте).
Описание её работы есть пока только в архиве с программой - на сайте еще не успел.
Программа сыровата в интерфейсе, но уже полностью работает. Буду еще дорабатывать интерфейс и улучшать алгоритм.
Скачаете, оцените - отпишитесь плиз, советы и мнения не помешают
Если кратко - теперь она может обрабатывать кучу изображений и давать расширенную статистику для выбора нужных цветов. Сама тоже может цвета подбирать
Немного обновил версию программы на сайте (раздел Downloads), чтоб не вылетала с ошибкой при преждевременном запуске глубокого анализа.
Также на сайте дал прямую ссылку на пакет Microsoft .NET Framework 3.5 SP1 потому как с 4-й версией пакета программа работать почему-то не желает (я тихо балдею от совместимости между разными версиями своих же продуктов Microsoft)
Внёс в программу значительные улучшения:
1) изменения в интерфейсе;
2) фоновый анализ скринов (при подборе комбинации цветов- фоновый пока не использовал- не было необходимости);
3) статистика прямо в поле отчета;
4) поиск оптимальной комбинации цветов с перебором всех возможных вариантов;
5) подсветка пикcелей одного из выбранных цветов на изображениях объектов (при двойном клике на коде цвета в поле отчета).
Теперь подбирать нужный цвет для поиска мобов - одно удовольствие!
Новая версия 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/ описаны её основные возможности и порядок работы.
Мне вот интересно - я только для себя эту прогу написал или люди ей тоже пользуются?
Просто никаких вопросов ни по работе, ни по глюкам, ни пожеланий....
Хоть до конца понятно для чего Unique Colors Search нужна и когда ей удобно пользоваться?
ну я себе ее в папочку к пилоту пристроил сразу =) даже потестил. но я давненько уже не бегал, там, где ее можно использовать. прога полезная однозначно - пару лет назад была бы основным инструментом.
Drag&Drop бы не помешал =)
скриншоты в список из папки перекидывать. ну и папки перетаскивать.
UniqueColorsSearch 2.1.5
1) улучшен алгоритм работы интерфейса программы
2) поиск оптимального диапазона цветов не тормозит программу (переведен в фоновый режим)
Всё, пока остановился, так как вроде улучшать особо нечего
Буду ждать замечаний и пожеланий
Скачать программу можно https://sites.google.com/site/leaxplace/
Начал искать цвета, но что-то я не понял функции "Find Combination". Можете объяснить подробнее что она делает? У меня не зависимо от числа, что я ставлю в окошке, всегда выдаёт одно значение цвета, причём самое первое.
Если задать число больше, чем найдено цветов, выскакивает ошибка
"Индекс находился вне границ массива."
Если надо, могу выложить скрин сообщения ошибки и папку с проверяемыми картинками (вся папка весит 56кб).
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
Скрин проги и ошибки положил в папку.
color.rar ( 162,34 килобайт )
Кол-во скачиваний: 1801
Единственный подходящий для вас цвет, относящийся к стрелке - 8481633:
616B81 0,084 100,0 8481633
все остальные относятся к фону.
Увидеть легко - достаточно сделать двойной клик на этой строчке отчета, когда активна картинка l2.bmp
Программу буду поправлять =)
В данном случае все цвета появляются с вероятностью 100% (что естественно, т.к. есть только один объект для поиска - l2.bmp). Поэтому второй цвет и не предлагается (в Find Combination).
Интересно, а какая была цель поиска в данном случае? т.к. l2 и l3 почти идентичны.
Кроме того, обычно слева указывается несколько объектов для поиска, между которыми нужно найти что-то общее. А у вас 1 (l2.bmp)
Спасибо за помощь и советы, учту на будущее. Но благодаря FastStone Capture решил свою проблемму другим образом, более экономичным. Подробнее свои результаты описал в теме "Поиск Цвета По Слоям".
Но Unique Colors Search мне понравилась, буду пользоваться.
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 сглаживание экранных шрифтов, а только потом делайте скрины экрана, текста, анализ в программе, поиск пилотом и т.п.
Если ищете просто картинку без текста - сглаживание шрифтов отключать не надо
Ребят здравствуйте, помогите мне в 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 в этом время тыкает абсолютно в другую область!
Кроме того пилот часто жалуется на неправильность скрипта, хотя все правильно. После перезапуска снова работает некоторое время.
Эскизы прикрепленных изображений
Прикрепленные изображения
Нужно сделать несколько картинок только той области экрана, где происходит поиск (весь экран - нет смысла). Там где есть сундук и несколько там где его нет, но перс там бегает (чем больше тем лучше, в обоих случаях штук по 6-12, я себе вообще по 20шт делал). Из скринов с сундуками повырезать сундуки (оставить только белый фон вместо них), а эти сундуки сохранить в отдельные файлы (в отдельную папку для удобства). Потом в UCS загрузить все файлы с сундами в левый список, а все файлы без сундов (в т.ч. с вырезанными) в правый.
Потом анализ...
Картинки фона без сундов программе как раз и нужны, чтоб пилот не кликал где попало, а только по сундам (чтобы знать - где не кликать =).
Если что-то не получается - все подготовленные картинки пакуй в архив и выкладывай на файлообменник, чтоб скачать проверить можно было.
З.Ы.: функция поиска целых изображений полезна в случаях, когда объект на экране всегда выглядит одинаково (с точностью до пикселя) и только в том случае, если для него не удается найти уникальные цвета. Всё же лучше искать по 1-2 уникальным цветам (если они есть) - намного быстрее будет.
И версию пилота обнови, уже есть 2.18.8
Кстати, диапазоны цветов - вещь мутная. Не совсем понятно как оно работает в пилоте (и правильно ли)
Обновил ток что. И отредактировал. Проблема еще и в том что сундуки всегда подсвечиваются желтыми огоньками, которые очень динамично изменяются, поиск картинки тут ничего не даст, верно?
не факт, нужно попробовать. Уникальные цвета для поиска могут быть подобраны. (тогда сундов побольше надо).
У меня в игре мобы вообще разноцветные и крутятся - а цвета подходящие нашлись )
Сорь, сразу не так понял вопрос =)
Действительно, поиск целой картинки в твоём случае точно не даст ничего. Нужно искать по подобранным уникальным цветам
Забил на поиски картинки. Вторые сутки мучаю 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 ячейки?
%arr -название массива
2 - метод поиска (еще может быть 1)
Потестил генерацию кода поиска картинки. Несколько моментов честно говоря ввели в ступор и я подумал, что пациент мертв.
1) Почему для генерации условия необходимо сначала с чем то сравнить картинку для нахождения уникальных цветов?
Ну ладно допер сравнить с пустотой, сравнил активировалась кнопка.
2) Нажал Find Image, появилась картинка. Зачем? Тут я вообще не понял зачем мне ее показали и дали одну кнопку "преобразовать"... Я так понял, что на этом этапе задумывалась возможность выбора области генерации. Собственно или штаны наденьте или крестик снимите)) Или сразу преобразовывать либо дать возможность выбора области(еще бы и с лупой).
3) Началось преобразование. Признаюсь честно засунул полноценный скриншот, естественно не для того предназначено. Программа повисла основательно - пришлось закрыть диспетчером задач(закрылась с ошибкой). Попытался еще раз, решил подождать и дать подольше поработать. Вспомнил минут через 40 - справилась).
4) Здесь я был приятно поражен - filling просто потрясает. Алгоритм шикарен.
В целом за счет филлига остался пораженным и в некотором недоумении из-за проблем доступа к анализу и какой-то нелогичности кнопочек.
Пожелания:
1) Активность кнопки "Find Image" независимо от предварительного сравнения.
2) Выбор области для анализа.
3) Лупа при выборе.
4) Полосы прокрутки при просмотре рисунка.
5) Белый фон у рисунка, когда крутишь filling.
6) Лупа при прокрутки filling.
7) Возможность вставки изображения из буфера.
8) Предупреждение о слишком большой области поиска либо полоска прогресса, а то все колом встает.
1) Предварительное сравнение за частую смысла вообще не имеет. Пара простых примеров - сесть на трейд. Надо найти в инвентаре рисунок, он не прозрачный, прямоугольный.
Пример второй - была необходимость просканировать панельки скилов и занести в массив где и что находится. Скилы все так же не прозрачны и статичны.
вырезать то я и в паинте вырежу, поэтому и предложил передачу картинки из буфера минуя сохранение(вырезал, перекинул). А вот когда филинг крутишь, то тут уже надо присматриваться к мелким деталям и лупа точно не помешала бы. еще и серый цвет затрудняет имхо просмотр. Либо просто растягивать как в превью в основном окне, вот только не будет ли искажений по количеству пикселей?
Попробую пояснить для чего нужно сравнение со скринами.
Есть такой скриншот (см.прикрепленный файл). На нем нужно искать черную кнопку с 3 белыми кружками. Мой алгоритм начинает искать не с левого верхнего угла кнопки, а с самого редкого цвета. Для кнопки это белый цвет... А вот для скрина - этого белого цвета полно! Представь сколько будет холостых проверок, пока алгоритм доберется до пикселей кнопки перебирая на всём экране пиксели белого цвета слева-направо и сверху-вниз! Поэтому и делается анализ изображения кнопки и анализ изображения скрина фона чтобы понять, что искать начинать надо с чёрного цвета (как самого редкого), а не с белого.
Насчет буфера - можно сделать.
Скилы лучше искать по уникальным цветам (если такие для них обнаружены с помощью UCS).
Это гораздо быстрее, чем целую картинку сравнивать.
Можно сделать выбор цвета фона на генерируемой картинке (сделать белый по умолчанию).
Растянуть маленькую картинку можно. искажение по пикселям будет только на экране. В поисковый скрипт всё пойдёт как надо. Опять же у меня FastStone Capture с лупой - настольный инструмент )
Эскизы прикрепленных изображений
так учитывая, что область поиска выбрать все равно нельзя, зачем пихать кучу белого или любого другого фона? все равно вырезать кнопку придется... или я что-то не понял...
не пашет с поиском уникальных цветов для рисунков в формате png у которых есть прозрачный фон - просто не находит уникальных цветов. сохранил их в bmp - и начало нахдить.
так оно так и получается: 2 числа разбиваются на 3 канала, также как и проверяемый цвет, т.е. по сути получается даже 3 пары
проверяется принадлежность каждого канала проверяемого цвета диапазону полученному из каналов указанных цветов.
но это в принципе уже не особо актуально.
Где скачать новую версию?
Урра!!! https://sites.google.com/site/leaxplace/ на гугле снова открыли!!! ))
Поздравляю =) Они сами успокоились или допинал?
подскажите пожалуйста как пользоваться кодом, с файнд имейдж - генерейт код ?
Программка мучает меня уже 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
Вы бы дали ссылку на архив всех картинок объекта и скринов без объекта, чтоб проще было разобраться в чём проблема.
Может вы только 1 изображение объекта анализируете? (тогда вероятность всегда равна 100%, что неверно). Так их нужно штук 6-10 или больше.
Скачал, посмотрел. В принципе, почти всё правильно. Но есть некоторые нюансы:
- точно ли скрины делались _сразу_ в формате 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
- да, скрины были сделаны сразу в npg формате, программой ScreenShot.
- обьект 4, 1 не измененного размера, остальные я увеличивал, эксперементировал, мне казалось что они маленькие. Хотя до этого делал все одинаковые.
- понял, буду стараться как можно меньше захватывать лишнего
цвета потэстил второй подходит больше, но проблемку не решил, без контроля оставлять опасно))
я тут что подумал, а не лучше ли в моем случае пользоваться findimage?
И на сколько тщятельно нужно вырезать обьект?
Можно ли воспользоваться функцией Find image в UCS?
Благадарствую за скрипт, буду разбераться, для меня он еще сложноватый, не все команды известны, что бы проследить логику, пилот просто прогоняет его меньше чем за секунду и останавливает скрипт, больше в принципе ни чего не происходит, квадрат поиска увеличил, сижу размышляю куда вставить лефт и под какие координаты, хочется дать независимость персу для ремесла
Если картинки строго одинаковые, то вполне подходит пилотовский findimage.
Для анализа в UCS картинки тщательно вырезать не нужно, можно захватывать немного фона вокруг объекта- это вообще без проблем, но специально увлекаться лишним фоном - излишне.
Главное, чтобы части объекта на фоне не остались.
Картинки перед анализом нельзя обрабатывать (увеличивать/уменьшать)- они должны быть точно такие как на экране, иначе будет неверный результат.
findimage лучше использовать пилотовский (в каком случае - уже написал выше).
В игре есть мобы, которые вроде и стоят на месте, но постоянно ворочаются влево вправо, попробовал их отлавливать Фимеджем, не получается из за того что он ворочается и картинка все время разная, Фколор то же самое, как их можно отлавливать пилотом . Сами мобы стоят на одном месте, но из за того что перс ходит по полю, координаты постоянно меняются.
А можно скрин поля с картинкой и персом
Если цвета присутствуют и в других мобах и проходящих рядом персах, значит нужно картинки лишних мобов и персов добавлять туда же, куда и фон - в правый список для игнора лишних цветов.
Можете- выложите сюда подготовленные скрины в архиве в разных папках (искомые объекты, "фон") - чтоб было видно где что анализируется
В одной игре получалось обнаружить моба, только если на него навести мышку - тогда над мобом появлялась полоска жизни. Поэтому в скрипте водил мышкой с большой скоростью вокруг перса и после каждого перемещения искал цвет полоски жизни )
искомые нужно хоть как-то обводить по контуру, а не кидать целый кусок экрана. Фона нужно больше. И картинок вообще больше нужно, если хотите результат нормальный получить.
в качестве фона - вся область, в которой могут находиться мобы (в менюшках же их искать не будете?). Из фона вырезать всех искомых мобов, обведя их с _небольшим_ запасом наружу.
Каждый искомый моб должен быть на отдельной картинке.
Вообще, если мобы не двигаются или всегда выглядят строго одинаково, то действительно проще findimage использовать и не подбирать уникальные цвета для findcolor.
могу архив глянуть - давайте картинки
А при наведении мышки на правую руку моба мечи появляются?
set #b findcolor ( 339 501 341 631 1 1 12105134 15263714 %close 2 )
Предлагаю реализовать такой алгоритм:
- находим все точки нужного цвета (findcolor)
- вокруг каждой найденной точки "водим" мышкой по небольшому прямоугольнику вокруг точки
-- если мышка попала на ноги моба, то должны появиться мечи - их ищем с помощью findimage
--- если появились мечи - кликаем на мобе (относительно картинки с мечами)
Правильно искать несколько цветов так:
set #b findcolor ( 339 501 341 631 1 1 (12105134, 15263714) %close 2 )
100C08 0,005 100,0 527376
E2E7E8 0,004 75,0 15263714
AEB5B8 0,004 75,0 12105134
1. Вряд ли ) Хотя подумаю
2. Не жмите кнопку "Find Image", она нужна была, пока в пилоте не сделали команду findimage. Тем более, что она изначально использовалась на изображении моба. Прога не виснет, а долго и сильно думает )
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
Поиск диапазонов была экспериментальной функцией...
В пилоте лучше использовать "оптимальную комбинацию" цветов - Best combination:
15263714, 12105134
Переписывать руками значения цветов не нужно - выделили мышкой нужный текст в окошке отчёта, нажали Ctrl+C - скопировали в буфер. Потом нажали Ctrl+V - вставили куда нужно. (как вы уже сами поняли)
Классная программа - порадовала. Я просто сделал скрин всего окна, а потом вырезал из него нужный объект, прихватив немного фона.
Огромное спасибо автору! Программа просто шикарная.
Бился над написанием одного скрипта почти неделю, основная проблема была как раз в подборе нужных цветов.
В результате при помощи UniqueColorsSearch2 все проблемы решились буквально за пару часов, скрип заработал как часики без сбоев.
Всем привет! Помогите кто может с командой 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
Хочу к примеру что бы программа находила эту кнопку по картине, но выдаёт вот такие ошибки, Нашёл в интернете по видео.
Отличная программа. Большое спасибо автору за его труд!
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)