-
В некоторых браузерках кнопки действий могут перемещаться,а значит lclick с ними не сработает. Так же весьма неудобно и нерационально делать тысячи картинок со значениями здоровья(тем более что при таком количестве сравнений ошибиться проще простого,да и прога может подвиснуть)
Что конкретно нужно: кликер анализирует веб страницу (или область,заданную по координатам пользователем) и ищет надпись,допустим "бить врага" и помещает координаты в лог. Дальше находит среднее арифметическое между координатами (каждое среднее арифметическое ставится пользователем как переменная) дальше ,к примеру,команда lclick по указанным переменными координатам. Либо ,если брать в пример здоровье,кликер берет из области,заданной пользователем ,значение и сравнивает его с эталонным.в зависимости от условий скрипта он выполняет какие-либо действия. Т.е. для выполнения всего этого нужно 2 новых команды: найти текст и вычислить среднее арифметическое координат текста
-
Среднее арифметическое ты сейчас и там можешь посчитать, что мешает?
Поиск текста обсуждался в теме поиск текста в браузере. Да, хорошо бы делать это быстро и просто.
Только сдается мне что тебе это не подойдет. Потому что в большинстве таких игр текст на экране это не текст, а картинка с надписью. Нет, внутри программы это чаще именно текст, но тебе это не поможет. Попробуй выделить свою надпись и скопировать. Не выделится.
А кликкер совсем не "фаинридер".
-
А вообще было бы неплохо если бы в кликерман был интегрирован файнридер, или какая-нибудь подобная библиотека.
Задаешь область поиска, цвет фона и получаешь текст этой области.
И так же с поиском.
Хотя да, это достаточно трудно реализовать. Да ещё и неизвестно где такую библиотеку найти :)
-
Задаешь область поиска, цвет фона и получаешь текст этой области.
AGClient ;D
-
AGClient ;D
Как вариант... Только производительность нужна хотя бы 10 китайцекартинок в секунду. ;D :'(
-
Среднее арифметическое ты сейчас и там можешь посчитать, что мешает?
Поиск текста обсуждался в теме поиск текста в браузере. Да, хорошо бы делать это быстро и просто.
Только сдается мне что тебе это не подойдет. Потому что в большинстве таких игр текст на экране это не текст, а картинка с надписью. Нет, внутри программы это чаще именно текст, но тебе это не поможет. Попробуй выделить свою надпись и скопировать. Не выделится.
А кликкер совсем не "фаинридер".
я знаю,что прошу:)) среднее арифметическое нужно,чтобы определять координаты кнопки(они довольно часто разные) а кнопка именно в форме ссылки ,а не картинки. была бы картинка - я бы тему не создавал
-
Задаешь область поиска, цвет фона и получаешь текст этой области.
AGClient ;D
фон там для всех кнопок одинаков
-
я знаю,что прошу:)) среднее арифметическое нужно,чтобы определять координаты кнопки(они довольно часто разные) а кнопка именно в форме ссылки ,а не картинки. была бы картинка - я бы тему не создавал
скажи что тебе мешает посчитать среднее арифметическое? Сложение и деление пока работают.
Ты бы показал свои кнопки, что гадать.
Если ссылка, то должна находиться по CTRL+F (+F3).
Если не находится, то алис... для кликера это картинка. Может и можно как то, он все молчат.
-
я знаю,что прошу:)) среднее арифметическое нужно,чтобы определять координаты кнопки(они довольно часто разные) а кнопка именно в форме ссылки ,а не картинки. была бы картинка - я бы тему не создавал
скажи что тебе мешает посчитать среднее арифметическое? Сложение и деление пока работают.
Ты бы показал свои кнопки, что гадать.
Если ссылка, то должна находиться по CTRL+F (+F3).
Если не находится, то алис... для кликера это картинка. Может и можно как то, он все молчат.
полезно,но не то. нужен анализ текста(цифр,если быть точным)в определенной области окна,сравнение их с эталонным значением и действие по описанным инструкциям. допустим,если здоровье ниже 2000,то лечить себя и т.д.
-
т.е. как я вижу свое предложение в виде куска куда:
1.$etalon=2000
2.$xp=analyz(координаты левого верхнего угла прямоугольной области),(координаты правого нижнего угла)
3.if($xp<$etalon) lclik(100,100) else lclick (100,20)
4. end_if
-
ну так что,это реализуемо?
-
что это то? finereader прикрутить?
в кликере, по крайней мере последних версий, достаточно функционала чтоб найти что угодно где угодно. надо просто раскинуть мозгами.
для браузера решение вообще на поверхности лежит - Ctrl + F
-
Там смотря как цифры в браузере представлены.
Иногда помогает простой даблклик по корам в районе цифры и команда туклип.
Потом анализ переменных.
Но бывает и так, что к цифре даблкликом не подобраться.
В таких случаях обычно выходил из положения командой ифпикчеин.
-
Там смотря как цифры в браузере представлены.
Иногда помогает простой даблклик по корам в районе цифры и команда туклип.
Потом анализ переменных.
Но бывает и так, что к цифре даблкликом не подобраться.
В таких случаях обычно выходил из положения командой ифпикчеин.
ифпикчеин тут не подойдет. придется делать более 6 тысяч картинок
-
что это то? finereader прикрутить?
в кликере, по крайней мере последних версий, достаточно функционала чтоб найти что угодно где угодно. надо просто раскинуть мозгами.
для браузера решение вообще на поверхности лежит - Ctrl + F
контрол ф неплох,но для анализа он не подойдет,потому что делать 6-7 тысяч комбинаций.... на одну проверку всех этих цифросочетаний у скрипта будет уходить немалое время,да и размер будет....
-
ифпикчеин тут не подойдет. придется делать более 6 тысяч картинок
Зачем 6000?
Если капча, то есть антикапча.
Если обычная цифра, то их разнообразие ограничивается всего 10 картинками.
Анализировал в флашигре (файерфокс) через ифпикчеин цифры размером шрифта примерно 8 размера.
п.с.
Делал давно. В новых версиях ещё не пробовал.
-
ифпикчеин тут не подойдет. придется делать более 6 тысяч картинок
Зачем 6000?
Если капча, то есть антикапча.
Если обычная цифра, то их разнообразие ограничивается всего 10 картинками.
Анализировал в флашигре (файерфокс) через ифпикчеин цифры размером шрифта примерно 8 размера.
п.с.
Делал давно. В новых версиях ещё не пробовал.
т.е. для распознавания нужно будет загонять все это дело(картинку с цифрами) на сайт для расшифровки?
-
. для распознавания нужно будет загонять все это дело(картинку с цифрами) на сайт для расшифровки?
Да. Как-то так.
Там одна капча вроде бы 3 копейки на наши деньги стоит.
3 рубля за сотню.
30 р за тысячу.
В Вашем случае 180 рублей за все 6000 картинок.
Если речь о капче , разумеется.
Вы так и не сформулировали свою задачу.
А мы тут гадаем.
-
Почему гадаете? я ж вроде объяснял задачу?
короче говоря вот пример страницы:
параметр №1;параметр №2
бесполезные картинки и т.д.
Ненужный параметр№1/ненужный параметр №2
параметры №3 №4 параметры№5 №6
Кнопка активности №1 // может быть,а может и отсутствовать
Кнопка активности №2
Кнопка активности №3
Кнопка активности №4
Кнопка активности №5
Кнопка активности №6 //появляется в зависимости от значений параметров №1 и №2
Кнопка неигровой активности(от 2 до 4 штук)
около 20 строк лога
Кнопка активности №7
Кнопка активности №8
Кнопка активности №9.
Что от этого нужно:
Если Параметр №1 <2000 - кнопка активности №1
Если Параметр №1 >2000 - кнопка активности №2
Если Параметр №3+параметр №4 < параметр №5 + параметр №6,то - кнопка неигровой активности №2
Если в логе есть "надпись" то - кнопка активности №4.
вот в принципе и все. примечание - работа скрипта поссылочно не подойдет - ссылки разные всегда,даже для одной и той же кнопки,т.е. искать придется именно название кнопки
-
Видимо, Резнов, антикапчу вообще не рассматривает?!
Если я правильно понял, то задача состоит в анализе игровых данных, в форме печатного текста или чисел.
Резнов, если хочешь научить скрипт распознавать именно текст, то следует вести попиксельную визуальную проверку.
-
Напиши свою подпрограмму распознования чисел по картинкам цифр под свой шрифт.
Картинок понадобится не 6000, а всего 11.
Например как товарищ: http://crapware.aidf.org/forum/index.php?topic=134.0
Но только без ошибок и под свою задачу.
Главное чтоб сглаживание сильно не мешало (каждый раз разные изображения цифр).
Ещё нужно учесть диапазон чисел, выводится ли число с соблюдением разрядности. Пример:
5432
32
или
5432
32
И как нибудь определять конец числа в первом случае и начало в обоих (решено). Или маркер или изображение границы кнопки...
-
Видимо, Резнов, антикапчу вообще не рассматривает?!
Если я правильно понял, то задача состоит в анализе игровых данных, в форме печатного текста или чисел.
Резнов, если хочешь научить скрипт распознавать именно текст, то следует вести попиксельную визуальную проверку.
я как бэ не ас в кликере:) как это сделать?
-
Резнов. твоя тема: Анализ текста в окне.
michael. его тема: Помогите с процедурой распознавания чисел.
У вас может быть схожая задача. В его теме приведён пример кода. Спишись с ним и работайте над темой вместе.
И у кликера появится собственный OCR проект. :)
В любом случае, Резнов, надо радоваться жизни в совместном творчестве.
Брать скрипт и вникать ))
-
Аж самому стало интересно решить задачу. В принципе в голове 2-3 схемы есть давно. Нет конкретной задачи или надобности. Еще интересней какой из вариантов выигрышней по скорости.
Моя беда, стараюсь почти все сделать универсальным и настраиваемым. Если скрипт писать под конкретную задачу выйдет в 2 раза меньше.
-
Вот набросал распознавалку чисел. В основном для использования в играх, т.к. есть ограничения...
Старался сделать универсальным и настраиваемым. Не важно выравнивание идёт по первому или последнему разряду.
Старая версия, ещё под 4.7
[spoiler]Вариант скрипта с последовательным перебором разрядов.
Хотел обойтись без текстовых файлов, только переменные. Использование текстовых файлов уменьшило бы размер скрипта, но я думаю сказалось бы незначительно на скорости работы и удобстве настройки.
Скрипт при внедрении лучше организовать как подпрограмму.
О ограничениях.
- Только целые положительные числа. Думаю для игр этого хватит, здоровье там всякое, сила и т.п.
- Максимум 10 разрядов. Если кровь из носа - можно переписать скрипт на другое кол-во :)
- Расположение цифр равномерное. Что это значит: разряды должны идти через равный промежуток
299000, а не 299 000 и т.п. - Определение конца числа по маркеру (картинке) либо по отсутствию найденных цифр. Файл *11.bmp должен быть всё равно, например мой digit_11.bmp
Настройка.
Не пугаться! Письменно выглядит много, но всё на самом деле просто.
- Необходимо заготовить картинки с цифрами 1,2,3,4,5,6,7,8,9,0 дать им соответствующие имена digit_1.bmp-digit_0.bmp
Можно заготовить маркер окончания digit_11.bmp - Замерить шаг разрядов - расстояние в пикселах от начала одной цифры до начала следующей и присвоить переменной $sdvig значение чуть меньше (можно на 1-2 пиксела, для больших шрифтов можно и больше).
- Если в пределах вашего скрипта буде распознаваться несколько шрифтов, при вызове подпрограммы нужно каждый раз задавать $sdvig и префикс имён файлов $pref. Если шрифт один - только один раз.
- При вызове задаём координаты поля в котором будет искаться число
$field_x1, $field_y1, $field_x2=, $field_y2 - Результат возвращается в переменную $res, если не найдено $res=-1.
Сам скрипт.
#name "Распознавание чисел"
// Author: Vint
// Version: 1.1 (30.01.2013)
// Результат возвращается в $res если не найдено $res=-1
// Только целые числа. Максимум 10 разрядов. Расположение цифр равномерное.
// Вариант скрипта с последовательным перебором разрядов
// Хотел обойтись без текстовых файлов, только переменные
//====== переменные которые задаются 1 раз если всего один шрифт ====
//если в скрипте будет искаться несколько наборов шрифтов, то задавать каждый раз при вызове
$sdvig=6 // сдвиг, чуть меньше чем ширина 1 цифры с отступом
$pref="textures\digit_" // префикс имён файлов с цифрами
//====== переменные которые задаются при вызове поиска ====
//если место поиска всего одно, задавать только один раз
$field_x1=0 // поле под число, координата X1
$field_y1=0 // поле под число, координата y1
$field_x2=0 // поле под число, координата X2
$field_y2=0 // поле под число, координата y2
//====== внутренние переменные ====
$razr_max=0 // максимальная разрядность числа
$xmin=5000
$res=-1 // очищаем результат
$i=0 // очищаем результат
//================== начало ====================================================
FOR ($obhod, $obhod<10) // очищаем результат
GOSUB(sdvig_razryada)
END_CYC
GETSCREEN
FOR ($i, $i<10) // ищем самую левую цифру
IF_PICTURE_IN ($field_x1,$field_y1,$field_x2,$field_y2, STRCONCAT($pref,$i,".bmp"))
IF($_return1<$xmin)
$xmin=$_return1
INC($razr_max)
$res1=$i
IF($res1=10) // учитываем что 10-я картинка это 0
$res1=0
END_IF
END_IF
END_IF
END_CYC
IF($xmin=5000)
LOGWRITE ("число не найдено")
GOTO(endfindnumber)
END_IF
$field_x1=$xmin+$sdvig
$perebor=1
WHILE($perebor>0)
$razr_temp=$razr_max
FOR ($i,$i<11)
IF_PICTURE_IN ($field_x1,$field_y1,$field_x1+INT($sdvig*1.3),$field_y2, STRCONCAT($pref,$i,".bmp"))
$field_x1=$_return1+$sdvig
IF($i<11)
INC($razr_max)
GOSUB(sdvig_razryada)
IF($res1=10) // учитываем что 10-я картинка это 0
$res1=0
END_IF
END_IF
IF($i=11) // проверка если нашли маркер конца ...11.bmp, то конец
$perebor=0
END_IF
$i=11 // выходим из цикла
END_IF
END_CYC
IF(($razr_temp=$razr_max) | ($razr_max=10)) // проверка если не нашли или уже 10 разрядов, то конец
$perebor=0
END_IF
END_CYC
// подсчитываем
$res=$res1+$res2*10+$res3*100+$res4*1000+$res5*10000+$res6*100000+$res7*1000000+$res8*10000000+$res9*100000000+$res10*1000000000
endfindnumber:
LOGWRITE ("Найдено число: ",$res)
HINTPOPUP("Найдено число: ",$res)
HALT
//==============================================================================
SUB(sdvig_razryada)
$res10=$res9
$res9=$res8
$res8=$res7
$res7=$res6
$res6=$res5
$res5=$res4
$res4=$res3
$res3=$res2
$res2=$res1
$res1=$i
END_SUB
//==============================================================================
Во вложении Сам скрипт "Распознавание чисел 1.1.cms"+ скрипт для демонстрации и проверки "Распознавание чисел 1.1 пример Clickermann.cms" полностью настроенный с картинками.
Запускаем "Распознавание чисел 1.1 пример Clickermann.cms"
Открываем редактор кликера на полный экран. Распознаётся число в поле редактора "Цвет:".
Можно наводить мышь на любой цвет и горячими клавишами запускать скрипт. Результат в трее и в логе.
P. S. Жаль на форуме затишье. Становится скучно.[/spoiler]
Обновил под Clickermann 4.11
Версия 1.3
Точнее полностью переписал. Раньше так не хватало массивов и scanpicture.
Заодно избавился от ограничений в 10 разрядов и обязательного отсутствия разделения разрядов
Теперь хоть 100000999, хоть 100 000 999
Файл скрипта во вложении "Распознавание чисел 1.3.cms"
Оформлено в подпрограмму.
Код
[spoiler]#name "Распознавание чисел"
// Author: Vint
// Version: 1.3 (01.04.2015)
// Скрипт для Clickermann v4.11 002
// подключение number_read
// #include "Распознавание чисел 1.3.cms"
//==============================================================================
SUB(LOG_ARR)
//LOGWRITE ("Размер массива: ",ARRSIZE($num))
LOGWRITE (" ")
LOGWRITE (" 0 1 2 3 4 5 6 7 8 9")
LOGWRITE (" ")
$maxn = 0
FOR ($i=0, $i < 10)
IF($num[$i] > $maxn)
$maxn = $num[$i]
END_IF
END_CYC
FOR($row=0, $row < 2)
$text = ""
FOR ($i=0, $i < 10)
$l = $num[10*$row + $i]
FOR ($j=0, $j < (5 - STRLEN($l)))
$text = STRCONCAT($text, " ")
END_CYC
$text = STRCONCAT($text, $l)
END_CYC
LOGWRITE ($text)
END_CYC
LOGWRITE (" ")
FOR($row=2,$row < $maxn + 2)
$text = ""
FOR ($i=0, $i < 10)
IF($num[$i] > ($row - 2))
$l = $num[10*$row + $i]
ELSE
$l = "X"
END_IF
FOR ($j=0, $j < (5 - STRLEN($l)))
$text = STRCONCAT($text, " ")
END_CYC
$text = STRCONCAT($text, $l)
END_CYC
LOGWRITE ($text)
END_CYC
LOGWRITE (" ")
END_SUB
//==============================================================================
SUB(number_read, $f_x1,$f_y1,$f_x2,$f_y2, $pref)
// $f_x1, $f_y1 область ЛевоВерх
// $f_x2, $f_y2 область ПравоНиз
// $pref = "textures\digit_" префикс имён файлов с цифрами (для разных шрифтов)
// Результат возвращается в $res если не найдено $res=-1
// Только целые числа.
// $pref зависит от шрифта поиска
$res = -1 // очищаем ответ
UNDEFINE($num) // главный массив данных
UNDEFINE($n_temp) // временный массив для SCANPICTURE
GETSCREEN
FOR ($i=0, $i < 10)
SCANPICTURE($n_temp, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"))
$a_size = ARRSIZE($n_temp)
$num[$i] = $a_size / 2 // заносим количество элементов в этом разряде
$num[$i+10] = 0 // счётчик разрядов, пока 0
IF($a_size > 0)
FOR($j=0, $j < $a_size, 2)
$num[10*($j/2 + 2)+ $i] = $n_temp[$j] // заносим коорд X в массив
END_CYC
UNDEFINE($n_temp)
END_IF
END_CYC
IF(ARRSIZE($num) > 0)
IF($log = 1)
LOG_ARR()
END_IF
$repeat = 1
WHILE($repeat = 1)
$empty = 0
$xmin = 5000
$pos_min = 0
FOR ($i=0, $i < 10)
IF($num[$i] > ($num[10 + $i]))
$empty = 1
$l = $num[10 * ($num[10+$i]+2) + $i]
IF($l < $xmin)
$xmin = $l
$pos_min = $i
END_IF
END_IF
END_CYC
IF($empty = 0)
$repeat = 0
ELSE
IF($res = -1)
$res = STRCONCAT("", $pos_min) // если первыё символ
ELSE
$res = STRCONCAT($res, $pos_min) // последующие символы
END_IF
$num[10 + $pos_min] = ($num[10 + $pos_min]) + 1 // INC счётчик для разряда
END_IF
END_CYC
$res = INT($res)
ELSE
LOGWRITE ("число не найдено")
END_IF
END_SUB
//LOGCLEAR
//$log = 1
//number_read(271,385,335,401, "textures\digit_")
//LOGWRITE ("Найдено число: ",$res)
//HINTPOPUP("Найдено число: ",$res)
//HALT
[/spoiler]
Тест в редакторе кликера и пример использования файл: "Тестирование распознавалки 1.3 XP.cms"
Видео теста: http://youtu.be/d55wq7cbVe8.
Add версия 1.4
Поддерживает числа с запятой.
Запятую/точку заготавливаем как digit_10.bmp (или свой префикс)
Возвращает результат как строку! Для перевода в число нужно учесть диапазон.
[spoiler]Для перевода в число нужно пробовать... там все сложно с диапазонами
Если число 0 целых...
0.0001234545
то перевести можно до 13 знака
$res = ROUND($res, -13)
если до
21.46999999
то до 8-го знака после запятой
$res = ROUND($res, -8)
для бОльших нужно пробовать
для целых всё сохраняется от старой версии, применяем только сами
$res =INT($res)
[/spoiler]
Код:
[spoiler]#name "Распознавание чисел"
// Author: Vint
// Version: 1.4 (14.04.2015)
// Скрипт для Clickermann v4.11 002
// подключение number_read
// #include "Распознавание чисел 1.4.cms"
//==============================================================================
SUB(LOG_ARR)
//LOGWRITE ("Размер массива: ",ARRSIZE($num))
LOGWRITE (" ")
LOGWRITE (" 0 1 2 3 4 5 6 7 8 9 .")
LOGWRITE (" ")
$maxn = 0
FOR ($i=0, $i < 11)
IF($num[$i] > $maxn)
$maxn = $num[$i]
END_IF
END_CYC
FOR($row=0, $row < 2)
$text = ""
FOR ($i=0, $i < 10)
$l = $num[11*$row + $i]
FOR ($j=0, $j < (5 - STRLEN($l)))
$text = STRCONCAT($text, " ")
END_CYC
$text = STRCONCAT($text, $l)
END_CYC
LOGWRITE ($text)
END_CYC
LOGWRITE (" ")
FOR($row=2,$row < $maxn + 2)
$text = ""
FOR ($i=0, $i < 11)
IF($num[$i] > ($row - 2))
$l = $num[11*$row + $i]
ELSE
$l = "X"
END_IF
FOR ($j=0, $j < (5 - STRLEN($l)))
$text = STRCONCAT($text, " ")
END_CYC
$text = STRCONCAT($text, $l)
END_CYC
LOGWRITE ($text)
END_CYC
LOGWRITE (" ")
END_SUB
//==============================================================================
SUB(number_read, $f_x1,$f_y1,$f_x2,$f_y2, $pref)
// $f_x1, $f_y1 область ЛевоВерх
// $f_x2, $f_y2 область ПравоНиз
// $pref = "textures\digit_" префикс имён файлов с цифрами (для разных шрифтов)
// Результат возвращается в $res если не найдено $res=-1
// Только целые числа.
// $pref зависит от шрифта поиска
$res = -1 // очищаем ответ
UNDEFINE($num) // главный массив данных
UNDEFINE($n_temp) // временный массив для SCANPICTURE
GETSCREEN
FOR ($i=0, $i < 11)
SCANPICTURE($n_temp, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"))
$a_size = ARRSIZE($n_temp)
$num[$i] = $a_size / 2 // заносим количество элементов в этом разряде
$num[$i+11] = 0 // счётчик разрядов, пока 0
IF($a_size > 0)
FOR($j=0, $j < $a_size, 2)
$num[11*($j/2 + 2)+ $i] = $n_temp[$j] // заносим коорд X в массив
END_CYC
UNDEFINE($n_temp)
END_IF
END_CYC
IF(ARRSIZE($num) > 0)
IF($log = 1)
LOG_ARR()
END_IF
$repeat = 1
WHILE($repeat = 1)
$empty = 0
$xmin = 5000
$pos_min = 0
FOR ($i=0, $i < 11)
IF($num[$i] > ($num[11 + $i]))
$empty = 1
$l = $num[11 * ($num[11+$i]+2) + $i]
IF($l < $xmin)
$xmin = $l
$pos_min = $i
END_IF
END_IF
END_CYC
IF($empty = 0)
$repeat = 0
ELSE
IF($res = -1)
$res = STRCONCAT("", $pos_min) // если первыё символ
ELSE
IF($pos_min < 10)
$res = STRCONCAT($res, $pos_min) // последующие символы цифры
ELSE
$res = STRCONCAT($res, ".") // последующие символы зпт
END_IF
END_IF
$num[11 + $pos_min] = ($num[11 + $pos_min]) + 1 // INC счётчик для разряда
END_IF
END_CYC
//$res = ROUND($res, -8)
ELSE
LOGWRITE ("число не найдено")
END_IF
END_SUB
//LOGCLEAR
//$log = 1
//number_read(271,385,335,401, "textures\digit_")
//LOGWRITE ("Найдено число: ",$res)
//HINTPOPUP("Найдено число: ",$res)
//HALT
[/spoiler]
Add версия 1.5
Версия 1.4 с поддержкой поиска с COLORMODE. Для каждой цифры можно задать индивидуальный %
-
Винт,круто,очень круто. В кликере я почти что полный нупь,так что можно нубский вопрос: текст можно этим кодом найти?
-
Винт,круто,очень круто. В кликере я почти что полный нупь,так что можно нубский вопрос: текст можно этим кодом найти?
Текст... Нет. Ты прямо меня в ступор ввел этим вопросом.
Я не вижу задачи для которой понадобится распознавать текст. Ты же не собираешься кликером проверять правописание или делать переводчик. Для всех задач где целесообразно использовать кликер, достаточно поиска картинки.
Хотя задачу придумать можно конечно.
-
угу, я вот придумал… на свою голову
"сигнализация" на случай грабежа твоего города в браузерке (flash).
хочется, чтобы она орала ник грабителя, а он только в картинке есть
ну это так, лирическое отступление :)
-
угу, я вот придумал… на свою голову
"сигнализация" на случай грабежа твоего города в браузерке (flash).
хочется, чтобы она орала ник грабителя, а он только в картинке есть
ну это так, лирическое отступление :)
ну по аналогии раздуйте данный скрипт до распознавания текста только длина текста будет сильно ограничена и количество букв тут не 10 будет =)
-
Обновил распознавалку под Clickermann 4.11
http://crapware.aidf.org/forum/index.php?topic=88.msg1571#msg1571
-
Спасибо за пример скрипта, мне помогло но частично. Я делаю шаблон цифр, сохраняю и в этом-'t окне он находит нужные мне числа. Но допустим когда обновляется строка порядок чисел меняется или количество чисел то пиксели в цифрах тоже меняются. Как я понял тут идет сравнение по пиксельно 1в1 100% и если сходство будет 99% то число не найдется?
Вот пример единиц, они разные (в середине отличается), соответственно он найдет только одну единицу если я сделаю шаблон по центральной.
(http://ipic.su/img/img7/fs/111.1429098625.jpg)
Собственно это можно обойти? Или какую программу посоветуете?
-
COLORMODE+%
обговаривалось много раз уже.
В зависимости от фона, обычно режим 7 или 8 плюс рассчитанный процент.
Если есть возможность отключить сглаживание - это нужно сделать.
Все системные шрифты и большинство во Flash используют сглаживание выставленное в системе.
Если это отдельный клиент, то может быть в его настройках... а может и не быть.
-
Спасибо большое за ответ!
1) Начал искать параметры COLORMODE+%
Нашел 2 поста с этим и то там используется COLORMODE($colorm, $stcoord_X,$stcoord_Y,$encoord_X,$encoord_Y) параметр + координаты, а где %?
2) COLORMODE надо было вставлять после getscreen так?
GETSCREEN
COLORMODE(8)
FOR ($i=0, $i < 10)
SCANPICTURE($n_temp, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"))
$a_size = ARRSIZE($n_temp)
$num[$i] = $a_size / 2 // заносим количество элементов в этом разряде
$num[$i+10] = 0 // счётчик разрядов, пока 0
IF($a_size > 0)
FOR($j=0, $j < $a_size, 2)
$num[10*($j/2 + 2)+ $i] = $n_temp[$j] // заносим коорд X в массив
END_CYC
UNDEFINE($n_temp)
END_IF
END_CYC
3) Как отключить сглаживание шрифта в Flash player? Отключил в системе Win 7, в драйвере nvidia, в игре. Не помогло.
-
Спасибо большое за ответ!
1) Начал искать параметры COLORMODE+%
Нашел 2 поста с этим и то там используется COLORMODE($colorm, $stcoord_X,$stcoord_Y,$encoord_X,$encoord_Y) параметр + координаты, а где %?
2) COLORMODE надо было вставлять после getscreen так?
3) Как отключить сглаживание шрифта в Flash player? Отключил в системе Win 7, в драйвере nvidia, в игре. Не помогло.
1) % в SCANPICTURE
2) лучше так (+ в SCANPICTURE стоит совпадение 80%)
GETSCREEN
COLORMODE(8, $f_x1,$f_y1,$f_x2,$f_y2)
FOR ($i=0, $i < 10)
SCANPICTURE($n_temp, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"),-1,80)
$a_size = ARRSIZE($n_temp)
$num[$i] = $a_size / 2 // заносим количество элементов в этом разряде
$num[$i+10] = 0 // счётчик разрядов, пока 0
IF($a_size > 0)
FOR($j=0, $j < $a_size, 2)
$num[10*($j/2 + 2)+ $i] = $n_temp[$j] // заносим коорд X в массив
END_CYC
UNDEFINE($n_temp)
END_IF
END_CYC
3) А как отключал?
Персонализация -> Экран -> Настройка текста ClearType -> галка Включить ClearType
или
Свойства системы -> параметры быстродействия -> сглаживать неровности экранных шрифтов
Шрифт Segoe UI менял?
И перезагрузиться.
Но может и не помочь. Смотря как программист приложения сделал вывод текста.
-
3) А как отключал?
Свойства системы -> параметры быстродействия -> сглаживать неровности экранных шрифтов
Шрифт Segoe UI не менял
Перезагрузиться.
-
Точно нужна встроенная распознавалка текста, хотя бы нормального, а не капча-извратного. Это избавило бы в некоторых случаях от горы дурной работы по созданию и тесту 100500 картинок на все возможные варианты - разные слова разными цветами, размерами и видами шрифтов. И не надо с нуля велосипед изобретать - наверняка тут никто не обломается, если его аккуратно готовый откуда-нибудь содрать. Или, на худой конец, создать онлайн-сервис спецом под работу в связке с кликерманом, или, хотя бы, указать на 1 или несколько самых удобных из существующих. Разумеется, бесплатных и безлимитных, чтобы без проблем справлялись с небольшими, но часто подкидываемыми скриншотами с малыми объёмами текста.
-
А они точно есть такие? Может вариант только тот же файнридер.
Я год назад задавался целью найти сетевую или консольную распознавалку. Бесплатной сетевой не нашел.
Нашел 2 или 3 консольные. Но там мало того что ставить прописывать не просто было. И они только на английский язык заточены. К одной есть модуль русского языка.. По дефолту эта хрень даже цифры путает набранные не рубленным шрифтом. Про буквы я вообще молчу. Правда это по дефолту. Ее можно там обучать настраивая на другие шрифты. Но процедура не тривиальна и я забил.
В общем хреновина сыровата, не зря всякие файнридеры уже больше десятка лет развиваются. В первых версиях видать тоже так распознавало.
-
Проблема с поиском ясное дело. Выложи образцы и шоты на которых распознаётся. Желательно несколько и конечно не пожатое.
-
Неа. Вчера сразу попробовал, но так на авось. В ФШ не сравнивал для анализа.
Сегодня времени не было глянуть.
-
Какой баг?
Проблема в большом размере шрифта. Область сглаживания очень большая 1-4 пкс. И при рендеринге оригинал елозит во всех направлениях на уровне субпикселов.
В итоге одна четвёрка отличается от другой гораздо больше чем они обе от единицы :o Ну и т.п.
Сейчас ещё попробую вместо 8 колормода седьмой, но боюсь это не даст результата.
Стоит подумать о другом методе. Например поделить на зоны цифр и считать в области сумму чистого цвета 10310011
Может там граница более чёткая.
-
Она ещё и меняется? :o
А если собьешь назад точно вернуть можно?
Тогда до 10. Сэм-восэм :)
Или 8-10.
Подожди пока я эти попробую.
-
И при этом меняется размер шрифта?
-
Вот скрипт с картинками.
Распознавание переделано под COLORMODE использовал 7.
Подбор процента только на тех 3 примерах что есть. На них всё чётко определяет.
На примерах нет цифр 2 и 9, для них не выставлен процент!!!
Опасаюсь за цифру 3, она самая нестабильная, если на ней будет сбоить, нужно переделать образец из другого скрина и поправить процент.
#name "Распознавание чисел"
// Author: Vint
// Version: 1.5 (28.05.2015)
// Скрипт для Clickermann v4.11 002
// подключение number_read
// #include "Распознавание чисел 1.5.cms"
//==============================================================================
SUB(sort_arr) // сортируем $data по возрастанию X
$data_size = ARRSIZE($data)
FOR($out=0, $out < $data_size, 2)
$min = $data[$out]
$ind = $out
FOR($in=($out+2), $in < $data_size, 2)
IF($data[$in] < $min)
$min = $data[$in]
$ind = $in
END_IF
END_CYC
//LOGWRITE("минимум: ", $min, " ", $ind, " - ", $out)
$X = $data[$ind]
$Y = $data[$ind+1]
$data[$ind] = $data[$out]
$data[$ind+1] = $data[$out+1]
$data[$out] = $X
$data[$out+1] = $Y
//LOGWRITE($X, " / ", $Y)
WAITMS(20)
END_CYC
END_SUB
//==============================================================================
SUB(number_read, $f_x1,$f_y1,$f_x2,$f_y2, $pref, $c_mode)
// $f_x1, $f_y1 область ЛевоВерх
// $f_x2, $f_y2 область ПравоНиз
// $pref = "textures\digit_" префикс имён файлов с цифрами (для разных шрифтов)
// $c_mode - режим COLORMODE
// Результат возвращается в $res если не найдено $res=-1
$res = -1 // очищаем ответ
UNDEFINE($data) // главный массив данных
UNDEFINE($a_scan) // временный массив для SCANPICTURE
$SHIFT_X = 15 // смещение (кол-во игнор пикселов вокруг найденного)
$SHIFT_Y = 15
GETSCREEN
IF($c_mode > 0)
COLORMODE($c_mode, $f_x1,$f_y1,$f_x2,$f_y2)
END_IF
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
SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"), 16744447, $pr)
// заносим 'X,цифра' в $num с учётом мёртвых зон
$a_scansize = ARRSIZE($a_scan)
IF($log0 = 1)
LOGWRITE ("Ищем картинку ", $i, " найдено ", $a_scansize/2)
END_IF
FOR($j=0, $j < $a_scansize, 2)
$X = $a_scan[$j]
$Y = $a_scan[$j+1]
// проверяем мёртвые зоны
$dead_zone = 0
$dead_size = ARRSIZE($dead)
FOR($m=0, $m < $dead_size, 2)
$X_old = $dead[$m]
$Y_old = $dead[$m+1]
IF($log0 = 1)
LOGWRITE ("$X/$X_old = ", $X, " / ", $X_old)
LOGWRITE ("$X/$Y = ", $X, " / ", $Y, " ABS ", ABS($X - $X_old)) END_IF
IF((($Y - $Y_old) < $SHIFT_Y+1) & (ABS($X - $X_old) < $SHIFT_X+1)) $dead_zone = 1
$m = $dead_size + 10
END_IF
END_CYC
IF($log0 = 1)
LOGWRITE ("$dead_zone = ", $dead_zone)
LOGWRITE ("$dead_size = ", $dead_size)
END_IF
IF($dead_zone = 0)
ARRPUSH($dead, $X)
ARRPUSH($dead, $Y)
ARRPUSH($data, $X)
ARRPUSH($data, $i)
IF($log0 = 1)
LOGWRITE ("добавляем ", $i, " $X/$Y = ", $X, " / ", $Y)
END_IF
END_IF
END_CYC
IF($log0 = 1)
LOGWRITE ("после добавления ", $i, " всего ", ARRSIZE($data)/2)
LOGWRITE (" ")
END_IF
UNDEFINE($dead)
UNDEFINE($a_scan)
END_CYC
$data_size = ARRSIZE($data)
IF($data_size > 0)
sort_arr()
IF($log0 = 1)
LOGWRITE ("цифр после сортировки ", ARRSIZE($data)/2)
END_IF
FOR($i=1, $i < $data_size, 2)
IF($res = -1)
$res = STRCONCAT("", $data[$i]) // если первыё символ
ELSE
IF($data[$i] < 10)
$res = STRCONCAT($res, $data[$i]) // последующие символы цифры
ELSE
$res = STRCONCAT($res, ".") // последующие символы зпт
END_IF
END_IF
END_CYC
//$res = ROUND($res, -8)
ELSE
LOGWRITE ("число не найдено")
END_IF
END_SUB
//==============================================================================
LOGCLEAR
$log = 1
//$log0 = 1
number_read(514,475,765,602, "textures\digit_", 7)
LOGWRITE ("Найдено число: ",$res)
HINTPOPUP("Найдено число: ",$res)
HALT
-
Извините, если не в тему :( . Программка Portable ABBYY Screenshot Reader, весит всего 25м. Можно заставить кликер "таскать" руку для выделения зоны распознавания, результат (в зависимости от настроек) попадает в буфер обмена. Очень неплохо распознает текст, даже не горизонтальный (см. примеры в прицепе)! А вот если бы научиться передавать ей параметры зоны распознавания вместо графического выделения!!! Может кто "подломит"? ;)
-
почти получилось :)
Я же говорю, у меня нет в примерах цифр 9 и 2. Не внес их в CASE
-
Здравствуйте, прочитал тему,но так и не понял как осуществить эффективный анализ текста в окне браузера.
Например хочу написать скрипт который бы приглашал в группу в Одноклассниках всех людей которые находятся в Онлайн.
Подскажите какой функцией осуществлять поиске текста в ограниченной области экрана ,потом нажимать на него , потом искать текст другой текст и так же на него нажимать.
Пробовал конечно делать скриншоты этого текста и потом пользоваться функцией "IF_PICTURE_IN", но слишком долговато выходит даже при суженной области поиска)
-
1.5, проблемка. судя по логу, все цифры находит, но не все почему-то добавляет:
18:44:28 Ищем картинку 0 найдено 3
18:44:28 $dead_zone = 0
18:44:28 $dead_size = 0
18:44:28 добавляем 0 $X/$Y = 235 / 62
18:44:28 $X/$X_old = 242 / 235
18:44:28 $X/$Y = 242 / 62 ABS 7
18:44:28 $dead_zone = 1
18:44:28 $dead_size = 2
18:44:28 $X/$X_old = 256 / 235
18:44:28 $X/$Y = 256 / 62 ABS 21
18:44:28 $dead_zone = 0
18:44:28 $dead_size = 2
18:44:28 добавляем 0 $X/$Y = 256 / 62
18:44:28 после добавления 0 всего 2
18:44:28
18:44:28 Ищем картинку 1 найдено 0
18:44:28 после добавления 1 всего 2
18:44:28
18:44:28 Ищем картинку 2 найдено 2
18:44:28 $dead_zone = 0
18:44:28 $dead_size = 0
18:44:28 добавляем 2 $X/$Y = 213 / 62
18:44:28 $X/$X_old = 220 / 213
18:44:28 $X/$Y = 220 / 62 ABS 7
18:44:28 $dead_zone = 1
18:44:28 $dead_size = 2
18:44:28 после добавления 2 всего 3
18:44:28
18:44:28 Ищем картинку 3 найдено 0
18:44:28 после добавления 3 всего 3
18:44:28
18:44:28 Ищем картинку 4 найдено 0
18:44:28 после добавления 4 всего 3
18:44:28
18:44:28 Ищем картинку 5 найдено 0
18:44:28 после добавления 5 всего 3
18:44:28
18:44:28 Ищем картинку 6 найдено 0
18:44:28 после добавления 6 всего 3
18:44:28
18:44:28 Ищем картинку 7 найдено 0
18:44:28 после добавления 7 всего 3
18:44:28
18:44:28 Ищем картинку 8 найдено 0
18:44:28 после добавления 8 всего 3
18:44:28
18:44:28 Ищем картинку 9 найдено 2
18:44:28 $dead_zone = 0
18:44:28 $dead_size = 0
18:44:28 добавляем 9 $X/$Y = 228 / 62
18:44:28 $X/$X_old = 249 / 228
18:44:28 $X/$Y = 249 / 62 ABS 21
18:44:28 $dead_zone = 0
18:44:28 $dead_size = 2
18:44:28 добавляем 9 $X/$Y = 249 / 62
18:44:28 после добавления 9 всего 5
18:44:28
18:44:28 Ищем картинку 10 найдено 0
18:44:28 после добавления 10 всего 5
18:44:28
18:44:28 цифр после сортировки 5
18:44:28 Найдено число: 29090
может, я как-то не так цифры-образцы обрезаю или область задаю?
-
Шрифтик простой. мёртвую зону уменьши $SHIFT_X =
Там достаточно 1-2 на этом размере шрифта, ну 4 на крайняк, а ты наверно 7 засадил.
-
уупс. не сообразил что надо менять параметр для каждого шрифта, ща уменьшу)
-
Мёртвая зона введена, чтобы в пределах
$SHIFT_X по горизонтали и
$SHIFT_Y по вертикали
не учитывало одну и ту же цифру.
Это нужно при использовании % совпадения, т.к. например он при 90% может найти несколько вариантов одной цифры начиная с разных позиций старта. И все они впишутся в процент.
Для маленьких шрифтов достаточно 1-2 пиксела, для больших можно учесть насколько размыто их сглаживание...
Если лень считать, можно всегда тупо брать половину размера шрифта, подойдёт всегда.
Вот для наглядности цифра 4 при данном % совпадения нашлась и подошла 3 раза. Но это одна и та же позиция и мы отбрасываем лишние.
-
всё отлично заработало
вынес для себя $shift_x, $shift_y и $c_ignore в параметры подпрограммы
-
всё отлично заработало
вынес для себя $shift_x, $shift_y и $c_ignore в параметры подпрограммы
Зайди на эту тему --> http://crapware.aidf.org/forum/index.php?topic=2483.0
Может так проще будет реализовать распознавание.
-
Привет всем!
Помогите чайнику, научить кликера,распознавать цифры,в установленном диапазоне, внутри рамки.
А после совпадения, должен сработать Хальт.
-
а какой в этом смысл, ну распознает кликер цифру и остановится? Собирай образцы цифр и вставляй их в имеющийся на форуме скрипт распознавания чисел. уже научили распознавать и давно, заодно и поиск по форуму освоишь.
Согласен! Из той инфы, которую я предоставил, смысла не видно.
Смысл в том, что мне надо найти комбинацию цифр, с высоким процентом, которую надо сохранить.
Конечно, идеальный, был бы вариант, для меня, это автоматическое сохранение результатов в какую нибудь папку.
Но так как,я, в программировании ........
То, для начала, я решил, обойтись функцией "Halt' и ручным сохранением результатов.
Интересно,мне, знать: где собирать образцы цифр?
-
поросят ловят в хлеву, волков в лесу, а образцы цифр ловят в скрины с мониторов и вырезают в паинте до нужного размера, как сало на ломтики. ;D
#name "Скрин экрана"
GETSCREEN
screenshot("цифры на разделку_")
HINTPOPUP("цифру...", "я поймал")
BEEP(800,200)
HALT
О! Сало на ломтики резать, я умею.
А цифры.....
Ну, ладно.
Утро вечера, нет ночи, мудренее.
Спасибо за участие и советы.
А сделать скрин в нужном формате поможет этот простой скрипт! 8)
-
Лучше сразу применяй цветокоррекцию, и для снимка можно сразу указать область, порежет автоматически.
// Получение скриншота с цветокоррекцией (фильтр 6)
GETSCREEN
COLORMODE(6)
SCREENSHOTEX(500,500, 550,550, "Image_", 0) // вырежет в координате 500,500, 550,550
HALT
-
я пuсал скрuпm нарезкu) mам задаешь гранuцы, u обучаешь его, он авmомаmом запucываеm.
http://crapware.aidf.org/forum/index.php?topic=2434.msg15265#msg15265 (http://crapware.aidf.org/forum/index.php?topic=2434.msg15265#msg15265)
-
Наконец-то появилось время пообщаться с кликерманами.
Спасибо всем за ответ и советы.
-
я пuсал скрuпm нарезкu) mам задаешь гранuцы, u обучаешь его, он авmомаmом запucываеm.
http://crapware.aidf.org/forum/index.php?topic=2434.msg15265#msg15265 (http://crapware.aidf.org/forum/index.php?topic=2434.msg15265#msg15265)
Скрипт, возможно, хороший.
Но он не подходит для моих целей.
Так как постоянно перезапускает браузер, а мне нужна статическая страница.
Но,прозапас, запомню, а вдруг пригодится.
-
mы шуmuшь? уберu ф5, u все будеm нормально! нашел же проблему..
я показал как можно нарезаmь бысmро u не вручную, дальше дело за малым собраmь все в одно чuсло
-
mы шуmuшь? уберu ф5, u все будеm нормально! нашел же проблему..
я показал как можно нарезаmь бысmро u не вручную, дальше дело за малым собраmь все в одно чuсло
Не! Не шучу!
Я кроме русского,белорусского и церковно-славянского, других языков не знаю.
Я так понимаю ф5-это " TFWRITE($cmd, "chcp 1251>nul") "
-
mы шуmuшь? уберu ф5, u все будеm нормально! нашел же проблему..
я показал как можно нарезаmь бысmро u не вручную, дальше дело за малым собраmь все в одно чuсло
Не! Не шучу!
Я кроме русского,белорусского и церковно-славянского, других языков не знаю.
Я так понимаю ф5-это " TFWRITE($cmd, "chcp 1251>nul") "
KEYPRESS(#F5)
-
Не! Не шучу!
Я кроме русского,белорусского и церковно-славянского, других языков не знаю.
Я так понимаю ф5-это " TFWRITE($cmd, "chcp 1251>nul") "
[/quote]
KEYPRESS(#F5)
[/quote]
Запускал скрипт. Как-то странно он работает.
Записывает одни 1, а при следующем запуске, пишет одни 6.
-
Господа, кликерманы!
Помогите, мне, правильно написать команды.
С горем-пополам составил скрипт. Но он работает не так как-бы хотелось-бы:
LCLICK(794,732)
WAITMS(200)
LCLICK(778,610) // 4375039
WAITMS(200)
LCLICK(719,287) // 196821
end
COLORG(52224)
LCLICK(889,105)
WAIT(0,05)
end
Объясню, какую цель я преследую:
Первые, две, команды работают по координатам.
После того как они сработают, всплывает окно, либо в красном контуре, либо в зеленом.
Вот их,я бы хотел, что-бы скрипт распознавал по цветам и закрывал.
Я пытался изобразить, но получилась чихня.
Курсор прыгает по всем координатам.
Я так понимаю надо прописывать условия, а как?
Спасибо.
-
end - такой команды в кликере нет, нечего писать всякий мусор.
COLORG(52224) - эта функция извлекает зеленый канал из цвета в десятеричном формате. Тебе такое не нужно.
WAIT(0,05) - здесь ошибка в запятой, нужно писать точку. Или просто WAITMS(50)
В данном случаи используется комбинированное условие из двух функций проверки цвета по координате. Укажи правильно координату рамки и цвета.
LCLICK(794,732)
WAITMS(200)
LCLICK(778,610) // 4375039
WAITMS(200)
LCLICK(719,287) // 196821
WAITMS(600)
GETSCREEN // снимок экрана в буфер кликера для последующего анализа
IF((PXL(100,100) = 255)|(PXL(100,100) = 52224)) // координата и цвет зеленого и красного
LCLICK(889,105)
WAITMS(500)
END_IF
-
end - такой команды в кликере нет, нечего писать всякий мусор.
COLORG(52224) - эта функция извлекает зеленый канал из цвета в десятеричном формате. Тебе такое не нужно.
WAIT(0,05) - здесь ошибка в запятой, нужно писать точку. Или просто WAITMS(50)
В данном случаи используется комбинированное условие из двух функций проверки цвета по координате. Укажи правильно координату рамки и цвета.
LCLICK(794,732)
WAITMS(200)
LCLICK(778,610) // 4375039
WAITMS(200)
LCLICK(719,287) // 196821
WAITMS(600)
GETSCREEN // снимок экрана в буфер кликера для последующего анализа
IF((PXL(100,100) = 255)|(PXL(100,100) = 52224)) // координата и цвет зеленого и красного
LCLICK(889,105)
WAITMS(500)
END_IF
Вот, спасибо!!!!!
Все работает.
Правда я сделал некоторые изменения.
Почему?
Потому что, всплывающие окна находятся на разных уровнях.
Получилось вот так:
LCLICK(792,737) // 7959563
WAITMS(20)
LCLICK(791,610) // 255
WAITMS(800)
GETSCREEN // снимок экрана в буфер кликера для последующего анализа
IF((PXL(343,302) = 3748071) // координата и цвет красного
LCLICK(724,320) // 15623680
WAITMS(500)
END_IF
IF(PXL(168,122) = 52224)) // координата и цвет зеленого
LCLICK(891,140) // 15623680
WAITMS(500)
END_IF
У меня еще есть вопрос: " Как код нарезки интегрировать в код скрипта?"
Тоже надо начинать с "IF"?
-
поправочка, лишние скобки в условии.
LCLICK(792,737) // 7959563
WAITMS(20)
LCLICK(791,610) // 255
WAITMS(800)
GETSCREEN // снимок экрана в буфер кликера для последующего анализа
IF(PXL(343,302) = 3748071) // координата и цвет красного
LCLICK(724,320) // 15623680
WAITMS(500)
END_IF
IF(PXL(168,122) = 52224) // координата и цвет зеленого
LCLICK(891,140) // 15623680
WAITMS(500)
END_IF
-
поправочка, лишние скобки в условии.
LCLICK(792,737) // 7959563
WAITMS(20)
LCLICK(791,610) // 255
WAITMS(800)
GETSCREEN // снимок экрана в буфер кликера для последующего анализа
IF(PXL(343,302) = 3748071) // координата и цвет красного
LCLICK(724,320) // 15623680
WAITMS(500)
END_IF
IF(PXL(168,122) = 52224) // координата и цвет зеленого
LCLICK(891,140) // 15623680
WAITMS(500)
END_IF
Спасибо, исправлю.
А как на счет интеграции кода нарезки, в код скрипта?
Как его, правильно, интегрировать?
-
что подразумевается под термином нарезка?
Я подразумеваю вот это:
"....а образцы цифр ловят в скрины с мониторов и вырезают в паинте до нужного размера, как сало на ломтики. ;D"
пыс. Что то мне перестали приходить уведомления, с форы.
В связи с чем не могу своевременно реагировать на ответы
-
Всем привет.
"Разделка","вырезка", "нарезка вырезки". Решил я обойти эту "кулинарную" тему.
Сделаю шаблоны своими руками,в редакторе.
К примеру в "паинте".
В связи с чем пытаюсь научить скрипт обращаться в файл, в котором хранятся шаблоны, и определять нужную комбинацию.
Надеюсь на помощь крутых Кликермэнов
Может кто поможет?
Пример шаблона:
-
Вот написал более короткий скрипт распознавания любых символов. Пробелы не учитываются!
#name "Распознавание символов v1.0"
SUB(An, $let, $pict)
SCANPICTURE($ARR_SCAN, $x1,$y1, $x2,$y2, $pict, -1, 100)
FOR($arr_num=0,$arr_num<ARRSIZE($ARR_SCAN),2)
ARRPUSH($ARR_OUT, $ARR_SCAN[$arr_num])
ARRPUSH($ARR_OUT, $let)
END_CYC
UNDEFINE($ARR_SCAN)
END_SUB
// область распознавания
$x1 = 222 // верхний левый угол
$y1 = 592
$x2 = 302 // нижний правый
$y2 = 615
GETSCREEN
An("0","Letters\0.bmp")
An("1","Letters\1.bmp")
An("2","Letters\2.bmp")
An("3","Letters\3.bmp")
An("4","Letters\4.bmp")
An("5","Letters\5.bmp")
An("6","Letters\6.bmp")
An("7","Letters\7.bmp")
An("8","Letters\8.bmp")
An("9","Letters\9.bmp")
$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)
$str = STRCONCAT($str, $ARR_OUT[$a+1])
ELSE
$str = $ARR_OUT[$a+1]
END_IF
END_CYC
UNDEFINE($ARR_OUT)
LOGWRITE ($str) // в $str выводятся распознанные символы
HALT
-
Улучшенный скрипт для версии 4.12 кликера.
Теперь скрипт сам определяет символ по первому символу из имени картинки. Нужно лишь нарезать картинки символов и обозвать их соответствующим образом.
К сожалению пока на 4.12 функция GETFILELIST работает крайне плохо. В большинстве случаев просто не возвращает имена файлов поэтому пока от него мало толку.
#name "Распознавание символов v1.1"
// для версии кликера v4.12+
SUB(recognize, $x1,$y1, $x2,$y2)
GETFILELIST($Letters_arr, "Letters\*.bmp")
GETSCREEN($x1,$y1, $x2,$y2)
FOR($Let_num=0,$Let_num<ARRSIZE($Letters_arr))
SCANPICTURE($ARR_SCAN, $x1,$y1, $x2,$y2, STRCONCAT("Letters\", $Letters_arr[$Let_num]), -1, 100)
FOR($arr_num=0,$arr_num<ARRSIZE($ARR_SCAN),2)
ARRPUSH($ARR_OUT, $ARR_SCAN[$arr_num])
$Let = STRCUT($Letters_arr[$Let_num], 1, 1)
SWITCH($Let)
CASE(".") // решение проблемы точки
ARRPUSH($ARR_OUT, "..")
DEFAULT
ARRPUSH($ARR_OUT, $Let)
END_SWITCH
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 = STRREPLACE(STRCONCAT($str, $ARR_OUT[$a+1]), "..", ".")
ELSE
$str = STRREPLACE($ARR_OUT[$a+1], "..", ".")
END_IF
END_CYC
UNDEFINE($ARR_OUT)
// в $str выводятся распознанные символы
END_SUB
recognize(673,437, 738,454) // область распознавания
LOGWRITE ($str)
recognize(24,192, 165,222) // область распознавания
LOGWRITE ($str)
HALT
Скрипт для 4.13 версии
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
В данном примере реализован независимый процент совпадения для каждого символа.
Параметры пишутся непосредственно в имени файла.
Например "0_84.bmp" означает что символ для поиска "0" а процент совпадения "84"
// требуемая версия 4.13 и выше
SUB(recognize, $x1,$y1, $x2,$y2) // описание подпрограммы пишем вначале скрипта
GETFILELIST($Letters_arr, "Letters\*.bmp")
FOR($Let_num=0,$Let_num<ARRSIZE($Letters_arr))
STRSEPARATE($Letters_arr[$Let_num], "_", $a_l)
SCANPICTURE($ARR_SCAN, $x1,$y1, $x2,$y2, STRCONCAT("Letters\", $Letters_arr[$Let_num]), -1, STRREPLACE($a_l[ARRSIZE($a_l)-1],".bmp",""))
UNDEFINE($a_l)
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] > 50) // определение пробела (сколько пикселов между символами считать за пробел)
$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)
UNDEFINE($ARR_SCAN)
END_SUB
//=============================================
// вызов подпрограммы распознавания
GETSCREEN
COLORMODE(6)
recognize(100,100, 400,400) // область распознавания
LOGWRITE($str) // переменная с результатом (смотрим лог)
HALT
-
вот тебе еще вариант, взял отсюда http://crapware.aidf.org/forum/index.php?topic=2336.msg14743#msg14743 , на представленных тобой двух картинках работает отлично.
код немного подредактировал, вынес переменные уровня цветокоррекции и цвета цифр.
#name "ReCapcha"
SUB(pos_size)
UNDEFINE($num_line_start)
UNDEFINE($num_line_end)
UNDEFINE($num_real)
UNDEFINE($num_y1)
UNDEFINE($num_y2)
GETSCREEN($x1_fr,$y1_fr,$x2_fr,$y2_fr)
COLORMODE($clmod,$x1_fr,$y1_fr,$x2_fr,$y2_fr)
scanpxl($cap_arr,$x1_fr,$y1_fr,$x2_fr,$y2_fr, $num_color)
IF(ARRSIZE ($cap_arr) = 0)
print("капчи в этом поле нету")
halt
END_IF
$y1_cap=$cap_arr[1]
$y2_cap=ARRPOP($cap_arr)
FOR($x=$x1_fr,$x<$x2_fr)
FOR($y=$y1_cap,$y<$y2_cap+1)
IF(pxl($x,$y) = $num_color)
$x1_cap= $x
$y=$y2_cap+1
$x=$x2_fr
END_IF
END_CYC
END_CYC
FOR($x=$x2_fr,$x>$x1_fr,-1)
FOR($y=$y1_cap,$y<$y2_cap+1)
IF(pxl($x,$y) = $num_color)
$x2_cap= $x
$y=$y2_cap+1
$x=$x1_fr
END_IF
END_CYC
END_CYC
//print($x1_cap," ",$y1_cap," ",$x2_cap," ",$y2_cap)
//=======================================
ARRPUSH ($num_line_start, $x1_cap)
FOR($x=$x1_cap,$x<$x2_cap)
FOR($y=$y1_cap,$y<$y2_cap+1)
IF(pxl($x,$y) = $num_color)
IF((pxl($x+1,$y) = $num_color)|(pxl($x+1,$y-1) =$num_color)|(pxl($x+1,$y+1) = $num_color))
$y=999999
END_IF
END_IF
END_CYC
IF($y=$y2_cap+1)
ARRPUSH ($num_line_end, $x)
FOR($x_check=$x+1,$x_check<$x2_cap)
FOR($y_check=$y1_cap,$y_check<$y2_cap+1)
IF(pxl($x_check,$y_check) = $num_color)
$x= $x_check
ARRPUSH ($num_line_start, $x)
$y_check=$y2_cap+1
$x_check=$x2_cap
END_IF
END_CYC
END_CYC
END_IF
END_CYC
ARRPUSH ($num_line_end, $x2_cap)
//===================================
FOR($num=0,$num<arrsize($num_line_start))
FOR($y=$y1_cap,$y<$y2_cap)
FOR($x=$num_line_start[$num],$x<$num_line_end[$num]+1)
IF(pxl($x,$y) = $num_color)
ARRPUSH($num_y1,$y)
$y=99999
$x=$num_line_end[$num]+1
END_IF
END_CYC
END_CYC
END_CYC
FOR($num=0,$num<arrsize($num_line_start))
FOR($y=int($y2_cap),$y>$y1_cap,-1)
FOR($x=$num_line_start[$num],$x<$num_line_end[$num]+1)
IF(pxl($x,$y) = $num_color)
ARRPUSH($num_y2,$y)
$y=$y1_cap
$x=$num_line_end[$num]+1
END_IF
END_CYC
END_CYC
END_CYC
print("=====================")
print("найдено цифр в поле - ",arrsize($num_line_start))
// FOR($a=0,$a<arrsize($num_line_start))
// print($num_line_start[$a],",",$num_y1[$a],",",$num_line_end[$a],",",$num_y2[$a])
// END_CYC
END_SUB
//=============================================
SUB(side)
FOR($num=0,$num<arrsize($num_line_start))
$step =($num_y2[$num]-$num_y1[$num])/4
FOR($a=0,$a<4)
IF_PIXEL_IN($num_line_start[$num],$num_y1[$num]+ROUND(($step*$a),0),$num_line_end[$num],$num_y1[$num]+ROUND(($step*$a),0),$num_color)
$x=$_return1
END_IF
IF_PIXEL_IN($num_line_start[$num],$num_y1[$num]+ROUND(($step*($a+1)),0),$num_line_end[$num],$num_y1[$num]+ROUND(($step*($a+1)),0),$num_color)
IF($x-$_return1=0)
ARRPUSH ($side, 0)
else
IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)>2)
ARRPUSH ($side, -1)
else
IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)>0)
ARRPUSH ($side, -2)
END_IF
END_IF
IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)<-2)
ARRPUSH ($side, 1)
else
IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)<0)
ARRPUSH ($side, 2)
END_IF
END_IF
END_IF
else
ARRPUSH ($side, 0)
END_IF
FOR($e=$num_line_end[$num],$e>$num_line_start[$num],-1)
IF(pxl($e,$num_y1[$num]+ROUND(($step*$a),0)) = $num_color)
$x=$e
$e=$num_line_start[$num]
END_IF
END_CYC
FOR($e=$num_line_end[$num],$e>$num_line_start[$num],-1)
IF(pxl($e,$num_y1[$num]+ROUND(($step*($a+1)),0)) = $num_color)
$xs=$e
$e=$num_line_start[$num]
END_IF
END_CYC
IF($x-$xs=0)
ARRPUSH ($side, 0)
else
IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)>2)
ARRPUSH ($side, -1)
else
IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)>0)
ARRPUSH ($side, -2)
END_IF
END_IF
IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)<-2)
ARRPUSH ($side, 1)
else
IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)<0)
ARRPUSH ($side, 2)
END_IF
END_IF
END_IF
END_CYC
print("-------------")
$side_str = $side[0]
FOR($b=1,$b<arrsize($side))
$side_str = STRCONCAT ($side_str,":",$side[$b])
END_CYC
// print($side_str)
FOR($c=0,$c<10)
FOR($n=1,$n<TFCOUNT(STRCONCAT("num_",$c))+1)
STRSEPARATE (TFREAD (STRCONCAT("num_",$c),$n), ":", $temp_arr)
FOR($i=0,$i<8)
IF(int($temp_arr[$i]) ! int($side[$i]))
$i=999
END_IF
END_CYC
IF($i < 999)
print("цифра ", $num+1," это ",$c)
ARRPUSH ($num_fin,$c)
ARRPUSH ($cap_all_arr,$c)
$n=TFCOUNT(STRCONCAT("num_",$c))+1
$c=10
END_IF
UNDEFINE($temp_arr)
END_CYC
END_CYC
IF(arrsize($num_fin)<1)
print("цифра ",$num+1," не распознана")
$n_file = INPUTBOX(STRCONCAT("введи цифру которая в капче под номером ",$num+1), 0, 120)
IF($n_file = "")
halt
END_IF
ARRPUSH ($cap_all_arr,$n_file)
TFWRITE (STRCONCAT("num_",$n_file), $side_str)
END_IF
UNDEFINE($side)
UNDEFINE($num_fin)
END_CYC
$cap_all_str = $cap_all_arr[0]
FOR($a=1,$a<arrsize($cap_all_arr))
$cap_all_str = STRCONCAT ($cap_all_str,$cap_all_arr[$a])
END_CYC
print("-------------")
print($cap_all_str)
print(" ")
END_SUB
//=============================================
//=============================================
//=============================================
$clmod = 7 //уровень коррекции цвета
$num_color = 8388607 //цвет цифр при указанном выше уровне цветокоррекции.
$x1_fr=325 // координаты поля с капчей (целиком, то что белое)
$y1_fr=395
$x2_fr=369
$y2_fr=419
pos_size() // определение границ цифр в капче
side() //распознаватель
//в этоге мы имеем массив с цифрами $cap_all_arr
//и строку $cap_all_str
halt
обучение не сложное. всегото нужно прописать координаты твоей картинки с числом, без знака "%". точку данный код определит как цифру, это не проблема. обучаеш точку под цифру 1 например (я так и сделал)
первая твоя картинка к примеру будет выглядеть так
17:34:31 найдено цифр в поле - 4
17:34:31 -------------
17:34:31 цифра 1 это 6
17:34:31 -------------
17:34:31 цифра 2 это 1
17:34:31 -------------
17:34:31 цифра 3 это 1
17:34:31 -------------
17:34:31 цифра 4 это 5
17:34:31 -------------
17:34:31 6115
дальше уже понятно что предпоследняя цифра "1" это точка, с помощью функций работы со строками заменишь уже сам. или если тебе не важно что после точки, то пропишешь границы твоего числа до точки, 2 знака.
если же тебе это всеравно покажется сложным, предоставь на форуме картинки всех цифр, можно в разнобой, я обучу и дам тебе нужные файлы.
-
вот тебе еще вариант, взял отсюда http://crapware.aidf.org/forum/index.php?topic=2336.msg14743#msg14743 , на представленных тобой двух картинках работает отлично.
код немного подредактировал, вынес переменные уровня цветокоррекции и цвета цифр.
#name "ReCapcha"
SUB(pos_size)
UNDEFINE($num_line_start)
UNDEFINE($num_line_end)
UNDEFINE($num_real)
UNDEFINE($num_y1)
UNDEFINE($num_y2)
GETSCREEN($x1_fr,$y1_fr,$x2_fr,$y2_fr)
COLORMODE($clmod,$x1_fr,$y1_fr,$x2_fr,$y2_fr)
scanpxl($cap_arr,$x1_fr,$y1_fr,$x2_fr,$y2_fr, $num_color)
IF(ARRSIZE ($cap_arr) = 0)
print("капчи в этом поле нету")
halt
END_IF
$y1_cap=$cap_arr[1]
$y2_cap=ARRPOP($cap_arr)
FOR($x=$x1_fr,$x<$x2_fr)
FOR($y=$y1_cap,$y<$y2_cap+1)
IF(pxl($x,$y) = $num_color)
$x1_cap= $x
$y=$y2_cap+1
$x=$x2_fr
END_IF
END_CYC
END_CYC
FOR($x=$x2_fr,$x>$x1_fr,-1)
FOR($y=$y1_cap,$y<$y2_cap+1)
IF(pxl($x,$y) = $num_color)
$x2_cap= $x
$y=$y2_cap+1
$x=$x1_fr
END_IF
END_CYC
END_CYC
//print($x1_cap," ",$y1_cap," ",$x2_cap," ",$y2_cap)
//=======================================
ARRPUSH ($num_line_start, $x1_cap)
FOR($x=$x1_cap,$x<$x2_cap)
FOR($y=$y1_cap,$y<$y2_cap+1)
IF(pxl($x,$y) = $num_color)
IF((pxl($x+1,$y) = $num_color)|(pxl($x+1,$y-1) =$num_color)|(pxl($x+1,$y+1) = $num_color))
$y=999999
END_IF
END_IF
END_CYC
IF($y=$y2_cap+1)
ARRPUSH ($num_line_end, $x)
FOR($x_check=$x+1,$x_check<$x2_cap)
FOR($y_check=$y1_cap,$y_check<$y2_cap+1)
IF(pxl($x_check,$y_check) = $num_color)
$x= $x_check
ARRPUSH ($num_line_start, $x)
$y_check=$y2_cap+1
$x_check=$x2_cap
END_IF
END_CYC
END_CYC
END_IF
END_CYC
ARRPUSH ($num_line_end, $x2_cap)
//===================================
FOR($num=0,$num<arrsize($num_line_start))
FOR($y=$y1_cap,$y<$y2_cap)
FOR($x=$num_line_start[$num],$x<$num_line_end[$num]+1)
IF(pxl($x,$y) = $num_color)
ARRPUSH($num_y1,$y)
$y=99999
$x=$num_line_end[$num]+1
END_IF
END_CYC
END_CYC
END_CYC
FOR($num=0,$num<arrsize($num_line_start))
FOR($y=int($y2_cap),$y>$y1_cap,-1)
FOR($x=$num_line_start[$num],$x<$num_line_end[$num]+1)
IF(pxl($x,$y) = $num_color)
ARRPUSH($num_y2,$y)
$y=$y1_cap
$x=$num_line_end[$num]+1
END_IF
END_CYC
END_CYC
END_CYC
print("=====================")
print("найдено цифр в поле - ",arrsize($num_line_start))
// FOR($a=0,$a<arrsize($num_line_start))
// print($num_line_start[$a],",",$num_y1[$a],",",$num_line_end[$a],",",$num_y2[$a])
// END_CYC
END_SUB
//=============================================
SUB(side)
FOR($num=0,$num<arrsize($num_line_start))
$step =($num_y2[$num]-$num_y1[$num])/4
FOR($a=0,$a<4)
IF_PIXEL_IN($num_line_start[$num],$num_y1[$num]+ROUND(($step*$a),0),$num_line_end[$num],$num_y1[$num]+ROUND(($step*$a),0),$num_color)
$x=$_return1
END_IF
IF_PIXEL_IN($num_line_start[$num],$num_y1[$num]+ROUND(($step*($a+1)),0),$num_line_end[$num],$num_y1[$num]+ROUND(($step*($a+1)),0),$num_color)
IF($x-$_return1=0)
ARRPUSH ($side, 0)
else
IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)>2)
ARRPUSH ($side, -1)
else
IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)>0)
ARRPUSH ($side, -2)
END_IF
END_IF
IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)<-2)
ARRPUSH ($side, 1)
else
IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)<0)
ARRPUSH ($side, 2)
END_IF
END_IF
END_IF
else
ARRPUSH ($side, 0)
END_IF
FOR($e=$num_line_end[$num],$e>$num_line_start[$num],-1)
IF(pxl($e,$num_y1[$num]+ROUND(($step*$a),0)) = $num_color)
$x=$e
$e=$num_line_start[$num]
END_IF
END_CYC
FOR($e=$num_line_end[$num],$e>$num_line_start[$num],-1)
IF(pxl($e,$num_y1[$num]+ROUND(($step*($a+1)),0)) = $num_color)
$xs=$e
$e=$num_line_start[$num]
END_IF
END_CYC
IF($x-$xs=0)
ARRPUSH ($side, 0)
else
IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)>2)
ARRPUSH ($side, -1)
else
IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)>0)
ARRPUSH ($side, -2)
END_IF
END_IF
IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)<-2)
ARRPUSH ($side, 1)
else
IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)<0)
ARRPUSH ($side, 2)
END_IF
END_IF
END_IF
END_CYC
print("-------------")
$side_str = $side[0]
FOR($b=1,$b<arrsize($side))
$side_str = STRCONCAT ($side_str,":",$side[$b])
END_CYC
// print($side_str)
FOR($c=0,$c<10)
FOR($n=1,$n<TFCOUNT(STRCONCAT("num_",$c))+1)
STRSEPARATE (TFREAD (STRCONCAT("num_",$c),$n), ":", $temp_arr)
FOR($i=0,$i<8)
IF(int($temp_arr[$i]) ! int($side[$i]))
$i=999
END_IF
END_CYC
IF($i < 999)
print("цифра ", $num+1," это ",$c)
ARRPUSH ($num_fin,$c)
ARRPUSH ($cap_all_arr,$c)
$n=TFCOUNT(STRCONCAT("num_",$c))+1
$c=10
END_IF
UNDEFINE($temp_arr)
END_CYC
END_CYC
IF(arrsize($num_fin)<1)
print("цифра ",$num+1," не распознана")
$n_file = INPUTBOX(STRCONCAT("введи цифру которая в капче под номером ",$num+1), 0, 120)
IF($n_file = "")
halt
END_IF
ARRPUSH ($cap_all_arr,$n_file)
TFWRITE (STRCONCAT("num_",$n_file), $side_str)
END_IF
UNDEFINE($side)
UNDEFINE($num_fin)
END_CYC
$cap_all_str = $cap_all_arr[0]
FOR($a=1,$a<arrsize($cap_all_arr))
$cap_all_str = STRCONCAT ($cap_all_str,$cap_all_arr[$a])
END_CYC
print("-------------")
print($cap_all_str)
print(" ")
END_SUB
//=============================================
//=============================================
//=============================================
$clmod = 7 //уровень коррекции цвета
$num_color = 8388607 //цвет цифр при указанном выше уровне цветокоррекции.
$x1_fr=325 // координаты поля с капчей (целиком, то что белое)
$y1_fr=395
$x2_fr=369
$y2_fr=419
pos_size() // определение границ цифр в капче
side() //распознаватель
//в этоге мы имеем массив с цифрами $cap_all_arr
//и строку $cap_all_str
halt
обучение не сложное. всегото нужно прописать координаты твоей картинки с числом, без знака "%". точку данный код определит как цифру, это не проблема. обучаеш точку под цифру 1 например (я так и сделал)
первая твоя картинка к примеру будет выглядеть так
17:34:31 найдено цифр в поле - 4
17:34:31 -------------
17:34:31 цифра 1 это 6
17:34:31 -------------
17:34:31 цифра 2 это 1
17:34:31 -------------
17:34:31 цифра 3 это 1
17:34:31 -------------
17:34:31 цифра 4 это 5
17:34:31 -------------
17:34:31 6115
дальше уже понятно что предпоследняя цифра "1" это точка, с помощью функций работы со строками заменишь уже сам. или если тебе не важно что после точки, то пропишешь границы твоего числа до точки, 2 знака.
если же тебе это всеравно покажется сложным, предоставь на форуме картинки всех цифр, можно в разнобой, я обучу и дам тебе нужные файлы.
Спасибо!
Наконец-то у меня выходные.
Пытаюсь разобраться.
Что-то мой W10 не распознает язык
Пишет вот такое:
=====================
11:24:18 ??????? ???? ? ???? - 1
11:24:18 -------------
11:26:56 =====================
11:26:56 ??????? ???? ? ???? - 1
11:26:56 -------------
11:27:07 ????? 1 ?? ??????????
11:27:15 -------------
11:27:15 0
11:27:15
11:27:42 =====================
11:27:42 ??????? ???? ? ???? - 1
11:27:42 -------------
11:28:04 =====================
11:28:04 ??????? ???? ? ???? - 1
11:28:05 -------------
11:38:58 =====================
11:38:58 ??????? ???? ? ???? - 1
11:38:58 -------------
11:41:03 =====================
11:41:03 ??????? ???? ? ???? - 1
11:41:03 -------------
11:41:10 ????? 1 ??? 0
11:41:10 -------------
11:41:10 0
11:41:10
11:41:12 =====================
11:41:12 ??????? ???? ? ???? - 1
11:41:12 -------------
11:42:55 ????? ? ???? ???? ????
11:45:12 =====================
11:45:12 ??????? ???? ? ???? - 1
11:45:12 -------------
11:46:03 =====================
11:46:03 ??????? ???? ? ???? - 1
11:46:03 -------------
-
Ну и в чем проблема то, сделай 10 картинок цифр и точку и вперед.
Вот для 4.11 версии с учетом точки
#name "Распознавание символов v1.0.1"
// для версии кликера v4.11
SUB(An, $let, $pict)
SCANPICTURE($ARR_SCAN, $x1,$y1, $x2,$y2, $pict, -1, 100)
FOR($arr_num=0,$arr_num<ARRSIZE($ARR_SCAN),2)
ARRPUSH($ARR_OUT, $ARR_SCAN[$arr_num])
SWITCH($Let)
CASE(".") // решение проблемы точки
ARRPUSH($ARR_OUT, "..")
DEFAULT
ARRPUSH($ARR_OUT, $Let)
END_SWITCH
END_CYC
UNDEFINE($ARR_SCAN)
END_SUB
// область распознавания
$x1 = 292 // верхний левый угол
$y1 = 586
$x2 = 442 // нижний правый
$y2 = 631
GETSCREEN
An("0","Letters\0.bmp")
An("1","Letters\1.bmp")
An("2","Letters\2.bmp")
An("3","Letters\3.bmp")
An("4","Letters\4.bmp")
An("5","Letters\5.bmp")
An("6","Letters\6.bmp")
An("7","Letters\7.bmp")
An("8","Letters\8.bmp")
An("9","Letters\9.bmp")
An(".","Letters\.0.bmp")
$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)
$str = STRREPLACE(STRCONCAT($str, $ARR_OUT[$a+1]), "..", ".")
ELSE
$str = STRREPLACE($ARR_OUT[$a+1], "..", ".")
END_IF
END_CYC
UNDEFINE($ARR_OUT)
LOGWRITE ($str) // в $str выводятся распознанные символы
HALT
-
На счет кодировки, нужно в реестре поправить значения
Нужно приравнять кодировки 1250 и 1252 к 1251
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1250"="c_1251.nls"
"1251"="c_1251.nls"
"1252"="c_1251.nls"
И перезагрузить комп.
-
Если там графика меняется то дополнительно нужно делать цветокоррекцию, и скрины цифр тоже делать с цветокоррекцией.
-
На счет кодировки, нужно в реестре поправить значения
Нужно приравнять кодировки 1250 и 1252 к 1251
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1250"="c_1251.nls"
"1251"="c_1251.nls"
"1252"="c_1251.nls"
И перезагрузить комп.
Кодировки приравнял, комп перезагрузил.
Все осталось без изменений.
По-прежнему рисует вопросики.
Все! Нашел причину.
-
помогите плз, скрипт распознования работает отлично,но как заставить его работать в цикле?
при последующем запросе распознования не определяет цифры,а добавляет в строку старые значения
что то нужно обнулить,а вот что не могу понять
скрипт dramsterа имею ввиду
-
помогите плз, скрипт распознования работает отлично,но как заставить его работать в цикле?
при последующем запросе распознования не определяет цифры,а добавляет в строку старые значения
что то нужно обнулить,а вот что не могу понять
скрипт dramsterа имею ввиду
А зачем тут понимать? После завершения твоего цикла, просто прописываешь удаление сначала массивов, потом наращиваемых переменных, если не поможет вообще всех переменных, дело-то простое и много ума не надо.
-
А зачем тут понимать? После завершения твоего цикла, просто прописываешь удаление сначала массивов, потом наращиваемых переменных, если не поможет вообще всех переменных, дело-то простое и много ума не надо.
если не трудно можно пример как обнулить массив?
-
А зачем тут понимать? После завершения твоего цикла, просто прописываешь удаление сначала массивов, потом наращиваемых переменных, если не поможет вообще всех переменных, дело-то простое и много ума не надо.
если не трудно можно пример как обнулить массив?
UNDEFINE($arr)
-
UNDEFINE($arr)
просто огромное спасибо , помоглло )))
-
Кто-нибудь здесь знаком с Sikuli, OpenCV, ProjectNaphta?
-
Жениться вам надо барин.
Твоя неугомонная энергия несёт тебя по верхушкам тем, унося в сказочную даль.
-
Твоя неугомонная энергия несёт тебя по верхушкам тем, унося в сказочную даль.
ну а мы кругозор расширяем, норм )
-
:)
Поискал, что же такое эта Сыкуля (Sikuli), блин, ну и название.
Увидел древнюю, примитивную и тормозную поделку с интересной задумкой. Но не стоящую внимания.
Есть много более полезных вещей, от селениума до упилота с автоитами... вплоть до любого высокоуровнего языка.
Про OpenCV читал только. Не было сферы применения. Ардуино не балуюсь и машинное зрение это не та область, где можно поковыряться два дня и прекрасно использовать в любых проектах. Всё динамично развивается и находится хоть и не в зачаточном состоянии, но далеко от конца пути.
-
Ребят, подскажите пожалуйста следующее...
нужно чтобы в определенной области экрана делал анализ цифр, он же ресурс(деньги)....и после этого листал дальше по кликом или когда нашел определенные действие, типа клика)) ...что я мог задать поиск цифр, более чем искомые
-
Ребят, подскажите пожалуйста следующее...
нужно чтобы в определенной области экрана делал анализ цифр, он же ресурс(деньги)....и после этого листал дальше по кликом или когда нашел определенные действие, типа клика)) ...что я мог задать поиск цифр, более чем искомые
анализ цифр это слишком примитивно, воспользуйтесь выложенным на форуме скриптом " распознавание чисел"... и после этого поток сознания не оформленный в понятные предложения.
подскажите , что такое определённые действия типа клика, но не клик?
-
Ребят, подскажите пожалуйста следующее...
я понял по "он же ресурс(деньги)" включительно.
дальше мозг силится связать несогласованные слова и понимает, что: "да ну нафиг"
-
Может дальше это машинный перевод с украинского... или татарского?
-
Ну набросились)) я думал подскажите((.......вроде просто же...в определенном месте экрана(наверное по координатам), есть цифры, и к ним нужно применить следующие.....понять кликеру, величина числа и после нажать на нужное место), короче чтоб обновляла базы и искала нужное количество ресурсов, не точно а от заданной величины...да и ле есть шаблоны..может сам разберусь, побовал найти)) честно....спасибо
-
Ты повторно объяснил то, что все и так поняли и кстати ответили http://crapware.aidf.org/forum/index.php?topic=88.msg17859#msg17859
Не поняли вторую часть поста из-за несвязанных между собой слов.
То что посоветовали использовать, даже искать не нужно. Оно находится прямо в этой теме:
http://crapware.aidf.org/forum/index.php?topic=88.msg1571#msg1571
Заготавливаются скрины-заготовки каждой цифры, настраивается скрипт и он распознаёт число. Дальше уже значение применять в своём скрипте.
Если это не флэш, и число можно выделить мышью, то выделять и копировать в буфер обмена.
-
.......вроде просто же...в определенном месте экрана(наверное по координатам), есть цифры, и к ним нужно применить следующие.....понять кликеру, величина числа и после нажать на нужное место), короче чтоб обновляла базы и искала нужное количество ресурсов, не точно а от заданной величины...да и ле есть шаблоны..
Это тест Тьюринга) куда там компам, админы не все догнали))
-
(https://pp.userapi.com/c837135/v837135525/2e25b/yMPhESdI94c.jpg)
помогите сделать скрипт
сравнить 2 цифры
если 1 не равно 2 то кликать в определенной точке
-
(https://pp.userapi.com/c837135/v837135525/2e25b/yMPhESdI94c.jpg)
помогите сделать скрипт
сравнить 2 цифры
если 1 не равно 2 то кликать в определенной точке
Народ когда уже научитесь отличать, что такое цифра, а что такое число? Если не все предложения в рублях тогда сравнивать стоит суммы с пересчётом в одну валюту с учётом указанного курса.
Помогите - это конечно конечно вопиющее требование, вроде "спасите", но хотелось бы понять чем вас не устраивает скрипт по распознаванию чисел который написал уважаемый Vint?
Вы хотите Проводить такую цветокорекцию картинок, чтоб изображение сводилось к одинаковому и близкому в процентах или требуется ещё более свежее решение? Просто нормальным скриптам своё предложение проще запоминать, чем узнавать по картинке. Здесь конечно есть мушкетёры которые"...пишут скрипты ради того, чтобы ПИСАТЬ", но может достаточно просто потыкать носом в уже написаннное? Тем более что если вы не умеете включать чужие скрипты в состав своих, то и написанные по вашему сценарию скрипт будет проблематично использовать на практике.
ну это реально сделать или нет?
сравнить число и все можно только последние 2 цифры сравнивать
ну я не знаю как это реализовать,
за сколько можно это сделать по деньгам
-
Всем день добрый.
Попробовал использовать для своих целей Распознавание чисел 1.5.cms
Есть поле с шахтами, в левом нижнем углу которых указывается их уровень, надо его распознать
В основном коде ставлю строку
number_read($tmp_x-18,$tmp_y+6,$tmp_x+8,$tmp_y+25, "textures\digit_", 7)
Нарезал со скриншотов цифры, прилагаются в архиве.
Хоть что-то распознает в среднем при качестве распознавания CASE(7) со значением $pr = 70 и ниже - но при этом попадает вообще пальцем в небо (чаще всего распознает якобы уровень 7, независимо от того какая на самом деле).
Смещения пробовал ставить от $SHIFT_X = 1 $SHIFT_Y = 1 до $SHIFT_X = 3 $SHIFT_Y = 5, не помогает.
В строке SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"), 16744447, $pr) попробовал заменить на SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"), -1, $pr) - тоже не помогло
Уважаемые знатоки, что тут еще надо "подвернуть", чтобы заработало для конкретной ситуации?
Код в основной части:
//основная часть
#include "Распознавание чисел 1.5.cms" //подключение для распознавания уровня шахт
print("--------------")
print("Начинаем фармить на поверхности")
undefine($mass_shaht)
getscreen
colormode(7)
$sh_x=0 //задание координат шахты для атаки, если (0,0) - то атаковать нечего
$sh_y=0
// ---Поиск шахты с золотом
SCANPICTURE ($mass_shaht, 70, 400, 355, 685, "g1_gold_7v1.bmp",-1,70) // ищем с 70% совпадения
Print("количество золотых шахт до проверки = ", arrsize($mass_shaht)/2 )
$arrsize_fict=arrsize($mass_shaht)
while ($arrsize_fict > 0)
$tmp_y=arrpop($mass_shaht)
$tmp_x=arrpop($mass_shaht)
IF_PICTURE_IN ($tmp_x-5+11, $tmp_y-46-5, $tmp_x+23+5, $tmp_y-20+5, "g1_taiming_7v2.bmp",-1,70) // проверка на наличие тайминга
print("...тайминг есть, атаковать нельзя")
// поиск уровня обнаруженной шахты
$log = 1
number_read($tmp_x-18,$tmp_y+6,$tmp_x+8,$tmp_y+25, "textures\digit_", 7)
print ("уровень шахты: ", $res, " просто посмотрели")
else
print("...тайминга нет")
$sh_x=$tmp_x
$sh_y=$tmp_y
// поиск уровня обнаруженной шахты
$log = 1
number_read($tmp_x-18,$tmp_y+6,$tmp_x+8,$tmp_y+25, "textures\digit_", 7)
if ($res < 13)
print ("...уровень шахты: ", $res, " атакуем")
$arrsize_fict=0 //для прерывания цикла while - если нашли цель, то иные можно не проверять
GOTO(end_while)
else
print("...уровень шахты: ", $res, " НЕ атакуем")
end_if
end_if
$arrsize_fict=arrsize($mass_shaht)
end_while:
end_cyc
//далее алгоритм собственно атаки
P.S.Не очень понял где лучше данный вопрос задать: то ли создавать отдельный вопрос в основном чате "Общие вопросы", то ли не плодить нового и продолжить имеющуюся тему. Решил продолжить имеющуюся
-
Смещения пробовал ставить от $SHIFT_X = 1 $SHIFT_Y = 1 до $SHIFT_X = 3 $SHIFT_Y = 5, не помогает.
Зачем ставить наугад? Размеры символов 4-5х8, вот $SHIFT_X = 3 $SHIFT_Y = 5 нормально подходит
В строке SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"), 16744447, $pr) попробовал заменить на
В твоём варианте 16744447 вообще никаким боком, это из другого примера. Конечно -1 (или может цвет фона в образцах).
Что то нарезанные образцы цифр сильно рафинированные. Неужели настоящие?
На скрине "экран_без_цветокоррекции" их так колбасит, что до образцов им очень далеко.
При таком маленьком шрифте и такой дикой разнице, там некоторые и на 50% не найдёт.
что тут еще надо "подвернуть", чтобы заработало для конкретной ситуации?
А шрифт никак нельзя увеличить? Выставить более высокое разрешение в игре или подобрать размер окна чтоб размер был ближе к не сглаженным эталонам.
Если нельзя, то я сочувствую. Или выбрать другой способ или тщательно настраивать каждую цифру подбором образца и процента. Потом ещё исключить взаимное влияние.
-
Vint, спасибо за ответы!
Что то нарезанные образцы цифр сильно рафинированные. Неужели настоящие?
Нет, пытался их облагородить :)
При таком маленьком шрифте и такой дикой разнице, там некоторые и на 50% не найдёт.
А шрифт никак нельзя увеличить? Выставить более высокое разрешение в игре или подобрать размер окна чтоб размер был ближе к не сглаженным эталонам.
Если нельзя, то я сочувствую. Или выбрать другой способ или тщательно настраивать каждую цифру подбором образца и процента. Потом ещё исключить взаимное влияние.
С ноутбука, так что размер в bluestack какой есть...
...Хотя попробую повернуть экран набок на 90 градусов, тогда размер экрана bluestack увеличится почти в 2 раза, буду надеяться что поможет....
-
А шрифт никак нельзя увеличить? Выставить более высокое разрешение в игре или подобрать размер окна чтоб размер был ближе к не сглаженным эталонам.
Если нельзя, то я сочувствую. Или выбрать другой способ или тщательно настраивать каждую цифру подбором образца и процента. Потом ещё исключить взаимное влияние.
там палка о 2-х концах. Надо чтобы больше шахт влазило, но при этом картинки будут - хрен разберешь. Можно приблизить, иметь хорошие картинки и отлично определять текст, но при этом на экран будет влезать всего пара шахт (если повезёт) нужного уровня. Постоянный фарм пары шахт - прямая дорга в баню. По хорошему, надо приблизить и помимо поиска картинок задать алгоритм слайда карты в пределах синей границы. Ну или хотя бы в большом приближении жестко задать количество свайпов типа: вправо, вправо, вниз, влево, влево, вверх)
-
там палка о 2-х концах. Надо чтобы больше шахт влазило, но при этом картинки будут - хрен разберешь. Можно приблизить, иметь хорошие картинки и отлично определять текст, но при этом на экран будет влезать всего пара шахт (если повезёт) нужного уровня. Постоянный фарм пары шахт - прямая дорга в баню. По хорошему, надо приблизить и помимо поиска картинок задать алгоритм слайда карты в пределах синей границы. Ну или хотя бы в большом приближении жестко задать количество свайпов типа: вправо, вправо, вниз, влево, влево, вверх)
Да, все верно - "обход" свайпами внутри синей границы - это следующий шаг в восстановлении студенческих навыков программирования ))
Но сделать алгоритм рандомного блуждания внутри границы - сам не потяну, придется высчитывать и жестко прописывать свайпы обхода...
-
Общий вопрос по алгоритму Распознавание чисел 1.5.cms (http://crapware.aidf.org/forum/index.php?topic=88.msg1571#msg1571 )
Для случаев, когда конкретные написания цифр могут достаточно сильно отклоняться от "шаблона", можно ли использовать не конкретные образцы, а их массивы? Например, сделать подпапки "texures\number0\", "texures\number1\", "texures\number2\"... в которые накидывать разные написания одной и той же цифры. А алгоритм бы проверял на совпадение каждому из вариантов цифры в соответствующей подпапке.
А совсем идеально - чтобы если совпадений не найдено (установив высокую точность, например от 95), но скриншот данного кусочка экрана сразу складировался в отдельной папке - из которой потом вручную можно было бы нарезать цифры и добавить в нужную подпапку...
Есть мастера, которые могли бы так доделать алгоритм распознавания? Или тогда комп каждое распознавание будет по полчаса делать?
-
Здесь такого нет. Но так делали другой способ распознавания, в основном для капчи.
С распознаванием чисел в данной ситуации это тупик. Слишком большая разница в рендерах.
Постоянно будут новые варианты и на настройку уйдёт гораздо больше времени, не говоря уж о скорости. Скорость будет всё падать и падать.
Хочешь - попробуй. Я бы не советовал так искать в данном случае.
Вот вся тема с несколькими вариантами
http://crapware.aidf.org/forum/index.php?topic=2336.0
-
Если там не много шаблонов, а к примеру, 2 или 3 на цифру, то можно легко доделать.
Если у всех цифр по 3 шаблона, то просто добавить поисков:
SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,"_1.bmp"), 16744447, $pr)
SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,"_2.bmp"), 16744447, $pr)
SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,"_3.bmp"), 16744447, $pr)
Если у всех разное, то добавить через IF или SWITCH
SWITCH($i)
CASE(0)
$pr = 95
SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,"_2.bmp"), 16744447, $pr)
CASE(1)
$pr = 99
CASE(3)
$pr = 93
SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,"_2.bmp"), 16744447, $pr)
SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,"_3.bmp"), 16744447, $pr)
CASE(4)
...
Или сделать массив таблицу с количеством скринов для каждой цифры.
Или раскидать цифры по папкам и сформировав путь искать по всем образцам в папке.
Но начнутся пересечения. При проценте отличном от 100, одну и ту же цифру может находить на одном и том же месте несколько раз.
И начнёт путать между цифрами, особенно 6-8-9-0 и 1-7
При 100% количество образцов будет не маленьким. И всё равно межцифровые ошибки возможны.
-
Общий вопрос по алгоритму Распознавание чисел 1.5.cms (http://crapware.aidf.org/forum/index.php?topic=88.msg1571#msg1571 )
Для случаев, когда конкретные написания цифр могут достаточно сильно отклоняться от "шаблона", можно ли использовать не конкретные образцы, а их массивы? Например, сделать подпапки "texures\number0\", "texures\number1\", "texures\number2\"... в которые накидывать разные написания одной и той же цифры. А алгоритм бы проверял на совпадение каждому из вариантов цифры в соответствующей подпапке.
А совсем идеально - чтобы если совпадений не найдено (установив высокую точность, например от 95), но скриншот данного кусочка экрана сразу складировался в отдельной папке - из которой потом вручную можно было бы нарезать цифры и добавить в нужную подпапку...
Есть мастера, которые могли бы так доделать алгоритм распознавания? Или тогда комп каждое распознавание будет по полчаса делать?
предлагаю продолжить здесь:
http://crapware.aidf.org/forum/index.php?topic=3345.msg22991#msg22991
т.к. это скорее вопросы не к скрипту распознавания цифр, а к нашему частному случаю в игре
-
Пытаюсь настроить под себя и разобраться с алгоритмом Распознавание чисел 1.5.cms
Строка 102: $dead_size = ARRSIZE($dead)
Но ведь переменной $dead до этого никак не вводили и значение ей не задавали. Единственное что мы делаем, это _в_конце (!) цикла применяем UNDEFINE($dead).
Откуда в таком случае получается размер массива ARRSIZE($dead) ?
-
$dead это массив, и да вначале он равен 0 и цикл будет пропущен. Но потом идет формирование этого массива если $dead_zone = 0 и на следующем круге FOR($j=0, $j < $a_scansize, 2) $dead_size уже не будет равна 0
IF($dead_zone = 0)
ARRPUSH($dead, $X)
ARRPUSH($dead, $Y)
ARRPUSH($data, $X)
ARRPUSH($data, $i)
-
Извините, если не в тему :( . Программка Portable ABBYY Screenshot Reader, весит всего 25м. Можно заставить кликер "таскать" руку для выделения зоны распознавания, результат (в зависимости от настроек) попадает в буфер обмена. Очень неплохо распознает текст, даже не горизонтальный (см. примеры в прицепе)! А вот если бы научиться передавать ей параметры зоны распознавания вместо графического выделения!!! Может кто "подломит"? ;)
Попробовал, да весело распознает ;)
только если так приспособить:
переключаемся на окно с текстом
KEYPRESS R
выделяем область
KEYPRESS ENTER
распознанный текст в буфере
А для начинающего подробней можно, как это все запрограммировать?
...попробовал Portable ABBYY Screenshot Reader вручную - строку с буквами и цифрами распознает хорошо. А если только цифры без букв - то совсем плохо :(
-
Стоит подумать о другом методе. Например поделить на зоны цифр и считать в области сумму чистого цвета 10310011
Может там граница более чёткая.
Имеется в виду что-то типа такого алгоритма? https://habrahabr.ru/post/101446/
А для случаев плохого распознавания (одни и те же цифры достаточно сильно друг от друга отличаются), вот этот вариант не поможет случайно, никто не пробовал?
https://habrahabr.ru/post/158431/
"Создаём новую двумерную матрицу b(x,y). В неё будем писать результаты.
Берём четыре соседних пикселя — квадрат.
Если хотя бы один из цветов этих пикселей остался в списке основных цветов — пишем в новую матрицу b(0,0)=Х. Если ни одного нет — пишем b(0,0)=0.
Берём следующие 4 пикселя. Повторять до конца матрицы, а в случае больших изображений операцию даже можно прогнать дважды."
-
Да, на том шрифте предлагалось что-то типа такого. Но там шрифт большой.
На среднем и на мелком такой вариант не подойдёт.
-
Судя по картинке на хабре, там размер по высоте около 13 пикселей.
Если я могу сделать цифры такого же размера, то получается попробовать алгоритм можно? Где-то он для кликермана уже был реализован? (я как программист слабоват)
...или ты про алгоритм "по сумме чистого цвета", а не про "двумерную матрицу"?
-
Я про первый, там 20х30. Твоё изменение поста и не видел тогда.
А вторая... не понял, чем она отличается от нашего обычного сравнения с шаблоном?
"Один из сайтов" это наверно Авито. Жешев - чёртов пособник спамеров ;D
-
А вторая... не понял, чем она отличается от нашего обычного сравнения с шаблоном?
У меня проблема в том, что цифры между собой сильно разные, не получается отловить просто по шаблону. За счет поворота BlueStacks горизонтально на экране ноутбука, получилось увеличить размер цифр до примерно 6 на 13.
Если я правильно понял описание по ссылке у Жешева - то за счет его алгоритма происходит "усреднение" фактических скринов с экрана, т.е. они как бы приближаются к однотипному шаблону. Или я не правильно понял что Жешев делает?
-
Усреднение. Ну попробуй.
У Драмстера кажись в одном из вариантов есть сравнение с усреднённым образцом. Почти то же самое, но наоборот.
Просто все вот эти попиксельные действия не очень быстрые. И нужно перекрашивать в буфере.
Выложи хоть новые скрины с новым размером шрифта.
-
Вот еще не обработанные нарезки со скринов, плюс общий скрин экрана
(нарезки, по которым искал - не выкладываю, т.к. возможно не вполне верно и нарезал)
upd: добавил заготовки для цифр поштучно, вне архива
-
Ничего страшного, это же не самораспаковывающиеся.
Я в любом случае архив распаковываю архиватором по ПКМ без запуска.
Меня последнюю неделю, на рабочую почту, долбят направленными письмами. Всё шифровальщик хотят всучить. Как покопаешься, чего там только нет в загрузчиках и макросы к офису и шелл и баты. Зачем столько. Выше ведь вероятность что один из типов антивирь не пропустит в не зависимости от содержимого.
-
Какой смысл открывать архив от неизвестного человека? А если у вас на компе вирус и вы об этом не подозреваете?
Зачем архивировать скрины, если эта программа работает с несжатыми форматами изображений?
1.По безопасности:
Не очень понимаю, в чем тут может быть вирус, если нет ни одного запускаемого файла?
2.По удобству:
Набор цифр вроде удобней брать архивом сразу, чем поштучно скачивать.
Но добавил заготовки в то же сообщение и поштучно, если архивом есть риски
3.Объективные ограничения:
Общий скрин экрана в *.bmp = 5 мб, форумом не принимается по размеру, так что только архивом
-
Усреднение. Ну попробуй.
У Драмстера кажись в одном из вариантов есть сравнение с усреднённым образцом. Почти то же самое, но наоборот.
насколько я понял, это ты про это http://crapware.aidf.org/forum/index.php?topic=2336.30
не слишком рабочая штука, насколько я помню, судя по тестам которые в том сообщении. сразу после написания - забыл про этот вариант, и далее делал упор на форму символов как вот тут http://crapware.aidf.org/forum/index.php?topic=2336.msg14743#msg14743
при распознавании всегда пользовался именно этом вариантом. с тех пор скрипт кардинально изменился.
насчет задачи gsukhado, я предпологаю, что если убрать лишние цвета, определить координаты каждой цифры (ну или числа), то вполне себе определял бы распознаватель по шаблонам с процентом точности совпадения. хотя, может я и ошибаюсь.
твои числа
(http://i.imgur.com/jBPbf09.png)
вот отфильтрованный вариант
(http://i.imgur.com/nrRxfoG.png)
я естественно использовал бы свой вариант по формам символов. останется только найти местоположение каждого числа.
вот накалякал под вышеуказанную заготовку
#name "text_reader"
////////////////////////////////////////////////////////////////////////////////
/////////разбивает текст на строки//////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
SUB(lines,$x1_text,$y1_text,$x2_text,$y2_text)
UNDEFINE ($x1_line_arr)
UNDEFINE ($y1_line_arr)
UNDEFINE ($x2_line_arr)
UNDEFINE ($y2_line_arr)
IF_PIXEL_IN($x1_text,$y1_text, $x1_text,$y2_text, $char_color)
print("текста не влазит в границы распознавания слева")
halt
END_IF
IF_PIXEL_IN($x2_text,$y1_text, $x2_text,$y2_text, $char_color)
print("текста не влазит в границы распознавания справа")
halt
END_IF
IF(PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)<$x2_text-$x1_text+1)
print("первоя строка обрезана,неучитывается")
while(PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)<$x2_text-$x1_text+1)
inc($y1_text)
END_CYC
END_IF
while($y1_text<$y2_text)
while((PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)=$x2_text-$x1_text+1)&($y1_text<$y2_text))
inc($y1_text)
END_CYC
IF($y1_text<$y2_text)
arrpush($x1_line_arr, $x1_text)
arrpush($y1_line_arr, $y1_text)
$h_str_temp=0
while($h_str_temp<$h_str)
while((PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)<$x2_text-$x1_text+1)&($y1_text<$y2_text))
inc($y1_text)
inc($h_str_temp)
END_CYC
IF($h_str_temp<$h_str)
while((PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)=$x2_text-$x1_text+1)&($y1_text<$y2_text))
inc($y1_text)
END_CYC
$h_str_temp = 0
$del_arr = arrpop($x1_line_arr)
$del_arr = arrpop($y1_line_arr)
arrpush($x1_line_arr, $x1_text)
arrpush($y1_line_arr, $y1_text)
END_IF
END_CYC
END_IF
IF(PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)=$x2_text-$x1_text+1)
arrpush($x2_line_arr, $x2_text)
arrpush($y2_line_arr, $y1_text-1)
else
print("последняя строка обрезана,неучитывается")
$del_arr = arrpop($x1_line_arr)
$del_arr = arrpop($y1_line_arr)
END_IF
END_CYC
print("количество строк - ",arrsize($x1_line_arr))
// координаты в лог и скрины
// FOR($a=0,$a<arrsize($x1_line_arr))
// print($x1_line_arr[$a]," ",$y1_line_arr[$a]," ",$x2_line_arr[$a]," ",$y2_line_arr[$a])
// SCREENSHOTEX($x1_line_arr[$a],$y1_line_arr[$a],$x2_line_arr[$a],$y2_line_arr[$a])
// END_CYC
IF(arrsize($x1_line_arr)=0)
print("текста не найденно")
halt
END_IF
END_SUB
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////размер и количество символов в строке//////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
SUB(pos_size,$x1_line,$y1_line,$x2_line,$y2_line)
UNDEFINE ($x1_char_arr)
UNDEFINE ($y1_char_arr)
UNDEFINE ($x2_char_arr)
UNDEFINE ($y2_char_arr)
FOR($x1_line_temp=$x1_line,$x1_line_temp<$x2_line+1)
FOR($y1_line_temp=$y1_line,$y1_line_temp<$y2_line+1)
IF(pxl($x1_line_temp,$y1_line_temp)=$char_color)
arrpush($x1_char_arr,$x1_line_temp)
while(PXLCOUNT($x1_line_temp,$y1_line,$x1_line_temp,$y2_line,$back_color)<$y2_line-$y1_line+1)
inc($x1_line_temp)
END_CYC
arrpush($x2_char_arr,$x1_line_temp-1)
END_IF
END_CYC
END_CYC
FOR($i_char=0,$i_char<arrsize($x1_char_arr))
SCANPXL ($pix_temp,$x1_char_arr[$i_char],$y1_line,$x2_char_arr[$i_char],$y2_line,$char_color)
arrpush($y1_char_arr,$pix_temp[1])
arrpush($y2_char_arr,$pix_temp[arrsize($pix_temp)-1])
UNDEFINE ($pix_temp)
END_CYC
print("количество символов в строке - ",arrsize($x1_char_arr))
//скрины каждого символа
// FOR($a=0,$a<arrsize($x1_char_arr))
// SCREENSHOTEX($x1_char_arr[$a],$y1_char_arr[$a],$x2_char_arr[$a],$y2_char_arr[$a])
// END_CYC
END_SUB
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////очертание символов//////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
SUB(shape,$x1_char,$y1_char,$x2_char,$y2_char)
UNDEFINE($left_1)
UNDEFINE($left_2)
UNDEFINE($left_3)
UNDEFINE($left_4)
UNDEFINE($left_5)
UNDEFINE($right_1)
UNDEFINE($right_2)
UNDEFINE($right_3)
UNDEFINE($right_4)
UNDEFINE($right_5)
UNDEFINE($up_1)
UNDEFINE($up_2)
UNDEFINE($up_3)
UNDEFINE($up_4)
UNDEFINE($up_5)
UNDEFINE($down_1)
UNDEFINE($down_2)
UNDEFINE($down_3)
UNDEFINE($down_4)
UNDEFINE($down_5)
int(($y2_char-$y1_char+1)/2)
//лево
FOR($temp=$x1_char,(pxl($temp,$y2_char)!$char_color)&($temp<$x2_char))
inc($left_1)
END_CYC
$left_1 = ROUND($left_1/($x2_char-$x1_char+1)/$accur,-1)*10
IF($left_1 > 9)
$left_1 = 9
END_IF
FOR($temp=$x1_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp<$x2_char))
inc($left_2)
END_CYC
$left_2 = ROUND($left_2/($x2_char-$x1_char+1)/$accur,-1)*10
IF($left_2 > 9)
$left_2 = 9
END_IF
FOR($temp=$x1_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/2,0))!$char_color)&($temp<$x2_char))
inc($left_3)
END_CYC
$left_3 = ROUND($left_3/($x2_char-$x1_char+1)/$accur,-1)*10
IF($left_3 > 9)
$left_3 = 9
END_IF
FOR($temp=$x1_char,(pxl($temp,$y1_char+ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp<$x2_char))
inc($left_4)
END_CYC
$left_4 = ROUND($left_4/($x2_char-$x1_char+1)/$accur,-1)*10
IF($left_4 > 9)
$left_4 = 9
END_IF
FOR($temp=$x1_char,(pxl($temp,$y1_char)!$char_color)&($temp<$x2_char))
inc($left_5)
END_CYC
$left_5 = ROUND($left_5/($x2_char-$x1_char+1)/$accur,-1)*10
IF($left_5 > 9)
$left_5 = 9
END_IF
//право
FOR($temp=$x2_char,(pxl($temp,$y2_char)!$char_color)&($temp>$x1_char),-1)
inc($right_1)
END_CYC
$right_1 = $right_1 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
$right_1 = ROUND($right_1/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
IF($right_1 > 9)
$right_1 = 9
END_IF
FOR($temp=$x2_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp>$x1_char),-1)
inc($right_2)
END_CYC
$right_2 = $right_2 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
$right_2 = ROUND($right_2/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
IF($right_2 > 9)
$right_2 = 9
END_IF
FOR($temp=$x2_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/2,0))!$char_color)&($temp>$x1_char),-1)
inc($right_3)
END_CYC
$right_3 = $right_3 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
$right_3 = ROUND($right_3/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
IF($right_3 > 9)
$right_3 = 9
END_IF
FOR($temp=$x2_char,(pxl($temp,$y1_char+ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp>$x1_char),-1)
inc($right_4)
END_CYC
$right_4 = $right_4 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
$right_4 = ROUND($right_4/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
IF($right_4 > 9)
$right_4 = 9
END_IF
FOR($temp=$x2_char,(pxl($temp,$y1_char)!$char_color)&($temp>$x1_char),-1)
inc($right_5)
END_CYC
$right_5 = $right_5 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
$right_5 = ROUND($right_5/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
IF($right_5 > 9)
$right_5 = 9
END_IF
//верх
FOR($temp=$y1_char,(pxl($x1_char,$temp)!$char_color)&($temp<$y2_char))
inc($up_1)
END_CYC