Author Topic: Время поиска картинки.  (Read 9877 times)

0 Members and 1 Guest are viewing this topic.

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Время поиска картинки.
« on: January 04, 2017, 07:08:12 PM »
Здравсте.

Меня вопрос тут посетил.
Бот ищет десяток картинок (10 х 15) в поле (300 х 100), стоит таймер, когда играю с главного компа (стоит флеш жёсткий диск) на поиск уходит около 200 мс.
Когда запускаю бота с виртуальной машины, жёсткий диск обычный с блинами, там 30-40 мс. получается.
Значит из кеша винта читает на виртуальной машине, ведь быстрее чем на флеш диске не может быть по определению ...
Но иногда и главный комп разгоняется до тех же 30-40 мс., но редко.

Как так, как бы сделать быстро и там и там ????
В будущем будет около сотни картинок и 2 секунды против 300-400 мс. это ощутимо уже получится.

Что скажете ?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Время поиска картинки.
« Reply #1 on: January 04, 2017, 07:29:44 PM »
Не думаю что тут дело в чтении. Больше всего времени занимает сравнение пикселов. Тут все зависит от процессора, и степени его нагрузки.
Сделай картинки меньше.

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Время поиска картинки.
« Reply #2 on: January 04, 2017, 07:37:03 PM »
Не думаю что тут дело в чтении. Больше всего времени занимает сравнение пикселов. Тут все зависит от процессора, и степени его нагрузки.
Сделай картинки меньше.
Меньше нельзя, возникнет неоднозначность.
Процессор быстрый =), i7-4770, 3.5 ГГц.
Дело в том, что виртуальная машина стоит на одном и том же компе, т.е. проц в обоих случаях идентичен.
Из под виртуалки даже наверное послабее будет, она же (виртуальная машина) тоже жрёт ресурс небольшой.
Я думаю на кеш диска, иногда же и главный комп ищет 30 мс., значит то из кеша берёт данные, а то лезет за ними в память диска.
---
А вообще, Кликерман отличная программа, она сэкономила тысячи часов рутины в игре ))))
Пойду сделаю донат создателю, давно хотел.
Всех с НГ !!!
---
Жаль небезопасно хвастаться своими скриптами, он уже достаточно крут, бот сам днями играет.
А если похвастаться )))) то тут могут сидеть от игры админы, палить )))
 
« Last Edit: January 04, 2017, 07:40:40 PM by putman »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Время поиска картинки.
« Reply #3 on: January 04, 2017, 10:24:08 PM »
Ищет столько времени и НЕ находит?
Он же ищет одну из? Ну вот и разный результат.
Или то на чём ищет - разное, неблагоприятное для таких заготовок.
У секретного скрипта, конечно, это не узнать  ;D ;D


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Время поиска картинки.
« Reply #4 on: January 04, 2017, 11:31:16 PM »
поделюсь советом по ускорения работы кликера с графическим буфером. непойму только, почему никто не пользуется этой фичей  ???

во первых, уменьшение разрешеня рабочего стола ускоряет выполнение getscrean, но после того, как появился гетскрин с параметрами, вроде стало не существенно. да черт с ним с разрешением, не много оно дает скорости.

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




