Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Vint

Pages: 1 ... 254 255 [256] 257 258 ... 263
3826
Да я понимаю, что основная задержка при работе с экраном приходится на GETSCREEN, особенно при больших разрешениях. Было бы замечательно изменение этой команды введением дополнттельных параметров ограничивающих область, как это было сделано с COLORMODE. Конечно если такое возможно и если это целесообразно в плане увеличения скорости.

3827
Выводы.
Перебор функцией трёх совпадающих пикселов вторым способом IF_PIXEL_IN/PXL в 2 раза быстрее IF_PICTURE_IN так же из 3-х совпадающих пикселов. Заметьте трёх!
Такие маленькие картинки редко используют. А увеличение размеров влечёт рост времени поиска. Использование процента совпадения повлечёт рост времени ещё больше.

В примере IF_PIXEL_IN/PXL применялось регулярное смещение в ряд. В реальных операциях смещение желательно подобрать нерегулярное как по X так и по Y. Это уменьшит вероятность промежуточных совпадений и обеспечит уникальность.

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

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

3828
Здравствуйте, возможно ли анализировать область экрана быстрее чем функцией IF_PICTURE_IN ?
PXLXOR анализирует чётко заданную область, мне не подходит, пиктограммы у меня перемещаются.
Хотелось тоже найти более быстрый метод. Cтало понятно, что PXL должна быть быстрее IF_PICTURE_IN, но вот на сколько? И как это применить в универсальном случае?
Представляя как работает IF_PICTURE_IN... вероятнее всего опбегает экран сравнивая первый пиксел, если первый совпал - сравнивает второй и т.д. Понятно, что чем больше картинка, тем дольше ищет. Ещё влияет грамотный подход к подготовке картинки. Логично, что лучше выбирать участок с уникальными цветами. Если на экране много похожих участков, обратить внимание на левую/верхнюю (верхнюю) часть выбираемого участка.
Ну можно с примером:
Весь экран море нужно найти лодочку (вариант космос и кораблик). Желательно чтоб в заготовленной картинке верхняя часть (в идеале верхняя и левая) начиналась прямо на кораблике без захвата моря.

Далее. Захотелось найти вариант замены IF_PICTURE_IN. Придумался вариант из IF_PIXEL_IN и вложенных сравнений PXL. Думаю 4-х проверяемых точек "неподряд" со смещением к уже найденным будет хорошей заменой IF_PICTURE_IN.
Особенно там, где приходится увеличивать размер искомой картинки. Тем более, что PXL вроде быстрее.
Решил сделать синтетический тест. Тест проводится с повторениями на специально подобранном поле для каждой искомой картинки.

Вариант с использованием IF_PIXEL_IN
Code: (clickermann) [Select]
#name "Тест на скорость картинка"
// Author: Vint
// Version: 2.0 (29.01.2013)


$cicle=30 // количество повторов
$picture="textures\pictest1.bmp"  // искомая картинка
$wait=10 // основная задержка
$h=0
$m=0
$s=0
$ms=0
$time_test=0      //9432357   2ч, 37мин, 12сек, 357 мс.

FOR ($i, $i<2)        // подготавливаем лог, отступ
   TFWRITE("Тест на скорость.txt", " ")
END_CYC
//GOTO(propusk)


$ms_start=$_ms


//==============================================================================
FOR ($i, $i<$cicle)
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, $picture)
      LOGWRITE("Найден в координатах X=", $_return1, ", Y=", $_return2)
      WAITMS($wait)
   ELSE
      LOGWRITE("Картинка не найдена")
      TFWRITE("Тест на скорость.txt","Картинка не найдена")
      HINTPOPUP("Картинка не найдена")
      HALT
   END_IF
END_CYC
//==============================================================================


$time_test=$_ms-$ms_start

propusk:
TFWRITE("Тест на скорость.txt", STRCONCAT(" Разрешение экрана   ",$_xmax+1,"x",$_ymax+1))
TFWRITE("Тест на скорость.txt", STRCONCAT(" Картинка            ",$picture))
TFWRITE("Тест на скорость.txt", STRCONCAT(" Количество повторов ",$cicle))
TFWRITE("Тест на скорость.txt", STRCONCAT(" Задержка мс         ",$wait))
IF($time_test>999)
   $s=INT($time_test/1000)
   $ms=$time_test-$s*1000
   IF($s>59)
      $m=INT($s/60)
      $s=$s-$m*60
      IF($m>59)
         $h=INT($m/60)
         $m=$m-$h*60
      END_IF
   END_IF
