Здравствуйте, гость ( Вход | Регистрация )

3 страниц V < 1 2 3  
Ответить в эту темуОткрыть новую тему
> Screen Scanner, аналог findcolor и findimage
Zeleax
сообщение 13.6.2011, 14:31
Сообщение #41


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



cscan 1.3.3

Исправил неверное определение координат при работе с относительными (оконными) координатами


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
avgur
сообщение 13.6.2011, 16:02
Сообщение #42


***

Novice
Сообщений: 94
Регистрация: 15.8.2010
Группа: Пользователи
Наличность: 0
Пользователь №: 12.926
Возраст: 25



Спасибо за труд, теперь у меня относительные координаты точно совпадают с пилотовскими.
Программа очень нравится и поражает скоростью работы и точностью определения цветов, про файндколор теперь и не вспомню (IMG:style_emoticons/default/smile.gif)

Вот еще вопрос по поводу:
"- можно изменять порядок проверки пикселей по осям X и Y (указывая -dx или -dy меньше нуля);"
В прямоугольнике в котором я ищу цвет, чаще всего поиск будет заканчиваться быстрее, если поиск будет проходить сначало по оси Y, а потом по Х.
Мне не понятно что указывать меньше нуля, а что больше в моем примере:
Код
exec cscan.exe -x1=360 -y1=2 -x2=557 -y2=57 -dx=1 -dy=1 -hw= #handleWin -c=(3832214) -f=( E:\arr1test.txt )
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 13.6.2011, 22:14
Сообщение #43


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Цитата
Вот еще вопрос по поводу: "- можно изменять порядок проверки пикселей по осям X и Y (указывая -dx или -dy меньше нуля);"В прямоугольнике в котором я ищу цвет, чаще всего поиск будет заканчиваться быстрее, если поиск будет проходить сначало по оси Y, а потом по Х.Мне не понятно что указывать меньше нуля, а что больше в моем примере:

Спасибо за добрые слова, приятно, что труд полезен )
Можно изменять направление обхода пикселей справа-налево или на снизу-вверх, если указывать dx или dy меньше нуля соответственно. Но в любом случае координата X меняется быстрее чем координата y при обходе пикселей.


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 30.6.2011, 10:16
Сообщение #44


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



cscan 1.3.4

Добавил параметр -na (-NoActivate) используется, если не нужно активизировать окно заданное хендлом при снятии цвета. Если указанное окно закрыто другими окнами, то результат поиска будет неверным. Используйте этот параметр на своё усмотрение. По умолчанию он отключен.

Код
exec cscan.exe #x1, #y1 #x2, #y2 -hw= #handle -na -c=(R(137-162)+G(68-99)+B(61-88)) -f=( j:\arrCPtest.txt )
wait 100
load_array %arr "j:\arrCPtest.txt"
set #a %arr [1 3]
if #a > 0
   if_not 60, 28 2122885
     send num_*
   end_if
end_if


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 30.6.2011, 15:58
Сообщение #45


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Обновил на сайте файл Dec2RGB_xls.zip - Таблица Excel для разложения десятичного цвета (DecColor) на RGB-каналы.
Добавил отображение минимального и максимального значений в каждом канале, что удобно при поиске RGB-диапазонов с помощью ScreenScanner


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 17.7.2011, 19:55
Сообщение #46


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



cscan 1.3.5

Исправил баг с неопределявшимся числом подходящих по цвету пикселей параметра -pcount (-pc)


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Denker
сообщение 15.8.2011, 15:37
Сообщение #47


**

Neophyte
Сообщений: 46
Регистрация: 28.10.2010
Группа: Пользователи
Наличность: 0
Пользователь №: 13.148
Возраст: 30



Здравствуйте.
Очень нравится ваша прога, пользуюсь как альтернтива findcolor -- работает значительно быстрее, что для меня очень важно.

В коде пользуюсь вашей процедурой для неё:

код процедуры

Код

:cscan
set $a findcolor (0, 0 1, 1 1 1 88888888 %stone 2)
exec e:\resurs\cscan $cscanparam -file= (e:\resurs\stone.txt)
:waiting2
wait 200
load_array %stone e:\resurs\stone.txt
set #wcscan size (%stone)
if #wcscan < 2
  goto waiting2