чтото я может упускал, или чтото изменилось. всегда был уверен в вышесказанном. немного потестил. время выполнения гетскрин при 16бит  уменьшается примерно в 3-4 раза при огромных разрешениях (UHD) и в 9-10 раз при скрине небольших областей. с картинками не тестил, но при поиске пикселя существенной разницы не увидел  :( . возможно это както зависит от машины на которой проводились тесты ранее, или от версии кликера. вобщем я предложил вариант, но тепер не уверен в вышесказанном (кроме скорости выполнения гетскрина)  :-[
« Last Edit: January 05, 2017, 12:10:06 AM by dramster »

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Время поиска картинки.
« Reply #5 on: January 05, 2017, 08:56:09 PM »
Ищет столько времени и НЕ находит?
Он же ищет одну из? Ну вот и разный результат.
Или то на чём ищет - разное, неблагоприятное для таких заготовок.
У секретного скрипта, конечно, это не узнать  ;D ;D
Нет, я сужу по варианту, где ни одной из картинок нет и он перебирает их все.
И разница в скорости в 10 раз меня смущает.

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Время поиска картинки.
« Reply #6 on: January 05, 2017, 08:58:17 PM »
изменение глубины цвета - вот оно, вот что дает кучу скорости при работе с графикой.
Спасибо, очень хороший совет.

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Время поиска картинки.
« Reply #7 on: January 06, 2017, 01:43:41 AM »
изменение глубины цвета - вот оно, вот что дает кучу скорости при работе с графикой.
Спасибо, очень хороший совет.
только жаль, что это не правда. :(
ну почему же, вполне даже правда. вот пример http://crapware.aidf.org/forum/index.php?topic=1803.0
какой бы у тебя не был супермега компутер с 28ядрами и девятью видеокартами и 1254 терабайтами оперативы  :D . ну не успевает кликер на 32 битном экране, хоть ты тресни. на 16битной картинке скорость гетскрина вырастает в десятки раз, и в этоге в игре ты в переди всех.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Время поиска картинки.
« Reply #8 on: January 06, 2017, 03:15:09 PM »
на 16битной картинке скорость гетскрина вырастает в десятки раз
Логически, скорость чисто гетскрина может вырасти максимум в 2 раза, т.к. объём данных меньше в два раза. Откуда десятки?
Конечно могут быть другие факторы, но они побочные. И десятков раз думаю ее будет.


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Время поиска картинки.
« Reply #9 on: January 06, 2017, 05:22:16 PM »
А что мешает проверить? Я говорю как есть, и ничего не придумываю. Было проверено на старой слабой машине, и сейчас на более мощной. Участок 800x600 скринится в 8 раз быстрее, если область гетскрина еще уменьшать, время выполнения еще заметнее уменьшается. На больших участках - менее заметно. Как было проверено еще при написании бота на мастергитары, там время выполнения уменьшалось с 20 до 1 мс.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Время поиска картинки.
« Reply #10 on: January 08, 2017, 10:50:19 PM »
Мешают проверить праздники  ;)
Очень мешают.

Только что проверять? 800х600 быстрее в 8 раз чего?
Понятно, что чем меньше область, тем быстрее.
Проверял на сериях?
У меня на старом компе один! гетскрин был... 250-300мс всего экрана 1280х1024, после смены стало то ли 50, то ли 30 не помню. На работе было. Сейчас ни тех компов, ни тех мониторов.
Вот завтра померяю.


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Время поиска картинки.
« Reply #11 on: January 08, 2017, 11:25:20 PM »
Только что проверять? 800х600 быстрее в 8 раз чего?
Понятно, что чем меньше область, тем быстрее.

Я имел ввиду то, что при смене глубины цвета на 16 бит, скорость выполнения гетскрина области 800х600 выростет в 8 раз. Если эту область уменьшить до 50х50 к примера то разница в скоростях при 32 и 16бит будет уже раз в 20.
Примерно конечно, тоже щяс неначем потестить, но примерно помню, так как ранее тестил. Я просто это к тому, что ты написал, что скорость выполнения должна вырости в 2 раза. Теоретически это так, но на практике вот этак.
 При 16бит можно добиться того, что гетскрин выполняется мгновенно, 0-1мс, при условии что область не велика, точно помню как писал для игры мастер гитары, там область скрины при 32бит выполнялась 25-30мс, и бот терял смысл, так толку от него никакого, как только сменил на 16бит, радости не было предела. Бот приходилось притормаживать механически, так как самые сложные треки проходил  на 100%.
И теперь, если существует задача постоянного сканирования экрана, на лету, каждый фрейм, сразу меняю глубину цвета.
Вспомнил последнее применение, классическая змейка, миниигра в большой игре, чтоб заполнить все поле змейкой, набрать максимум очков нужно змейку направлять через все поле. Движется она очень очень быстро. как обычный гетскрин при 32 битах успеет делать скрин области, если она огромна? Я набрал максимум, получил жалобу, и чуть не получил бан. :D

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Время поиска картинки.
« Reply #12 on: January 09, 2017, 11:18:52 AM »
Так, потестировал.

Код:
[spoiler]
Code: (clickermann) [Select]
#name "Тест на скорость"
// Author: Vint
// Version: 6.0 (09.091.2017)

$count = 100         // количество повторов
$wait = 1               // основная задержка

//===  Вывод времени выполнения ms в формате час:мин:сек,мс ====================
SUB(timeprint, $tt_print)
    IF($tt_print > 999)
        $timesec = $tt_print/1000
        $hours = INT($timesec/3600)
        $minuts = INT(($timesec - ($hours*3600))/60)
        $sec = ($tt_print - ($hours*3600*1000) - ($minuts*60*1000)) / 1000
        LOGWRITE($hours, ":" , $minuts , ":" , $sec)
    END_IF
END_SUB

//===  Вывод времени выполнения  ===============================================
SUB(print_timeaction, $actionnamet, $tt_search)
    LOGWRITE("время выполнения ", $actionnamet, ":  ", $tt_search, " мс")
    timeprint($tt_search)
END_SUB

//==============================================================================

WAIT(1)
LOGCLEAR
$timer1 = $_ms

// тестируемый код
//==============================================================================
FOR($i=0, $i < $count)
    GETSCREEN
    //GETSCREEN(0, 0, 800, 600)
    //WAITMS($wait)
END_CYC
//==============================================================================


$time_test = $_ms - $timer1

LOGWRITE("===============  тест времени выполнения  ===============")
LOGWRITE("Разрешение экрана   ", $_xmax+1, "x", $_ymax+1)
LOGWRITE(" ")
print_timeaction("тест 1", $time_test)
LOGWRITE("среднее время за ", $count, " повторений:  ", $time_test / $count, " мс")
LOGWRITE(" ")

HALT
[/spoiler]

Предварительная пауза при старте - 1 сек
Сериями по 100 шт.
Десяток запусков на каждом тесте, диапазон результатов.

Результаты:
Code: [Select]
GETSCREEN(0, 0, 800, 600)
 480000 px

 32 bit    1.2 - 1.3 мс
 16 bit    2.3 - 2.4 мс

Code: [Select]
GETSCREEN   // 1600x900
 1440000 px   - ровно в 3 раза больше пикселов

 32 bit    3.1 - 3.2 мс
 16 bit    6.4 - 6.6 мс

Всё согласно теории!  :o  ну почти...
В 3 раза больше пикселов - в 3 раза больше время гетскрина.
16 bit  в два раза быстрее 32 bit
  только у меня наоборот  ;D ;D  32 bit быстрее. Чудеса.

Система Win XP SP3 32 битная!
i5-2500 CPU 3.30 GHz
3,46 ОЗУ
« Last Edit: January 09, 2017, 11:25:51 AM by Vint »


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Время поиска картинки.
« Reply #13 on: January 09, 2017, 09:44:04 PM »
 :o интересно, очень интересно. Жаль что я в данный момент не могу подтвердить свои тесты  :( . Но я обязательно покажу свои результаты... примерно через недельку.

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Время поиска картинки.
« Reply #14 on: January 24, 2017, 04:19:28 PM »
неужели, приехал домой  :D .
вот твой тест на моем компе. @Vint


весь экран. 5120x2160
Code: [Select]
32 бит
15:25:20 ===============  тест времени выполнения  ===============
15:25:20 Разрешение экрана   5120x2160
15:25:20 
15:25:20 время выполнения тест 1:  13099 мс
15:25:20 среднее время за 100 повторений:  130.99 мс
15:25:20 
16 бит
15:26:25 ===============  тест времени выполнения  ===============
15:26:25 Разрешение экрана   5120x2160
15:26:25 
15:26:25 время выполнения тест 1:  2269 мс
15:26:25 среднее время за 100 повторений:  22.69 мс

GETSCREEN(0, 0, 800, 600)

Code: [Select]
32 бит
15:27:48 ===============  тест времени выполнения  ===============
15:27:48 
15:27:48 время выполнения тест 1:  2295 мс
15:27:48 среднее время за 100 повторений:  22.95 мс
15:27:48
16 бит 
15:28:18 ===============  тест времени выполнения  ===============
15:28:18 
15:28:18 время выполнения тест 1:  146 мс
15:28:18 среднее время за 100 повторений:  1.46 мс

GETSCREEN(0, 0, 100, 100)

Code: [Select]
32 бит
15:29:27 ===============  тест времени выполнения  ===============
15:29:27 
15:29:27 время выполнения тест 1:  2227 мс
15:29:27 среднее время за 100 повторений:  22.27 мс
15:29:27 
16 бит
15:30:15 ===============  тест времени выполнения  ===============
15:30:15 
15:30:15 время выполнения тест 1:  22 мс
15:30:15 среднее время за 100 повторений:  0.22 мс
15:30:15 

чуешь разницу  :D . на области 100х100 в 100 раз быстрее выполняется при 16 бит   :D.  кстити ставил 8 бит  - время выполнения примерно тоже что и при 16бит, "среднее время за 100 повторений:  0.2 мс" при 100х100, но тут сильно не разгонишся, всего 256 цветов.  16 бит же вполне хватает для анализа любого изображения, и колормод не потребуется - 65 536 цветов .

система Win7 Ultimate 64bit
AMD FX(tm)-8350 Eight-Core Processor 4.00GHz
16,0 ГБ ОЗУ




;D ;D ;D ;D ;D ;D ;D ;D

пока писал пост, прикинул, что может и не от количества цветов зависит. проверил:

GETSCREEN(0, 0, 800, 600) 32 бит
Code: [Select]
  стиль Aero
15:55:45 ===============  тест времени выполнения  ===============
15:55:45 
15:55:45 время выполнения тест 1:  1906 мс
15:55:45 среднее время за 100 повторений:  19.06 мс
15:55:45
 Классический стиль
15:56:13 ===============  тест времени выполнения  ===============
15:56:13 
15:56:13 время выполнения тест 1:  57 мс
15:56:13 среднее время за 100 повторений:  0.57 мс
15:56:13

GETSCREEN(0, 0, 100, 100) 32 бит  Классический стиль
Code: [Select]
16:14:42 ===============  тест времени выполнения  ===============
16:14:42 
16:14:42 время выполнения тест 1:  19 мс
16:14:42 среднее время за 100 повторений:  0.19 мс

во как оно бывает, вот что препятствует сканированию  ;D . и глубина цвта тут не причем, просто при 16 бит рабочий стол переходит в "Упрощенный стиль" .

Век живи – век учись... и тестируй.  ;D