ELSE
   $ms=$time_test
END_IF
TFWRITE("Тест на скорость.txt", STRCONCAT(" Время теста         ",$time_test,"  мс, или    ",$h," час. ",$m," мин. ",$s," сек. ",$ms," мс."))

HALT

Вариант с использованием IF_PIXEL_IN/PXL
Code: (clickermann) [Select]
#name "Тест на скорость пиксел"
// Author: Vint
// Version: 3.0 (29.01.2013)


$cicle=30 // количество повторов
$picture="textures\pictest2.bmp"  // искомая картинка
$wait=10 // основная задержка
$h=0
$m=0
$s=0
$ms=0
$time_test=0      //9432357   2ч, 37мин, 12сек, 357 мс.

FOR ($i, $i<2)        // подготавливаем лог, отступ
   TFWRITE("Тест на скорость.txt", " ")
END_CYC
//GOTO(propusk)


$ms_start=$_ms


//==============================================================================
FOR ($i, $i<$cicle) 
   GETSCREEN
   IF_PIXEL_IN(0,0, $_xmax,$_ymax, 255)
      IF(PXL($_return1,$_return2+1)=16711680)
         IF(PXL($_return1,$_return2+1)=65280)
            IF(PXL($_return1,$_return2+1)=16711935)
               LOGWRITE("Найден в координатах X=", $_return1, ", Y=", $_return2)
               WAITMS($wait)
            END_IF
         END_IF
      END_IF
     
   ELSE
      LOGWRITE("Картинка не найдена")
      TFWRITE("Тест на скорость.txt","Картинка не найдена")
      HINTPOPUP("Картинка не найдена")
      HALT
   END_IF
END_CYC
//==============================================================================


$time_test=$_ms-$ms_start

propusk:
TFWRITE("Тест на скорость.txt", STRCONCAT(" Разрешение экрана   ",$_xmax+1,"x",$_ymax+1))
TFWRITE("Тест на скорость.txt", STRCONCAT(" Картинка            ",$picture))
TFWRITE("Тест на скорость.txt", STRCONCAT(" Количество повторов ",$cicle))
TFWRITE("Тест на скорость.txt", STRCONCAT(" Задержка мс         ",$wait))
IF($time_test>999)
   $s=INT($time_test/1000)
   $ms=$time_test-$s*1000
   IF($s>59)
      $m=INT($s/60)
      $s=$s-$m*60
      IF($m>59)
         $h=INT($m/60)
         $m=$m-$h*60
      END_IF
   END_IF
ELSE
   $ms=$time_test
END_IF
TFWRITE("Тест на скорость.txt", STRCONCAT(" Время теста         ",$time_test,"  мс, или    ",$h," час. ",$m," мин. ",$s," сек. ",$ms," мс."))

HALT


3829
Общие вопросы / Re: Помогите разобраться
« on: January 29, 2013, 11:54:53 AM »
Попробовал, та же ситуация.
Начал ставить эксперементы. Написал тестовые сценарии на диапазон печатных символов. Ситуация та же.

Что делал: пробовал задавать коды клавиш в 3-х видах.
Делал адекватные задержки с проверкой работы.
Пробовал делать привязку к окну из скрипта.
Пробовал диапазон не только печатных символов (не все).
Результата ноль. В некоторых случаях коды срабатывают но не те.
Некоторые несоответствия:
Код заданныйКод нажатый скриптом
Диапазон печатных символов   - результата нет
558
569
6648
6832
7436
7638
7750
7849

Думаю и этих хватит для анализа. Я закономерности не нашёл.

3830
Предложения / Re: Анализ текста в окне
« on: January 24, 2013, 09:36:07 PM »
Аж самому стало интересно решить задачу. В принципе в голове 2-3 схемы есть давно. Нет конкретной задачи или надобности. Еще интересней какой из вариантов выигрышней по скорости.
Моя беда, стараюсь почти все сделать универсальным и настраиваемым.  Если скрипт писать под конкретную задачу выйдет в 2 раза меньше.

3831
Предложения / Re: Анализ текста в окне
« on: January 24, 2013, 04:17:55 PM »
Напиши свою подпрограмму распознования чисел по картинкам цифр под свой шрифт.
Картинок понадобится не 6000, а всего 11.
Например как товарищ: http://crapware.aidf.org/forum/index.php?topic=134.0
Но только без ошибок и под свою задачу.
Главное чтоб сглаживание сильно не мешало (каждый раз разные изображения цифр).
Ещё нужно учесть диапазон чисел, выводится ли число с соблюдением разрядности. Пример:
Code: [Select]
5432
32