end_if
set $a %stone [#wcscan 1]
if ($a <> endcscan)
  goto waiting2
end_if
set #dcscan #wcscan - 1
set #zcscan %krets [#dcscan 3]
set #a 0
if #zcscan <> -1000
  if #zcscan = -2000
   set #a %krets [1 1]
  else
   set #a #dcscan
  end_if
end_if
set $a #a
return



Поскольку полностью в её работе так и не разобрался, пользуюсь "как есть".
Не периодически выдаёт ошибку в строке
Код

load_array %stone e:\resurs\stone.txt

но это в последних версиях пилота поправили, зато теперь скрипт намертво зацикливается на строках
Код

:waiting2
wait 200
load_array %stone e:\resurs\stone.txt
set #wcscan size (%stone)
if #wcscan < 2
  goto waiting2
end_if


На версиях пилота 2.18.8 и 2.19 всё работает правильно, а в версиях 2.20 и 2.21 зацикливается.
Это особенность скрипта или в баг пилота?
Если проблемма в скрипте, то как это можно решить? В крайнем случаю придётся переделывать под findcolor, благо его значительно улучшили.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 15.8.2011, 17:29
Сообщение #48


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



можно уменьшить вероятность возникновения ошибки увеличив задержку с wait 200 на wait 300 или больше. Еще можно добавить проверку на максимальное количество циклов, после чего ожидание завершается. Если нужно - могу написать.
А вообще, лучше использовать findcolor. Начиная с версии пилота 2.20 там реализованы почти все функции ScreenScanner.


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Denker
сообщение 15.8.2011, 19:52
Сообщение #49


**

Neophyte
Сообщений: 46
Регистрация: 28.10.2010
Группа: Пользователи
Наличность: 0
Пользователь №: 13.148
Возраст: 30



Спасибо.
Задержку увеличивал вплоть до 500, но тут уже скорости скрипта не хватало. К моменту, когда надо кликнуть в найденой точке, эта точка уже уползала. А ошибку выдаёт если долгое время, больше минуты, не находит заданый цвет или изначально файла нет и не находит цвет. Причём, как я уже писал, ошибка возникает не периодически.
Проверку на количество циклов и сам могу. Хоть через обычный счётчик с условием на goto, хоть через timer.
Буду пробовать переделать на findcolor.

Можно подробнее объяснить принцип работы приведённого куска?
Код

:waiting2
wait 200
load_array %stone e:\resurs\stone.txt // это массиву присваиваем содержимое файла
set #wcscan size (%stone)             // определяем размерность массива, что равно количество строк в файле
if #wcscan < 2                       // проверка. но если #wcscan < 2, то где и как изменяется файл, чтобы #wcscan стало >= 2?
  goto waiting2                       // учитывая, что мы зацикливаем этот кусок
end_if
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 15.8.2011, 21:19
Сообщение #50


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



когда screenscanner завершает работу , то в файле должно получится не менее двух строк (последняя = endcscan).
В этом куске и проверяется: если число строк меньше двух, значит поиск еще не завершен.

Системная ошибка в строке load_array %stone e:\resurs\stone.txt происходила ранее из-за того, что совпадал момент времени когда cscan пишет в файл, и в этот же момент времени пилот пытался прочитать информацию.

После выхода новых вресий пилота (>=2.20) пилот не выдает сообщение об ошибке чтения, а просто работает далее, возвращая массив длиной 0 (вроде бы). Потому и происходит зацикливание.

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


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Denker
сообщение 16.8.2011, 8:48
Сообщение #51


**

Neophyte
Сообщений: 46
Регистрация: 28.10.2010
Группа: Пользователи
Наличность: 0
Пользователь №: 13.148
Возраст: 30



Цитата(Zeleax @ 15.8.2011, 20:19) *

когда screenscanner завершает работу , то в файле должно получится не менее двух строк (последняя = endcscan).
В этом куске и проверяется: если число строк меньше двух, значит поиск еще не завершен.

В том-то и дело, что не зависимо от результата поиска, в файле всегда 2 строки,
Цитата(Zeleax @ 15.8.2011, 20:19) *

Системная ошибка в строке load_array %stone e:\resurs\stone.txt происходила ранее из-за того, что совпадал момент времени когда cscan пишет в файл, и в этот же момент времени пилот пытался прочитать информацию.

После выхода новых вресий пилота (>=2.20) пилот не выдает сообщение об ошибке чтения, а просто работает далее, возвращая массив длиной 0 (вроде бы). Потому и происходит зацикливание.

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

Upd: проверка показала, что всегда #wcscan = 0. Поставил вместо проверки "set #wcscan 2", выдаёт ошибку на строке "set $a %krets [#wcscan 1]". Скорее всего, причина тут "load_array %stone e:\resurs\stone.txt"
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 16.8.2011, 10:39
Сообщение #52


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Похоже в новой версии пилота (2.20, 2.21) образовался баг:
Код
load_array %arr "d:\1.txt"
set #w size (%arr [1] )
msg #w // всегда = 0


размер массива всегда получается = 0 (load_array не работает)


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
SkifF
сообщение 14.11.2011, 0:01
Сообщение #53


**

Neophyte
Сообщений: 11
Регистрация: 11.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.238
Возраст: 33



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


--------------------
И кто то говорит мне что я дьявол кто то говорит что я пророк,
Но я не собираюсь спорить с вами, я просто играю рок...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 14.11.2011, 4:33
Сообщение #54


***********

Модератор UOPilot
Сообщений: 9.742
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29658
Пользователь №: 11.279



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


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 14.11.2011, 8:37
Сообщение #55


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Цитата(DarkMaster @ 14.11.2011, 4:33) *

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

Абсолютно верно. В файндимидже заморочка только с "прозрачным" цветом. Ставьте совпадение порядка 60-95% и все будет нормально (экспериментально подберите от большего к меньшему). А в будущем может этот косяк и подправят

DarkMaster, этот косяк бы в Полезных советах описать...


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
SkifF
сообщение 14.11.2011, 22:18
Сообщение #56


**

Neophyte
Сообщений: 11
Регистрация: 11.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.238
Возраст: 33



Ну я пока забросил игру в которую играл в 6 окон с пилотом ))) будем надеяться к тому времени когда подберу себе что-либо еще все баги пофиксят все фичи заработают и будет нам алилуя )))


