Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: StarControl on November 13, 2018, 11:13:04 AM
-
Помогите разобраться со скриптом распознавание цифр
http://crapware.aidf.org/forum/index.php?topic=88.msg1571#msg1571
Кликер последняя версия, скрипт версия 1.5
вопрос: (переменную не знаю, а сам не разберусь)
1) Как сделать что бы не учитывал у цифр при поиске задний фон. (Это на будущее)
2) Как задать расстояние между цифрами ( и для отдельной цифры можно это сделать? А то цифра 1 на 1 клетку в ширину меньше, так как из за этого вместо 01 кликер выдает 081)
Использую Колор мод 6
В результате кликер выдает 081.38.47 или 081.836.24 или 081.836.804
-
С задним фоном, в плане универсальности, не получится. Двоеточие начинает находить в некоторых цифрах, отсюда ошибки распознавания.
Вот мой более компактный скрипт основанный на методе сортировки массива.
Скрипт сам определяет количество и имена картинок из папки Letters. Первый символ в имени картинки является символом распознавания. Двоеточия конечно в именах файлов недопустимы, поэтому использовал точку.
Проверено, с образцом из архива все распознает верно.
SUB(recognize, $x1,$y1, $x2,$y2, $c_ignor, $prc)
GETFILELIST($Letters_arr, "Letters\*.bmp")
FOR($Let_num=0,$Let_num<ARRSIZE($Letters_arr))
SCANPICTURE($ARR_SCAN, $x1,$y1, $x2,$y2, STRCONCAT("Letters\", $Letters_arr[$Let_num]), $c_ignor, $prc)
FOR($arr_num=0,$arr_num<ARRSIZE($ARR_SCAN),2)
ARRPUSH($ARR_OUT, $ARR_SCAN[$arr_num])
ARRPUSH($ARR_OUT, STRCUT($Letters_arr[$Let_num], 1, 1))
END_CYC
UNDEFINE($ARR_SCAN)
END_CYC
$siz = ARRSIZE($ARR_OUT)
$srtcheck = 0
$srt = 0
FOR($a=$siz-2,($a>0)&($srt=0),-2)
FOR($b=0,$b<$a,2)
IF($ARR_OUT[$b] > $ARR_OUT[$b+2])
$srtcheck = 1
$tmp = $ARR_OUT[$b]
$tmp2 = $ARR_OUT[$b+1]
$ARR_OUT[$b] = $ARR_OUT[$b+2]
$ARR_OUT[$b+1] = $ARR_OUT[$b+3]
$ARR_OUT[$b+2] = $tmp
$ARR_OUT[$b+3] = $tmp2
END_IF
END_CYC
IF($srtcheck = 0)
$srt = 1
END_IF
END_CYC
$str = ""
FOR($a=0,$a<ARRSIZE($ARR_OUT),2)
IF(STRLEN($str) > 0)
IF($ARR_OUT[$a]-$ARR_OUT[$a-2] > 10) // обпределение пробела
$str = STRCONCAT($str, " ")
END_IF
$str = STRCONCAT($str, $ARR_OUT[$a+1])
ELSE
$str = $ARR_OUT[$a+1]
END_IF
END_CYC
UNDEFINE($ARR_OUT)
END_SUB
GETSCREEN
recognize(147,783, 219,809, -1, 100) // область распознавания, цвет прозрачности, процент совпадения
LOGWRITE ($str) // в переменную $str выводятся распознанные символы
HALT
-
У винта там в скрипте много чего накручено.
Например вот здесь задается процент совпадения для каждого числа.
FOR ($i=0, $i < 11)
SWITCH($i)
CASE(0)
$pr = 95
CASE(1)
$pr = 99
// CASE(2)
// $pr = 95
CASE(3)
$pr = 93
CASE(4)
$pr = 95
CASE(5)
$pr = 95
CASE(6)
$pr = 95
CASE(7)
$pr = 95
CASE(8)
$pr = 94
// CASE(9)
// $pr = 95
DEFAULT
$pr = 100
END_SWITCH
То есть оказывается мы ищем картинки с не 100% совпадением!
А вот здесь число 16744447 это число прозрачности. Не понятно только где этот цвет...
SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"), 16744447, $pr)
-
У винта там в скрипте много чего накручено.
Например вот здесь задается процент совпадения для каждого числа.
FOR ($i=0, $i < 11)
SWITCH($i)
CASE(0)
$pr = 95
CASE(1)
$pr = 99
// CASE(2)
// $pr = 95
CASE(3)
$pr = 93
CASE(4)
$pr = 95
CASE(5)
$pr = 95
CASE(6)
$pr = 95
CASE(7)
$pr = 95
CASE(8)
$pr = 94
// CASE(9)
// $pr = 95
DEFAULT
$pr = 100
END_SWITCH
То есть оказывается мы ищем картинки с не 100% совпадением!
А вот здесь число 16744447 это число прозрачности. Не понятно только где этот цвет...
SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"), 16744447, $pr)
1 вот как раз если бы он искал точные значения таких траблов не было бы, не мог бы он спутать точные скобки и цифры, а полу слепой найдет что хочешь. (да ты вроде убил что его можно уневерсально яко бы спользовать, но ... ) P.S. Считаю что всегда надо искать точное значение, исключение если прозрачный фон, тогда шаманить или есть динамическое освещение, решить капчу, в других случаях картинка будет одна и таже.
2 Я как раз глядел эту строку и тоже в замешательство ввели эти цифры (для меня еще многое не понятно, иногда приходится очень долго тупить что бы дочего-то дойти (понять как это работает, даже в банальном примере, так как уровень пещерного человека)
3 Хотел вроде тот скрипт использовать, так как вроде универсальный и этим привлек, но автор к первой версии много описаний сделал, а к 1.5 почти ни чего, я пол дня убил что бы он начал показывать а результат ...
С задним фоном, в плане универсальности, не получится. Двоеточие начинает находить в некоторых цифрах, отсюда ошибки распознавания.
С задним фоном? Это про прозрачность или расстояние между цифрами? (Так как в цифре 1 на 1 пиксель меньше?). Считаю что прозачный задний фон должна быть возможность включать такую возможность.
-
...приходится очень долго тупить ..., так как уровень пещерного человека
я пол дня убил что бы он начал показывать а результат ...
нужно не тупить убийствами заниматься, а хоть немного, логически думать, когда программируешь.
не с вашим подходом замахиваться на динамическое освещение и капчу.
так как уровень пещерного человека).
P.P.S Круто брать из текста фразу, а не текст целиком.
Я посмотрю как ты не будешь тупить, в вопросе, который ты знаешь на уровне пещерного человека а я буду в этом профи и буду еще тебе с наездами говорить, "А ты чего тупишь это же элементарно ватсан!!!" . Для меня большенство кода пока вообще не понятно. И с такими обьяснениями я его точно не пойму.
Извини если обидил как то, но бесит такой подход.
P.S. я тоже задний фон закрашиваю обычно в черный, когда можно, так как его просто указать значение 0...
-
"Там" накручено, потому что сделано для сложных случаев. Для этого и процент отдельный из-за сложности поиска.
В примере из этого поста ничего этого не нужно. Здесь всё просто, как дважды два. Сглаживания нет, размеры стабильные, перерендера нет.
Тупой поиск всех 10 цифр и сортировка массива по возрастанию X. Даже двоеточие искать не нужно, у нас стабильно по 2 позиции на поле.
Просто в результат вставить свой разделитель после 2 и 4 цифры.
А число прозрачности... ну не затёр из рабочего скрипта, забыл. 1.5 от 1.4 отличалось только индивидуальными условиями поиска для каждой цифры.
Код старый как говно мамонта :D.
-
"Там" накручено, потому что сделано для сложных случаев. Для этого и процент отдельный из-за сложности поиска.
В примере из этого поста ничего этого не нужно. Здесь всё просто, как дважды два. Сглаживания нет, размеры стабильные, перерендера нет.
Тупой поиск всех 10 цифр в один массив и сортировка массива по возрастанию X. Даже двоеточие искать не нужно, у нас стабильно по 2 позиции на поле.
Просто в результат вставить свой разделитель после 2 и 4 цифры.
А число прозрачности... ну не затёр из рабочего скрипта, забыл. 1.5 от 1.4 отличалось только индивидуальными условиями поиска для каждой цифры.
Код старый как говно мамонта :D.
О да винт, но без твоих пояснений я не пойму чего крутить, так как я многих поманд не знаю и не смогу номально разобраться в ней без твоей помощи. Мне нужны подсказки. Буду очень благодарен.
Мне он и понравился, что там много чего можно крутить и он может быть очень гибким, из-за этого не хочу брать менее компактный, т.к. разобравшись с ним смогу в многих местах его применять (этим нравися он).
-
Да вон Oraven написал, проще этот код использовать. Для твоего случая за глаза.
Для других случаев там нельзя снижать процент меньше 100, это не предусмотрено.
-
1.В скрипте надо задавать расстояние между цифр, или он сам определяет?
2. Где задавать, что бы не искал определенный цвет?
-
1. $m = $dead_size + 10, здесь число 10. Обычно ставлю половину ширины цифры. Например, нуля. Если единица уже, то не больше ширины единицы. Всё от шрифта зависит и его размеров/размытости.
2. Число 16744447 заменить на -1
-
С задним фоном, в плане универсальности, не получится. Двоеточие начинает находить в некоторых цифрах, отсюда ошибки распознавания.
Вот мой более компактный скрипт основанный на методе сортировки массива.
Скрипт сам определяет количество и имена картинок из папки Letters. Первый символ в имени картинки является символом распознавания. Двоеточия конечно в именах файлов недопустимы, поэтому использовал точку.
Проверено, с образцом из архива все распознает верно.
SUB(recognize, $x1,$y1, $x2,$y2, $c_ignor, $prc)
GETFILELIST($Letters_arr, "Letters\*.bmp")
FOR($Let_num=0,$Let_num<ARRSIZE($Letters_arr))
SCANPICTURE($ARR_SCAN, $x1,$y1, $x2,$y2, STRCONCAT("Letters\", $Letters_arr[$Let_num]), $c_ignor, $prc)
FOR($arr_num=0,$arr_num<ARRSIZE($ARR_SCAN),2)
ARRPUSH($ARR_OUT, $ARR_SCAN[$arr_num])
ARRPUSH($ARR_OUT, STRCUT($Letters_arr[$Let_num], 1, 1))
END_CYC
UNDEFINE($ARR_SCAN)
END_CYC
$siz = ARRSIZE($ARR_OUT)
$srtcheck = 0
$srt = 0
FOR($a=$siz-2,($a>0)&($srt=0),-2)
FOR($b=0,$b<$a,2)
IF($ARR_OUT[$b] > $ARR_OUT[$b+2])
$srtcheck = 1
$tmp = $ARR_OUT[$b]
$tmp2 = $ARR_OUT[$b+1]
$ARR_OUT[$b] = $ARR_OUT[$b+2]
$ARR_OUT[$b+1] = $ARR_OUT[$b+3]
$ARR_OUT[$b+2] = $tmp
$ARR_OUT[$b+3] = $tmp2
END_IF
END_CYC
IF($srtcheck = 0)
$srt = 1
END_IF
END_CYC
$str = ""
FOR($a=0,$a<ARRSIZE($ARR_OUT),2)
IF(STRLEN($str) > 0)
IF($ARR_OUT[$a]-$ARR_OUT[$a-2] > 10) // обпределение пробела
$str = STRCONCAT($str, " ")
END_IF
$str = STRCONCAT($str, $ARR_OUT[$a+1])
ELSE
$str = $ARR_OUT[$a+1]
END_IF
END_CYC
UNDEFINE($ARR_OUT)
END_SUB
GETSCREEN
recognize(147,783, 219,809, -1, 100) // область распознавания, цвет прозрачности, процент совпадения
LOGWRITE ($str) // в переменную $str выводятся распознанные символы
HALT
Хм... А где крутить колормод? В упор не вижу :-( ...
-
Хм... А где крутить колормод? В упор не вижу :-( ...
Снимок и возможная цветокоррекция делается непосредственно перед вызовом подпрограммы
GETSCREEN
recognize(147,783, 219,809, -1, 100)
-
С задним фоном, в плане универсальности, не получится. Двоеточие начинает находить в некоторых цифрах, отсюда ошибки распознавания.
Вот мой более компактный скрипт основанный на методе сортировки массива.
Скрипт сам определяет количество и имена картинок из папки Letters. Первый символ в имени картинки является символом распознавания. Двоеточия конечно в именах файлов недопустимы, поэтому использовал точку.
Проверено, с образцом из архива все распознает верно.
SUB(recognize, $x1,$y1, $x2,$y2, $c_ignor, $prc)
GETFILELIST($Letters_arr, "Letters\*.bmp")
FOR($Let_num=0,$Let_num<ARRSIZE($Letters_arr))
SCANPICTURE($ARR_SCAN, $x1,$y1, $x2,$y2, STRCONCAT("Letters\", $Letters_arr[$Let_num]), $c_ignor, $prc)
FOR($arr_num=0,$arr_num<ARRSIZE($ARR_SCAN),2)
ARRPUSH($ARR_OUT, $ARR_SCAN[$arr_num])
ARRPUSH($ARR_OUT, STRCUT($Letters_arr[$Let_num], 1, 1))
END_CYC
UNDEFINE($ARR_SCAN)
END_CYC
$siz = ARRSIZE($ARR_OUT)
$srtcheck = 0
$srt = 0
FOR($a=$siz-2,($a>0)&($srt=0),-2)
FOR($b=0,$b<$a,2)
IF($ARR_OUT[$b] > $ARR_OUT[$b+2])
$srtcheck = 1
$tmp = $ARR_OUT[$b]
$tmp2 = $ARR_OUT[$b+1]
$ARR_OUT[$b] = $ARR_OUT[$b+2]
$ARR_OUT[$b+1] = $ARR_OUT[$b+3]
$ARR_OUT[$b+2] = $tmp
$ARR_OUT[$b+3] = $tmp2
END_IF
END_CYC
IF($srtcheck = 0)
$srt = 1
END_IF
END_CYC
$str = ""
FOR($a=0,$a<ARRSIZE($ARR_OUT),2)
IF(STRLEN($str) > 0)
IF($ARR_OUT[$a]-$ARR_OUT[$a-2] > 10) // обпределение пробела
$str = STRCONCAT($str, " ")
END_IF
$str = STRCONCAT($str, $ARR_OUT[$a+1])
ELSE
$str = $ARR_OUT[$a+1]
END_IF
END_CYC
UNDEFINE($ARR_OUT)
END_SUB
GETSCREEN
recognize(147,783, 219,809, -1, 100) // область распознавания, цвет прозрачности, процент совпадения
LOGWRITE ($str) // в переменную $str выводятся распознанные символы
HALT
Хм... А где крутить колормод? В упор не вижу :-( ...
Все отлично работает, но из 11 раз выпадает последняя цифра, как заметил не одна и таже, куда копать? ( Тут секунды без разницы, но такая ситуация может повторица где последняя цифра важна, по этому надо разобраться)
-
Хм... А где крутить колормод? В упор не вижу :-( ...
Снимок и возможная цветокоррекция делается непосредственно перед вызовом подпрограммы
GETSCREEN
recognize(147,783, 219,809, -1, 100)
Хм... А где крутить колормод? В упор не вижу :-( ...
Спасибо понял, я думал что колор мод уже встроин в программу (скрипт)...
Оперативно отвечаешь, как и твои скрипты минимальны и быстры ).
-
И у меня невольно получилась сортировка выбором
https://habr.com/post/422085/
А у Андрея пузырьком
https://habr.com/post/414653/
-
И у меня невольно получилась сортировка выбором
https://habr.com/post/422085/
А у Андрея пузырьком
https://habr.com/post/414653/
Статью обезательно прочитаю (думаю половину не пойму, но для общего развития), но проподает последняя цифра не из-за этого? (с права, если на конце 22 или 33 или 44 и т.д то одна из цифр не отображается, видно решает что одну и туже нашел)
Еще сейчас статью где сам скрипт гляну, так как была там похожая проблема.
Все работает как надо, настроин... Спасибо.
-
Хм... А где крутить колормод? В упор не вижу :-( ...
Снимок и возможная цветокоррекция делается непосредственно перед вызовом подпрограммы
GETSCREEN
recognize(147,783, 219,809, -1, 100)
Хм... А где крутить колормод? В упор не вижу :-( ...
Спасибо понял, я думал что колор мод уже встроин в программу (скрипт)...
Оперативно отвечаешь, как и твои скрипты минимальны и быстры ).
Работает тоже на ура, но забавный трабл :-) откуда буква на конце??? 17:28:01 01.45.57d (не дописывал, появляется когда 7 в конце, в друхих случаях её нет)
Спасибо за оперативный отзив и помощь.
(еще вопрос, 1) как менять размер цифр, 2) можно использовать 2 вида картинок, для разных цифр? как это делать?)
-
Если навскидку, то вероятно что-то не так с координатами, выбранными для анализа (вариант - добавить в конце подпрограммы перед "END_SUB" строчку "SCREENSHOTEX($x1,$y1, $x2,$y2, "Image_", 0)". Увидите, полностью ли в область анализа попало число (иначе, почему пропадает последняя цифра?), а также не попало ли что-то лишнее.
Судя по коду скрипта, букве взяться неоткуда, кроме как из образца "Letters\d.bmp" . Возможно, полное имя файла другое, но начинается определенно на "D". Если важны для анализа только цифры, то можете просто убрать это файл оттуда (первопричиной, вероятно, служит то, что 7 узкая, и анализируется также следующий знак, вместе с ней образующий эту картинку - например "7." читается как "7 Двоеточие").
Вообще, если формат строки известен заранее (где точки, где двоеточия в числе/дате предугадать не сложно) - можно оставить только 10 образцов (цифры 0-9), а двоеточия и точки расставлять вместо пробелов программно. Такой вариант позволит справляться с изменяющимся фоном (заменяем "-1" в "recognize(147,783, 219,809, -1, 100)" на цвет фона у картинок-образцов).
-
Хм... А где крутить колормод? В упор не вижу :-( ...
Снимок и возможная цветокоррекция делается непосредственно перед вызовом подпрограммы
GETSCREEN
recognize(147,783, 219,809, -1, 100)
Хм... А где крутить колормод? В упор не вижу :-( ...
Спасибо понял, я думал что колор мод уже встроин в программу (скрипт)...
Оперативно отвечаешь, как и твои скрипты минимальны и быстры ).
Работает тоже на ура, но забавный трабл :-) откуда буква на конце??? 17:28:01 01.45.57d (не дописывал, появляется когда 7 в конце, в друхих случаях её нет)
Спасибо за оперативный отзив и помощь.
Спасибо что пытаетесь разобраться в чужом скрипте, первый сделал, даже сообщение отредактировал ( есть в скрипте защита, что бы соседние числа автоматом не зацепил, подрегулировал уменьшил слепую зону $SHIFT_X = 10 // смещение (кол-во игнор пикселов вокруг найденного)
$SHIFT_Y = 15)
А насчет буквы буду автора ждать.
-
Полностью тему не читал, но так, ради интереса, можешь попробовать еще один вариант распознавания. На настройку для твоего примера из первого поста у меня ушло пару сек.
Взял скрипт из этого сообщения http://crapware.aidf.org/forum/index.php?topic=88.msg23101#msg23101
Далее видео по настройке и обучению : видео на youtube (https://youtu.be/TeoS8NK4FHg)
-
Помогите с усоловием, не знаю как составить.
$a="1.bmp" // если а равна картинке (*.bmp любой) выполняется, если $a=0 скрипт не выолняется
IF(0,$a=0) // Так не работает, как правильно написать не знаю.
ELSE
// Скрипт
END_IF
Заранее благодарен.
-
Помогите с усоловием, не знаю как составить.
$a="1.bmp" // если а равна картинке (*.bmp любой) выполняется, если $a=0 скрипт не выолняется
IF(0,$a=0) // Так не работает, как правильно написать не знаю.
ELSE
// Скрипт
END_IF
Заранее благодарен.
Конечно можно было бы просто написать так
$a="1.bmp"
IF($a!0) // если $a не равно 0
LOGWRITE ("да")
ELSE
LOGWRITE ("нет")
END_IF
HALT
Однако при сравнении чисел с текстом выдает не верный результат.
Поэтому мы переводим числа и текст в md5 хеш и сравниваем уже хеши.
$a="1.bmp"
IF(STRMD5($a)!STRMD5(0)) // если хеши $a и 0 не равны
LOGWRITE ("да")
ELSE
LOGWRITE ("нет")
END_IF
HALT
Твой скрипт:
$a="1.bmp"
IF(STRMD5($a)!STRMD5(0)) // если $a не равно 0
// Скрипт
END_IF