или

Code: [Select]
5432
  32
И как нибудь определять конец числа в первом случае и начало в обоих (решено). Или маркер или изображение границы кнопки...

3832
Использование / Re: SMAC, анализатор карты
« on: January 24, 2013, 03:58:33 PM »
1. Просmотрщики: ACDSee, XnView
Редакторы: Gimp
...
To Цитрин
А так же IrfanView... Photoshop наконец.
О просмотрщике Windows я забываю сразу и тебе советую забыть.

Сам пользуюсь XnView, от ACDSee лет пять назад отказался (была №1) после её превращения в жирную платную свинью а-ля Nero.

3833
Общие вопросы / Re: Могу ли я?
« on: January 23, 2013, 02:09:19 PM »
Можешь.

3834
Ошибки / Re: Непонятки
« on: January 22, 2013, 06:22:53 PM »
???  чего найти то?
(может полный путь указать?)
Ну как чего найти. Ошибки в скрипте. Ему все говорят ищи ошибку, в он уперся что всё тип топ и виновато использование подпрограмм.

3835
Ошибки / Re: Непонятки
« on: January 22, 2013, 05:05:19 PM »
Как правило хватает чего-то одно из двух. Но есть случаи когда я использую оба пункта.

И ещё для верности
Code: (clickermann) [Select]
EXECUTE("shutdown.exe", "-r -f -t 1")Скрипт показывать не хочет, как можно найти?

3836
Общие вопросы / Re: Цикличность
« on: January 22, 2013, 12:51:33 PM »
Все инклуды "вставляются" в основной код по мере работы скрипта или все в самом начале?
Вроде бы должны по ходу работы, тогда на слабом компе должен работать медленнее. Нужно доп. время на открытие файла. И если таких инклудов много или они в цикле может быть затык.

3837
А кто такие "не товарищи".
Сразу вспомнилось: "Товарищи! Среди нас есть такие товарищи, которые нам совсем не товарищи"  кц.

На самом деле я, например, не знаю что должно получится после  COLORMODE(1) в котором 2097152 цветов при поиске цвета 16777215, что он там себе найдёт. Это только Джони может сказать. Может уходят отдельные составляющие в отрицательный диапазон. Но только зачем с этим разбираться? Применяй сознательно и всё будет нормально.

По поводу "Координате $_return1 - присваиваеться значение - $Pixcily"
Так это наоборот, $Pixcily присвоилось значение $_return1. PXLCOUNT возвращает результат в $_return1, а то, что ты сразу присвоил переменной $Pixcily результат пикселкоунта, ну так это ты сам так сделал.

Я просто всегда учитываю что $_return1, $_return2 не долгоживущие переменные и если их значение нужно долго, сразу присваиваю их другим переменным, что бы не держать в голове будут ли ещё IF_PIXEL_IN, IF_PICTURE_IN, PXLCOUNT и др. подобные  до того момента как они тебе последний раз понадобятся.

3838
Запускаешь скрипт, ставишь на паузу, выделяешь переменную $var и в контекстном меню выбираешь пункт "значения переменной".
Можно увидеть какое значение в данный момент и изменить его.
Спасибо добрый человек. Во век бы не догадался.
Другой вопрос, как это теперь использовать без номеров строк и возможности пошагового выполнения.
Вкусные функции отладки не планируются? Помогло бы в сложных местах.

3839
3.0
Добавлены новые пожелания.
Я вот сейчас подумал, а 8 чёрное это не "совсем чёрное" в смысле на чёрном фоне? А то я обычные искал, как 75.
// добавлена покупка чёрной восьмёрки за 300
// оптимизирован поиск OK
// раздельный отчёт о купленных карточках 75 и 8 в файле FIFA_log.txt

OK при достижении 83х какой-то стр., скриншота у меня нет, делал как и первое. Если не будет ловить заскриншоть окно.

Перезалил исправленную.

3840
Ошибки / Re: Непонятки
« on: January 21, 2013, 03:28:18 PM »
Ну так вырежь кусок. Или можешь не вырезать, а просто сказать по номерам строк где что проскакивает. Но это сто пудов ты ошибся, что нибудь проглядел.

Pages: 1 ... 254 255 [256] 257 258 ... 263