--------------------
И кто то говорит мне что я дьявол кто то говорит что я пророк,
Но я не собираюсь спорить с вами, я просто играю рок...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 3.1.2012, 8:25
Сообщение #57


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Цитата
Ищу на экране небольшие изображения - типа 20-21, 20-22, 20-23.. фон не однотонный но правда не переливается и не меняется, но все равно находит через раз, пробовал в шопе избавится от фона, но тогда еще реже находит ((
и как допустим привязать и заменить
set $d FindImage (616 387 653 405 (D:\l22-23.bmp) %arr 2 80 1 )
if $d > 0
...
...
...
на cscan?

команда пилота findimage почти полностью заменяет собой cscan, поэтому проще и лучше использовать её.
Качество работы этих команд сравнить сложно, поскольку используются разные алгоритмы и средства.
Кроме того, для использования cscan нужно иметь установленную на компьютере библиотеку Net Framework 3.5 (см. 1-й пост темы)

Если всё же хотите использовать cscan - нужно взять процедуру из первого поста этой темы и поместить её в конец вашего скрипта. Кроме того, исправить внутри процедуры строку
exec g:\cscan $cscanparam -file= (g:\1.txt)
указать путь к временному файлу - где он должен у вас размещаться на компе.

Потом для поиска изображения в своём скрипте просто пишите где нужно:
Код
set $cscanparam 616 387 653 405 -hw= #workwindow -img=( D:\l22-23.bmp )
gosub cscan
if #a > 0
   msg Изображение найдено в координатах %arr [1 1] %arr [1 2]
else
   msg Изображение не найдено
end_if

Понятно, что в #workwindow нужно записать хендл рабочего окна (где искать). Если нужно искать без привязки к окну - просто не пишите этот параметр (-hw= #workwindow)

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


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

3 страниц V < 1 2 3
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 7.7.2025, 14:36
Designed by Nickostyle