Автокликер Clickermann :: Форум

Основной раздел => Предложения => Тема начата: резнов от Декабрь 08, 2012, 11:50:47 am

Название: Анализ текста в окне
Отправлено: резнов от Декабрь 08, 2012, 11:50:47 am
В некоторых браузерках кнопки действий могут перемещаться,а значит lclick с ними не сработает. Так же весьма неудобно и нерационально делать тысячи картинок со значениями здоровья(тем более что при таком количестве сравнений  ошибиться проще простого,да и прога может подвиснуть)
Что конкретно нужно: кликер анализирует веб страницу (или область,заданную по координатам пользователем) и ищет надпись,допустим "бить врага" и помещает координаты в лог. Дальше находит среднее арифметическое между координатами (каждое среднее арифметическое ставится пользователем как переменная) дальше ,к примеру,команда lclick по указанным переменными координатам. Либо ,если брать в пример здоровье,кликер берет из области,заданной пользователем ,значение и сравнивает его с эталонным.в зависимости от условий скрипта он выполняет какие-либо действия. Т.е. для выполнения всего этого нужно 2 новых команды: найти текст и вычислить среднее арифметическое координат текста
Название: Re: Анализ текста в окне
Отправлено: Vint от Декабрь 08, 2012, 01:07:44 pm
Среднее арифметическое ты сейчас и там можешь посчитать, что мешает?
Поиск текста обсуждался в теме поиск текста в браузере. Да, хорошо бы делать это быстро и просто.
Только сдается мне что тебе это не подойдет. Потому что в большинстве таких игр текст на экране это не текст, а картинка с надписью. Нет, внутри программы это чаще именно текст, но тебе это не поможет. Попробуй выделить свою надпись и скопировать. Не выделится.
А кликкер  совсем не "фаинридер".
Название: Re: Анализ текста в окне
Отправлено: Сергей от Декабрь 09, 2012, 03:00:31 am
А вообще было бы неплохо если бы в кликерман был интегрирован файнридер, или какая-нибудь подобная библиотека.
Задаешь область поиска, цвет фона и получаешь текст этой области.
И так же с поиском.

Хотя да, это достаточно трудно реализовать. Да ещё и неизвестно где такую библиотеку найти :)
Название: Re: Анализ текста в окне
Отправлено: Johnny от Декабрь 09, 2012, 11:31:14 am
Задаешь область поиска, цвет фона и получаешь текст этой области.
AGClient  ;D
Название: Re: Анализ текста в окне
Отправлено: Vint от Декабрь 11, 2012, 10:44:14 am
AGClient  ;D
Как вариант... Только производительность нужна хотя бы 10 китайцекартинок в секунду. ;D :'(
Название: Re: Анализ текста в окне
Отправлено: резнов от Декабрь 11, 2012, 06:06:31 pm
Среднее арифметическое ты сейчас и там можешь посчитать, что мешает?
Поиск текста обсуждался в теме поиск текста в браузере. Да, хорошо бы делать это быстро и просто.
Только сдается мне что тебе это не подойдет. Потому что в большинстве таких игр текст на экране это не текст, а картинка с надписью. Нет, внутри программы это чаще именно текст, но тебе это не поможет. Попробуй выделить свою надпись и скопировать. Не выделится.
А кликкер  совсем не "фаинридер".

 я знаю,что прошу:)) среднее арифметическое нужно,чтобы определять координаты кнопки(они довольно часто разные) а кнопка именно в форме ссылки ,а не картинки. была бы картинка - я бы тему не создавал
Название: Re: Анализ текста в окне
Отправлено: резнов от Декабрь 11, 2012, 06:07:12 pm
Задаешь область поиска, цвет фона и получаешь текст этой области.
AGClient  ;D
фон там для всех кнопок одинаков
Название: Re: Анализ текста в окне
Отправлено: Vint от Декабрь 11, 2012, 09:08:40 pm
я знаю,что прошу:)) среднее арифметическое нужно,чтобы определять координаты кнопки(они довольно часто разные) а кнопка именно в форме ссылки ,а не картинки. была бы картинка - я бы тему не создавал
скажи что тебе мешает посчитать среднее арифметическое? Сложение и деление пока работают.
Ты бы показал свои кнопки, что гадать.
Если ссылка, то должна находиться по CTRL+F (+F3).
Если не находится, то алис... для кликера это картинка. Может и можно как то, он все молчат.
Название: Re: Анализ текста в окне
Отправлено: резнов от Декабрь 12, 2012, 06:34:00 pm
я знаю,что прошу:)) среднее арифметическое нужно,чтобы определять координаты кнопки(они довольно часто разные) а кнопка именно в форме ссылки ,а не картинки. была бы картинка - я бы тему не создавал
скажи что тебе мешает посчитать среднее арифметическое? Сложение и деление пока работают.
Ты бы показал свои кнопки, что гадать.
Если ссылка, то должна находиться по CTRL+F (+F3).
Если не находится, то алис... для кликера это картинка. Может и можно как то, он все молчат.

полезно,но не то. нужен анализ текста(цифр,если быть точным)в определенной области окна,сравнение их с эталонным значением и действие по описанным инструкциям. допустим,если здоровье ниже 2000,то  лечить себя и т.д.
Название: Re: Анализ текста в окне
Отправлено: резнов от Декабрь 12, 2012, 07:04:41 pm
т.е. как я вижу свое предложение в виде куска куда:
 
1.$etalon=2000
2.$xp=analyz(координаты левого верхнего угла прямоугольной области),(координаты правого нижнего угла)
3.if($xp<$etalon) lclik(100,100) else lclick (100,20)
4. end_if
Название: Re: Анализ текста в окне
Отправлено: резнов от Декабрь 24, 2012, 11:15:15 am
ну так что,это реализуемо?
Название: Re: Анализ текста в окне
Отправлено: Johnny от Декабрь 24, 2012, 09:17:18 pm
что это то? finereader прикрутить?
в кликере, по крайней мере последних версий, достаточно функционала чтоб найти что угодно где угодно. надо просто раскинуть мозгами.
для браузера решение вообще на поверхности лежит - Ctrl + F
Название: Re: Анализ текста в окне
Отправлено: ЦИТРИН от Декабрь 25, 2012, 01:27:57 am
Там смотря как цифры в браузере представлены.
Иногда помогает простой даблклик  по корам в районе  цифры  и  команда туклип.
 Потом анализ переменных.
 Но бывает и так, что к цифре даблкликом  не подобраться.
В таких случаях обычно выходил из положения  командой ифпикчеин.

 
Название: Re: Анализ текста в окне
Отправлено: резнов от Январь 06, 2013, 10:41:09 am
Там смотря как цифры в браузере представлены.
Иногда помогает простой даблклик  по корам в районе  цифры  и  команда туклип.
 Потом анализ переменных.
 Но бывает и так, что к цифре даблкликом  не подобраться.
В таких случаях обычно выходил из положения  командой ифпикчеин.
ифпикчеин тут не подойдет. придется делать более 6 тысяч картинок
Название: Re: Анализ текста в окне
Отправлено: резнов от Январь 06, 2013, 10:44:18 am
что это то? finereader прикрутить?
в кликере, по крайней мере последних версий, достаточно функционала чтоб найти что угодно где угодно. надо просто раскинуть мозгами.
для браузера решение вообще на поверхности лежит - Ctrl + F

контрол ф неплох,но для анализа он не подойдет,потому что делать 6-7 тысяч комбинаций.... на одну проверку всех этих цифросочетаний у скрипта будет уходить немалое время,да и размер будет....
Название: Re: Анализ текста в окне
Отправлено: ЦИТРИН от Январь 07, 2013, 12:50:27 pm
ифпикчеин тут не подойдет. придется делать более 6 тысяч картинок
Зачем 6000?
 Если капча,  то  есть антикапча.
 Если обычная цифра, то их разнообразие ограничивается всего 10 картинками.
Анализировал в флашигре (файерфокс) через ифпикчеин цифры  размером шрифта примерно 8 размера.
п.с.
Делал давно. В новых версиях ещё не пробовал.
Название: Re: Анализ текста в окне
Отправлено: резнов от Январь 08, 2013, 05:56:27 pm
ифпикчеин тут не подойдет. придется делать более 6 тысяч картинок
Зачем 6000?
 Если капча,  то  есть антикапча.
 Если обычная цифра, то их разнообразие ограничивается всего 10 картинками.
Анализировал в флашигре (файерфокс) через ифпикчеин цифры  размером шрифта примерно 8 размера.
п.с.
Делал давно. В новых версиях ещё не пробовал.
т.е. для распознавания нужно будет загонять все это дело(картинку с цифрами) на сайт для расшифровки?
Название: Re: Анализ текста в окне
Отправлено: ЦИТРИН от Январь 08, 2013, 06:22:06 pm
. для распознавания нужно будет загонять все это дело(картинку с цифрами) на сайт для расшифровки?
Да.  Как-то так.
Там одна капча вроде бы 3 копейки на наши деньги стоит.
3 рубля за сотню.
30 р за тысячу.
В Вашем случае  180 рублей за  все 6000 картинок.
Если речь о капче , разумеется.
Вы так и не сформулировали свою задачу.
А мы тут гадаем.
Название: Re: Анализ текста в окне
Отправлено: резнов от Январь 24, 2013, 01:54:30 pm
Почему гадаете? я ж вроде объяснял задачу?
короче говоря вот пример страницы:

параметр №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.

вот в принципе и все. примечание - работа скрипта поссылочно не подойдет - ссылки разные всегда,даже для одной и той же кнопки,т.е. искать придется именно название кнопки
Название: Re: Анализ текста в окне
Отправлено: СлавьЯнИнъ от Январь 24, 2013, 02:31:27 pm
Видимо, Резнов, антикапчу вообще не рассматривает?!
Если я правильно понял, то задача состоит в анализе игровых данных, в форме печатного текста или чисел.
Резнов, если хочешь научить скрипт распознавать именно текст, то следует вести попиксельную визуальную проверку.
Название: Re: Анализ текста в окне
Отправлено: Vint от Январь 24, 2013, 04:17:55 pm
Напиши свою подпрограмму распознования чисел по картинкам цифр под свой шрифт.
Картинок понадобится не 6000, а всего 11.
Например как товарищ: http://crapware.aidf.org/forum/index.php?topic=134.0
Но только без ошибок и под свою задачу.
Главное чтоб сглаживание сильно не мешало (каждый раз разные изображения цифр).
Ещё нужно учесть диапазон чисел, выводится ли число с соблюдением разрядности. Пример:
5432
32

или

5432
  32
И как нибудь определять конец числа в первом случае и начало в обоих (решено). Или маркер или изображение границы кнопки...
Название: Re: Анализ текста в окне
Отправлено: резнов от Январь 24, 2013, 07:53:53 pm
Видимо, Резнов, антикапчу вообще не рассматривает?!
Если я правильно понял, то задача состоит в анализе игровых данных, в форме печатного текста или чисел.
Резнов, если хочешь научить скрипт распознавать именно текст, то следует вести попиксельную визуальную проверку.

я как бэ не ас в кликере:) как это сделать?
Название: Re: Анализ текста в окне
Отправлено: СлавьЯнИнъ от Январь 24, 2013, 09:15:43 pm
Резнов. твоя тема: Анализ текста в окне.
michael. его тема: Помогите с процедурой распознавания чисел.

У вас может быть схожая задача. В его теме приведён пример кода. Спишись с ним и работайте над темой вместе.
И у кликера появится собственный OCR проект.  :)

В любом случае, Резнов, надо радоваться жизни в совместном творчестве.
Брать скрипт и вникать ))
Название: Re: Анализ текста в окне
Отправлено: Vint от Январь 24, 2013, 09:36:07 pm
Аж самому стало интересно решить задачу. В принципе в голове 2-3 схемы есть давно. Нет конкретной задачи или надобности. Еще интересней какой из вариантов выигрышней по скорости.
Моя беда, стараюсь почти все сделать универсальным и настраиваемым.  Если скрипт писать под конкретную задачу выйдет в 2 раза меньше.
Название: Re: Анализ текста в окне
Отправлено: Vint от Январь 31, 2013, 10:41:31 am
Вот набросал распознавалку чисел. В основном для использования в играх, т.к. есть ограничения...
Старался сделать универсальным и настраиваемым. Не важно выравнивание идёт по первому или последнему разряду.

Старая версия, ещё под 4.7
[spoiler]Вариант скрипта с последовательным перебором разрядов.
Хотел обойтись без текстовых файлов, только переменные. Использование текстовых файлов уменьшило бы размер скрипта, но я думаю сказалось бы незначительно на скорости работы и удобстве настройки.
Скрипт при внедрении лучше организовать как подпрограмму.

О ограничениях.

Настройка.
Не пугаться! Письменно выглядит много, но всё на самом деле просто.

Сам скрипт.
Код: Clickermann
  1. #name "Распознавание чисел"
  2. // Author: Vint
  3. // Version: 1.1 (30.01.2013)
  4. // Результат возвращается в $res если не найдено $res=-1
  5. // Только целые числа. Максимум 10 разрядов. Расположение цифр равномерное.
  6. // Вариант скрипта с последовательным перебором разрядов
  7. // Хотел обойтись без текстовых файлов, только переменные
  8.  
  9.  
  10. //====== переменные которые задаются 1 раз если всего один шрифт ====
  11. //если в скрипте будет искаться несколько наборов шрифтов, то задавать каждый раз при вызове
  12. $sdvig=6 // сдвиг, чуть меньше чем ширина 1 цифры с отступом
  13. $pref="textures\digit_" // префикс имён файлов с цифрами
  14.  
  15.  
  16. //====== переменные которые задаются при вызове поиска ====
  17. //если место поиска всего одно, задавать только один раз
  18. $field_x1=0 // поле под число, координата X1
  19. $field_y1=0 // поле под число, координата y1
  20. $field_x2=0 // поле под число, координата X2
  21. $field_y2=0 // поле под число, координата y2
  22.  
  23.  
  24. //====== внутренние переменные  ====
  25. $razr_max=0 // максимальная разрядность числа
  26. $xmin=5000
  27. $res=-1 // очищаем результат
  28. $i=0                 // очищаем результат
  29.  
  30.  
  31.  
  32. //================== начало ====================================================
  33. FOR ($obhod, $obhod<10) // очищаем результат
  34.   GOSUB(sdvig_razryada)
  35. END_CYC
  36.  
  37. GETSCREEN
  38. FOR ($i, $i<10) // ищем самую левую цифру
  39.   IF_PICTURE_IN ($field_x1,$field_y1,$field_x2,$field_y2, STRCONCAT($pref,$i,".bmp"))
  40.      IF($_return1<$xmin)
  41.         $xmin=$_return1
  42.         INC($razr_max)
  43.         $res1=$i
  44.         IF($res1=10) // учитываем что 10-я картинка это 0
  45.            $res1=0
  46.         END_IF
  47.      END_IF
  48.   END_IF
  49. END_CYC
  50. IF($xmin=5000)
  51.   LOGWRITE ("число не найдено")
  52.   GOTO(endfindnumber)
  53. END_IF
  54.  
  55. $field_x1=$xmin+$sdvig
  56. $perebor=1
  57. WHILE($perebor>0)
  58.   $razr_temp=$razr_max
  59.   FOR ($i,$i<11)
  60.      IF_PICTURE_IN ($field_x1,$field_y1,$field_x1+INT($sdvig*1.3),$field_y2, STRCONCAT($pref,$i,".bmp"))
  61.         $field_x1=$_return1+$sdvig
  62.         IF($i<11)
  63.            INC($razr_max)
  64.            GOSUB(sdvig_razryada)
  65.            IF($res1=10) // учитываем что 10-я картинка это 0
  66.               $res1=0
  67.            END_IF
  68.         END_IF
  69.         IF($i=11) // проверка если нашли маркер конца ...11.bmp, то конец
  70.            $perebor=0
  71.         END_IF
  72.         $i=11              // выходим из цикла
  73.      END_IF
  74.   END_CYC
  75.   IF(($razr_temp=$razr_max) | ($razr_max=10)) // проверка если не нашли или уже 10 разрядов, то конец
  76.      $perebor=0
  77.   END_IF
  78. END_CYC
  79.  
  80. // подсчитываем
  81. $res=$res1+$res2*10+$res3*100+$res4*1000+$res5*10000+$res6*100000+$res7*1000000+$res8*10000000+$res9*100000000+$res10*1000000000
  82.  
  83. endfindnumber:
  84. LOGWRITE ("Найдено число:  ",$res)
  85. HINTPOPUP("Найдено число:  ",$res)
  86. HALT
  87.  
  88.  
  89. //==============================================================================
  90. SUB(sdvig_razryada)
  91.   $res10=$res9
  92.   $res9=$res8
  93.   $res8=$res7
  94.   $res7=$res6
  95.   $res6=$res5
  96.   $res5=$res4
  97.   $res4=$res3
  98.   $res3=$res2
  99.   $res2=$res1
  100.   $res1=$i
  101. END_SUB
  102. //==============================================================================
  103.  

Во вложении Сам скрипт "Распознавание чисел 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]
Код: Clickermann
  1. #name "Распознавание чисел"
  2. // Author: Vint
  3. // Version: 1.3 (01.04.2015)
  4. // Скрипт для Clickermann v4.11 002
  5.  
  6. // подключение number_read
  7. // #include "Распознавание чисел 1.3.cms"
  8.  
  9. //==============================================================================
  10. SUB(LOG_ARR)
  11.   //LOGWRITE ("Размер массива: ",ARRSIZE($num))
  12.   LOGWRITE (" ")
  13.   LOGWRITE ("    0    1    2    3    4    5    6    7    8    9")
  14.   LOGWRITE (" ")
  15.   $maxn = 0
  16.   FOR ($i=0, $i < 10)
  17.      IF($num[$i] > $maxn)
  18.         $maxn = $num[$i]
  19.      END_IF
  20.   END_CYC
  21.  
  22.   FOR($row=0, $row < 2)
  23.      $text = ""
  24.      FOR ($i=0, $i < 10)      
  25.         $l = $num[10*$row + $i]
  26.         FOR ($j=0, $j < (5 - STRLEN($l)))
  27.            $text = STRCONCAT($text, " ")
  28.         END_CYC
  29.         $text = STRCONCAT($text, $l)
  30.      END_CYC
  31.      LOGWRITE ($text)
  32.   END_CYC
  33.   LOGWRITE (" ")
  34.  
  35.   FOR($row=2,$row < $maxn + 2)
  36.      $text = ""
  37.      FOR ($i=0, $i < 10)
  38.         IF($num[$i] > ($row - 2))
  39.            $l = $num[10*$row + $i]
  40.         ELSE
  41.            $l = "X"
  42.         END_IF
  43.  
  44.         FOR ($j=0, $j < (5 - STRLEN($l)))
  45.            $text = STRCONCAT($text, " ")
  46.         END_CYC
  47.         $text = STRCONCAT($text, $l)
  48.      END_CYC
  49.      LOGWRITE ($text)
  50.   END_CYC
  51.   LOGWRITE (" ")
  52. END_SUB
  53.  
  54. //==============================================================================
  55.  
  56. SUB(number_read, $f_x1,$f_y1,$f_x2,$f_y2, $pref)
  57.   // $f_x1, $f_y1 область ЛевоВерх
  58.   // $f_x2, $f_y2 область ПравоНиз
  59.   // $pref = "textures\digit_" префикс имён файлов с цифрами (для разных шрифтов)
  60.  
  61.   // Результат возвращается в $res если не найдено $res=-1
  62.  
  63.   // Только целые числа.
  64.   // $pref  зависит от шрифта поиска
  65.  
  66.   $res = -1 // очищаем ответ
  67.   UNDEFINE($num) // главный массив данных
  68.   UNDEFINE($n_temp) // временный массив для SCANPICTURE
  69.  
  70.   GETSCREEN
  71.   FOR ($i=0, $i < 10)
  72.      SCANPICTURE($n_temp, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"))
  73.      $a_size = ARRSIZE($n_temp)
  74.      $num[$i] = $a_size / 2 // заносим количество элементов в этом разряде
  75.      $num[$i+10] = 0 // счётчик разрядов, пока 0
  76.      IF($a_size > 0)
  77.         FOR($j=0, $j < $a_size, 2)
  78.            $num[10*($j/2 + 2)+ $i] = $n_temp[$j] // заносим коорд X в массив
  79.         END_CYC
  80.         UNDEFINE($n_temp)
  81.      END_IF
  82.   END_CYC
  83.  
  84.   IF(ARRSIZE($num) > 0)
  85.      IF($log = 1)
  86.         LOG_ARR()
  87.      END_IF
  88.  
  89.      $repeat = 1
  90.      WHILE($repeat = 1)
  91.         $empty = 0
  92.         $xmin = 5000
  93.         $pos_min = 0
  94.         FOR ($i=0, $i < 10)
  95.            IF($num[$i] > ($num[10 + $i]))
  96.               $empty = 1
  97.               $l = $num[10 * ($num[10+$i]+2) + $i]
  98.               IF($l < $xmin)
  99.                  $xmin = $l
  100.                  $pos_min = $i
  101.               END_IF
  102.            END_IF
  103.         END_CYC
  104.  
  105.         IF($empty = 0)
  106.            $repeat = 0
  107.         ELSE
  108.            IF($res = -1)
  109.               $res = STRCONCAT("", $pos_min)   // если первыё символ
  110.            ELSE
  111.               $res = STRCONCAT($res, $pos_min) // последующие символы
  112.            END_IF
  113.            $num[10 + $pos_min] = ($num[10 + $pos_min]) + 1 // INC счётчик для разряда
  114.         END_IF
  115.      END_CYC
  116.      $res = INT($res)
  117.   ELSE
  118.      LOGWRITE ("число не найдено")
  119.   END_IF
  120. END_SUB
  121.  
  122. //LOGCLEAR
  123. //$log = 1
  124. //number_read(271,385,335,401, "textures\digit_")
  125. //LOGWRITE ("Найдено число:  ",$res)
  126. //HINTPOPUP("Найдено число:  ",$res)
  127. //HALT
[/spoiler]

Тест в редакторе кликера и пример использования файл: "Тестирование распознавалки 1.3 XP.cms"
Видео теста: http://youtu.be/d55wq7cbVe8.

Add версия 1.4
Поддерживает числа с запятой.
Запятую/точку заготавливаем как digit_10.bmp (или свой префикс)
Возвращает результат как строку! Для перевода в число нужно учесть диапазон.

[spoiler]Для перевода в число нужно пробовать... там все сложно с диапазонами
Если число 0 целых...
0.0001234545
то перевести можно до 13 знака
Код: Clickermann
  1. $res = ROUND($res, -13)

если до
21.46999999
то до 8-го знака после запятой
Код: Clickermann
  1. $res = ROUND($res, -8)

для бОльших нужно пробовать

для целых всё сохраняется от старой версии, применяем только сами
Код: Clickermann
  1. $res =INT($res)
[/spoiler]

Код:
[spoiler]
Код: Clickermann
  1. #name "Распознавание чисел"
  2. // Author: Vint
  3. // Version: 1.4 (14.04.2015)
  4. // Скрипт для Clickermann v4.11 002
  5.  
  6. // подключение number_read
  7. // #include "Распознавание чисел 1.4.cms"
  8.  
  9. //==============================================================================
  10. SUB(LOG_ARR)
  11.   //LOGWRITE ("Размер массива: ",ARRSIZE($num))
  12.   LOGWRITE (" ")
  13.   LOGWRITE ("    0    1    2    3    4    5    6    7    8    9    .")
  14.   LOGWRITE (" ")
  15.   $maxn = 0
  16.   FOR ($i=0, $i < 11)
  17.      IF($num[$i] > $maxn)
  18.         $maxn = $num[$i]
  19.      END_IF
  20.   END_CYC
  21.  
  22.   FOR($row=0, $row < 2)
  23.      $text = ""
  24.      FOR ($i=0, $i < 10)
  25.         $l = $num[11*$row + $i]
  26.         FOR ($j=0, $j < (5 - STRLEN($l)))
  27.            $text = STRCONCAT($text, " ")
  28.         END_CYC
  29.         $text = STRCONCAT($text, $l)
  30.      END_CYC
  31.      LOGWRITE ($text)
  32.   END_CYC
  33.   LOGWRITE (" ")
  34.  
  35.   FOR($row=2,$row < $maxn + 2)
  36.      $text = ""
  37.      FOR ($i=0, $i < 11)
  38.         IF($num[$i] > ($row - 2))
  39.            $l = $num[11*$row + $i]
  40.         ELSE
  41.            $l = "X"
  42.         END_IF
  43.  
  44.         FOR ($j=0, $j < (5 - STRLEN($l)))
  45.            $text = STRCONCAT($text, " ")
  46.         END_CYC
  47.         $text = STRCONCAT($text, $l)
  48.      END_CYC
  49.      LOGWRITE ($text)
  50.   END_CYC
  51.   LOGWRITE (" ")
  52. END_SUB
  53.  
  54. //==============================================================================
  55.  
  56. SUB(number_read, $f_x1,$f_y1,$f_x2,$f_y2, $pref)
  57.   // $f_x1, $f_y1 область ЛевоВерх
  58.   // $f_x2, $f_y2 область ПравоНиз
  59.   // $pref = "textures\digit_" префикс имён файлов с цифрами (для разных шрифтов)
  60.  
  61.   // Результат возвращается в $res если не найдено $res=-1
  62.  
  63.   // Только целые числа.
  64.   // $pref  зависит от шрифта поиска
  65.  
  66.   $res = -1 // очищаем ответ
  67.   UNDEFINE($num) // главный массив данных
  68.   UNDEFINE($n_temp) // временный массив для SCANPICTURE
  69.  
  70.   GETSCREEN
  71.   FOR ($i=0, $i < 11)
  72.      SCANPICTURE($n_temp, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"))
  73.      $a_size = ARRSIZE($n_temp)
  74.      $num[$i] = $a_size / 2 // заносим количество элементов в этом разряде
  75.      $num[$i+11] = 0 // счётчик разрядов, пока 0
  76.      IF($a_size > 0)
  77.         FOR($j=0, $j < $a_size, 2)
  78.            $num[11*($j/2 + 2)+ $i] = $n_temp[$j] // заносим коорд X в массив
  79.         END_CYC
  80.         UNDEFINE($n_temp)
  81.      END_IF
  82.   END_CYC
  83.  
  84.   IF(ARRSIZE($num) > 0)
  85.      IF($log = 1)
  86.         LOG_ARR()
  87.      END_IF
  88.  
  89.      $repeat = 1
  90.      WHILE($repeat = 1)
  91.         $empty = 0
  92.         $xmin = 5000
  93.         $pos_min = 0
  94.         FOR ($i=0, $i < 11)
  95.            IF($num[$i] > ($num[11 + $i]))
  96.               $empty = 1
  97.               $l = $num[11 * ($num[11+$i]+2) + $i]
  98.               IF($l < $xmin)
  99.                  $xmin = $l
  100.                  $pos_min = $i
  101.               END_IF
  102.            END_IF
  103.         END_CYC
  104.  
  105.         IF($empty = 0)
  106.            $repeat = 0
  107.         ELSE
  108.            IF($res = -1)
  109.               $res = STRCONCAT("", $pos_min)   // если первыё символ
  110.            ELSE
  111.               IF($pos_min < 10)
  112.                  $res = STRCONCAT($res, $pos_min) // последующие символы цифры
  113.               ELSE
  114.                  $res = STRCONCAT($res, ".") // последующие символы  зпт
  115.               END_IF  
  116.            END_IF
  117.            $num[11 + $pos_min] = ($num[11 + $pos_min]) + 1 // INC счётчик для разряда
  118.         END_IF
  119.      END_CYC
  120.      //$res = ROUND($res, -8)
  121.   ELSE
  122.      LOGWRITE ("число не найдено")
  123.   END_IF
  124. END_SUB
  125.  
  126. //LOGCLEAR
  127. //$log = 1
  128. //number_read(271,385,335,401, "textures\digit_")
  129. //LOGWRITE ("Найдено число:  ",$res)
  130. //HINTPOPUP("Найдено число:  ",$res)
  131. //HALT
[/spoiler]

Add версия 1.5
Версия 1.4 с поддержкой поиска с COLORMODE. Для каждой цифры можно задать индивидуальный %
Название: Re: Анализ текста в окне
Отправлено: резнов от Январь 31, 2013, 07:13:06 pm
Винт,круто,очень круто. В кликере я почти что полный нупь,так что можно нубский вопрос: текст можно этим кодом найти?
Название: Re: Анализ текста в окне
Отправлено: Vint от Январь 31, 2013, 08:22:25 pm
Винт,круто,очень круто. В кликере я почти что полный нупь,так что можно нубский вопрос: текст можно этим кодом найти?
Текст... Нет. Ты прямо меня в ступор ввел этим вопросом.
Я не вижу задачи для которой понадобится распознавать текст. Ты же не собираешься кликером проверять правописание или делать переводчик. Для всех задач где целесообразно использовать кликер, достаточно поиска картинки.
Хотя задачу придумать можно конечно.
Название: Re: Анализ текста в окне
Отправлено: i0 от Август 02, 2014, 05:15:57 pm
угу, я вот придумал… на свою голову

"сигнализация" на случай грабежа твоего города в браузерке (flash).
хочется, чтобы она орала ник грабителя, а он только в картинке есть

ну это так, лирическое отступление :)
Название: Re: Анализ текста в окне
Отправлено: aden от Август 02, 2014, 06:09:57 pm
угу, я вот придумал… на свою голову

"сигнализация" на случай грабежа твоего города в браузерке (flash).
хочется, чтобы она орала ник грабителя, а он только в картинке есть

ну это так, лирическое отступление :)
ну по аналогии раздуйте данный скрипт до распознавания текста только длина текста будет сильно ограничена и количество букв тут не 10 будет =)
Название: Re: Анализ текста в окне
Отправлено: Vint от Апрель 01, 2015, 11:47:39 am
Обновил распознавалку под Clickermann 4.11
http://crapware.aidf.org/forum/index.php?topic=88.msg1571#msg1571
Название: Re: Анализ текста в окне
Отправлено: Starfish от Апрель 15, 2015, 02:51:15 pm
Спасибо за пример скрипта, мне помогло но частично. Я делаю шаблон цифр, сохраняю и в этом-'t окне он находит нужные мне числа. Но допустим когда обновляется строка порядок чисел меняется или количество чисел то пиксели в цифрах тоже меняются. Как я понял тут идет сравнение по пиксельно 1в1 100% и если сходство будет 99% то число не найдется?
Вот пример единиц, они разные (в середине отличается), соответственно он найдет только одну единицу если я сделаю шаблон по центральной.
(http://ipic.su/img/img7/fs/111.1429098625.jpg)
Собственно это можно обойти? Или какую программу посоветуете?
Название: Re: Анализ текста в окне
Отправлено: Vint от Апрель 15, 2015, 04:43:04 pm
COLORMODE+%
обговаривалось много раз уже.
В зависимости от фона, обычно режим 7 или 8 плюс рассчитанный процент.

Если есть возможность отключить сглаживание - это нужно сделать.
Все системные шрифты и большинство во Flash используют сглаживание выставленное в системе.
Если это отдельный клиент, то может быть в его настройках... а может и не быть.
Название: Re: Анализ текста в окне
Отправлено: Starfish от Апрель 16, 2015, 03:45:32 pm
Спасибо большое за ответ!

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, в игре. Не помогло.
Название: Re: Анализ текста в окне
Отправлено: Vint от Апрель 16, 2015, 04:18:07 pm
Спасибо большое за ответ!

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%)
Код: Clickermann
  1.   GETSCREEN
  2.   COLORMODE(8, $f_x1,$f_y1,$f_x2,$f_y2)
  3.   FOR ($i=0, $i < 10)
  4.      SCANPICTURE($n_temp, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"),-1,80)
  5.      $a_size = ARRSIZE($n_temp)
  6.      $num[$i] = $a_size / 2 // заносим количество элементов в этом разряде
  7.      $num[$i+10] = 0 // счётчик разрядов, пока 0
  8.      IF($a_size > 0)
  9.         FOR($j=0, $j < $a_size, 2)
  10.            $num[10*($j/2 + 2)+ $i] = $n_temp[$j] // заносим коорд X в массив
  11.         END_CYC
  12.         UNDEFINE($n_temp)
  13.      END_IF
  14.   END_CYC

3) А как отключал?
Персонализация -> Экран -> Настройка текста ClearType -> галка Включить ClearType
или
Свойства системы -> параметры быстродействия -> сглаживать неровности экранных шрифтов
Шрифт Segoe UI менял?

И перезагрузиться.

Но может и не помочь. Смотря как программист приложения сделал вывод текста.
Название: Re: Анализ текста в окне
Отправлено: Starfish от Апрель 18, 2015, 09:12:19 am
3) А как отключал?
Свойства системы -> параметры быстродействия -> сглаживать неровности экранных шрифтов
Шрифт Segoe UI не менял

Перезагрузиться.
Название: Re: Анализ текста в окне
Отправлено: 123 от Апрель 30, 2015, 06:32:32 pm
Точно нужна встроенная распознавалка текста, хотя бы нормального, а не капча-извратного. Это избавило бы в некоторых случаях от горы дурной работы по созданию и тесту 100500 картинок на все возможные варианты - разные слова разными цветами, размерами и видами шрифтов. И не надо с нуля велосипед изобретать - наверняка тут никто не обломается, если его аккуратно готовый откуда-нибудь содрать. Или, на худой конец, создать онлайн-сервис спецом под работу в связке с кликерманом, или, хотя бы, указать на 1 или несколько самых удобных из существующих. Разумеется, бесплатных и безлимитных, чтобы без проблем справлялись с небольшими, но часто подкидываемыми скриншотами с малыми объёмами текста.
Название: Re: Анализ текста в окне
Отправлено: Vint от Апрель 30, 2015, 07:30:22 pm
А они точно есть такие? Может вариант только тот же файнридер.
Я год назад задавался целью найти сетевую или консольную распознавалку. Бесплатной сетевой не нашел.
Нашел 2 или 3 консольные. Но там мало того что ставить прописывать не просто было. И они только на английский язык заточены. К одной есть модуль русского языка.. По дефолту эта хрень даже цифры путает набранные не рубленным шрифтом. Про буквы я вообще молчу. Правда это по дефолту. Ее можно там обучать настраивая на другие шрифты. Но процедура не тривиальна и я забил.
В общем хреновина сыровата, не зря всякие файнридеры уже больше десятка лет развиваются. В первых версиях видать тоже так распознавало.
Название: Re: Анализ текста в окне
Отправлено: Vint от Май 27, 2015, 09:31:08 am
Проблема с поиском ясное дело. Выложи образцы и шоты на которых распознаётся. Желательно несколько и конечно не пожатое.
Название: Re: Анализ текста в окне
Отправлено: Vint от Май 28, 2015, 05:16:48 pm
Неа. Вчера сразу попробовал, но так на авось. В ФШ не сравнивал для анализа.
Сегодня времени не было глянуть.
Название: Re: Анализ текста в окне
Отправлено: Vint от Май 28, 2015, 05:31:22 pm
Какой баг?

Проблема в большом размере шрифта. Область сглаживания очень большая 1-4 пкс. И при рендеринге оригинал елозит во всех направлениях на уровне субпикселов.
В итоге одна четвёрка отличается от другой гораздо больше чем они обе от единицы  :o Ну и т.п.

Сейчас ещё попробую вместо 8 колормода седьмой, но боюсь это не даст результата.
Стоит подумать о другом методе. Например поделить на зоны цифр и считать в области сумму чистого цвета 10310011
Может там граница более чёткая.
Название: Re: Анализ текста в окне
Отправлено: Vint от Май 28, 2015, 10:08:04 pm
Она ещё и меняется?  :o
А если собьешь назад точно вернуть можно?
Тогда до 10. Сэм-восэм  :)
Или 8-10.
Подожди пока я эти попробую.
Название: Re: Анализ текста в окне
Отправлено: Vint от Май 29, 2015, 08:41:56 am
И при этом меняется размер шрифта?
Название: Re: Анализ текста в окне
Отправлено: Vint от Май 29, 2015, 01:18:03 pm
Вот скрипт с картинками.
Распознавание переделано под COLORMODE использовал 7.
Подбор процента только на тех 3 примерах что есть. На них всё чётко определяет.
На примерах нет цифр 2 и 9, для них не выставлен процент!!!

Опасаюсь за цифру 3, она самая нестабильная, если на ней будет сбоить, нужно переделать образец из другого скрина и поправить процент.

Код: Clickermann
  1. #name "Распознавание чисел"
  2. // Author: Vint
  3. // Version: 1.5 (28.05.2015)
  4. // Скрипт для Clickermann v4.11 002
  5.  
  6. // подключение number_read
  7. // #include "Распознавание чисел 1.5.cms"
  8.  
  9.  
  10. //==============================================================================
  11. SUB(sort_arr)  // сортируем $data по возрастанию X
  12.   $data_size = ARRSIZE($data)
  13.   FOR($out=0, $out < $data_size, 2)
  14.      $min = $data[$out]
  15.      $ind = $out
  16.  
  17.      FOR($in=($out+2), $in < $data_size, 2)
  18.         IF($data[$in] < $min)
  19.            $min = $data[$in]
  20.            $ind = $in
  21.         END_IF
  22.      END_CYC
  23.      //LOGWRITE("минимум: ", $min, "  ", $ind, " - ", $out)
  24.      $X =  $data[$ind]
  25.      $Y =  $data[$ind+1]
  26.  
  27.      $data[$ind] = $data[$out]
  28.      $data[$ind+1] = $data[$out+1]
  29.      $data[$out] = $X
  30.      $data[$out+1] = $Y
  31.  
  32.      //LOGWRITE($X, " / ", $Y)
  33.      WAITMS(20)
  34.   END_CYC
  35. END_SUB
  36.  
  37. //==============================================================================
  38. SUB(number_read, $f_x1,$f_y1,$f_x2,$f_y2, $pref, $c_mode)
  39.   // $f_x1, $f_y1 область ЛевоВерх
  40.   // $f_x2, $f_y2 область ПравоНиз
  41.   // $pref = "textures\digit_" префикс имён файлов с цифрами (для разных шрифтов)
  42.   // $c_mode - режим COLORMODE
  43.  
  44.   // Результат возвращается в $res если не найдено $res=-1
  45.  
  46.  
  47.   $res = -1 // очищаем ответ
  48.   UNDEFINE($data) // главный массив данных
  49.   UNDEFINE($a_scan) // временный массив для SCANPICTURE
  50.   $SHIFT_X = 15 // смещение (кол-во игнор пикселов вокруг найденного)
  51.   $SHIFT_Y = 15
  52.  
  53.   GETSCREEN
  54.   IF($c_mode > 0)
  55.      COLORMODE($c_mode, $f_x1,$f_y1,$f_x2,$f_y2)
  56.   END_IF
  57.   FOR ($i=0, $i < 11)
  58.      SWITCH($i)
  59.      CASE(0)
  60.         $pr = 95
  61.      CASE(1)
  62.         $pr = 99
  63.         //      CASE(2)
  64.         //         $pr = 95
  65.      CASE(3)
  66.         $pr = 93
  67.      CASE(4)
  68.         $pr = 95
  69.      CASE(5)
  70.         $pr = 95
  71.      CASE(6)
  72.         $pr = 95
  73.      CASE(7)
  74.         $pr = 95
  75.      CASE(8)
  76.         $pr = 94
  77.         //      CASE(9)
  78.         //         $pr = 95
  79.      DEFAULT
  80.         $pr = 100
  81.      END_SWITCH
  82.  
  83.      SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"), 16744447, $pr)
  84.  
  85.      // заносим 'X,цифра' в $num с учётом мёртвых зон
  86.      $a_scansize = ARRSIZE($a_scan)
  87.      IF($log0 = 1)
  88.         LOGWRITE ("Ищем картинку ", $i, "  найдено ", $a_scansize/2)
  89.      END_IF
  90.  
  91.      FOR($j=0, $j < $a_scansize, 2)
  92.         $X = $a_scan[$j]
  93.         $Y = $a_scan[$j+1]
  94.  
  95.         // проверяем мёртвые зоны
  96.         $dead_zone = 0
  97.         $dead_size = ARRSIZE($dead)
  98.         FOR($m=0, $m < $dead_size, 2)
  99.            $X_old = $dead[$m]
  100.            $Y_old = $dead[$m+1]
  101.            IF($log0 = 1)
  102.               LOGWRITE ("$X/$X_old = ", $X, " / ", $X_old)
  103.               LOGWRITE ("$X/$Y = ", $X, " / ", $Y, "   ABS ", ABS($X - $X_old))
  104.            END_IF
  105.            IF((($Y - $Y_old) < $SHIFT_Y+1) & (ABS($X - $X_old) < $SHIFT_X+1))
  106.               $dead_zone = 1
  107.               $m = $dead_size + 10
  108.            END_IF
  109.         END_CYC
  110.  
  111.         IF($log0 = 1)
  112.            LOGWRITE ("$dead_zone = ", $dead_zone)
  113.            LOGWRITE ("$dead_size = ", $dead_size)
  114.         END_IF
  115.         IF($dead_zone = 0)
  116.            ARRPUSH($dead, $X)
  117.            ARRPUSH($dead, $Y)
  118.            ARRPUSH($data, $X)
  119.            ARRPUSH($data, $i)
  120.            IF($log0 = 1)
  121.               LOGWRITE ("добавляем ", $i, " $X/$Y = ", $X, " / ", $Y)
  122.            END_IF
  123.         END_IF
  124.      END_CYC
  125.      IF($log0 = 1)
  126.         LOGWRITE ("после добавления ", $i, " всего ", ARRSIZE($data)/2)
  127.         LOGWRITE (" ")
  128.      END_IF
  129.      UNDEFINE($dead)
  130.      UNDEFINE($a_scan)
  131.   END_CYC
  132.  
  133.   $data_size = ARRSIZE($data)
  134.   IF($data_size > 0)
  135.      sort_arr()
  136.      IF($log0 = 1)
  137.         LOGWRITE ("цифр после сортировки ", ARRSIZE($data)/2)
  138.      END_IF
  139.  
  140.      FOR($i=1, $i < $data_size, 2)
  141.         IF($res = -1)
  142.            $res = STRCONCAT("", $data[$i])   // если первыё символ
  143.         ELSE
  144.            IF($data[$i] < 10)
  145.               $res = STRCONCAT($res, $data[$i]) // последующие символы цифры
  146.            ELSE
  147.               $res = STRCONCAT($res, ".") // последующие символы  зпт
  148.            END_IF
  149.         END_IF
  150.      END_CYC
  151.      //$res = ROUND($res, -8)
  152.   ELSE
  153.      LOGWRITE ("число не найдено")
  154.   END_IF
  155. END_SUB
  156.  
  157. //==============================================================================
  158.  
  159.  
  160. LOGCLEAR
  161. $log = 1
  162. //$log0 = 1
  163. number_read(514,475,765,602, "textures\digit_", 7)
  164. LOGWRITE ("Найдено число:  ",$res)
  165. HINTPOPUP("Найдено число:  ",$res)
  166. HALT
Название: Re: Анализ текста в окне
Отправлено: And_Ro от Май 29, 2015, 07:03:15 pm
Извините, если не в тему  :( . Программка Portable ABBYY Screenshot Reader, весит всего 25м. Можно заставить кликер "таскать" руку для выделения зоны распознавания, результат (в зависимости от настроек) попадает в буфер обмена. Очень неплохо распознает текст, даже не горизонтальный (см. примеры в прицепе)! А вот если бы научиться передавать ей параметры зоны распознавания вместо графического выделения!!! Может кто "подломит"?  ;)
Название: Re: Анализ текста в окне
Отправлено: Vint от Май 30, 2015, 10:12:22 am
почти получилось :)
Я же говорю, у меня нет в примерах цифр 9 и 2. Не внес их в CASE
Название: Re: Анализ текста в окне
Отправлено: Pukerman от Июнь 06, 2015, 10:41:33 pm
Здравствуйте, прочитал тему,но так и не понял как осуществить эффективный анализ текста в окне браузера.
Например хочу написать скрипт который бы приглашал в группу в Одноклассниках всех людей которые находятся в Онлайн.
Подскажите какой функцией осуществлять поиске текста в ограниченной области экрана ,потом нажимать на него , потом искать текст другой текст и так же на него нажимать.

Пробовал конечно делать скриншоты этого текста и потом пользоваться функцией "IF_PICTURE_IN", но слишком долговато выходит даже при суженной области поиска)
Название: Re: Анализ текста в окне
Отправлено: i0 от Апрель 07, 2016, 06:51:29 pm
1.5, проблемка. судя по логу, все цифры находит, но не все почему-то добавляет:
Код: Text
  1. 18:44:28 Ищем картинку 0  найдено 3
  2. 18:44:28 $dead_zone = 0
  3. 18:44:28 $dead_size = 0
  4. 18:44:28 добавляем 0 $X/$Y = 235 / 62
  5. 18:44:28 $X/$X_old = 242 / 235
  6. 18:44:28 $X/$Y = 242 / 62   ABS 7
  7. 18:44:28 $dead_zone = 1
  8. 18:44:28 $dead_size = 2
  9. 18:44:28 $X/$X_old = 256 / 235
  10. 18:44:28 $X/$Y = 256 / 62   ABS 21
  11. 18:44:28 $dead_zone = 0
  12. 18:44:28 $dead_size = 2
  13. 18:44:28 добавляем 0 $X/$Y = 256 / 62
  14. 18:44:28 после добавления 0 всего 2
  15. 18:44:28  
  16. 18:44:28 Ищем картинку 1  найдено 0
  17. 18:44:28 после добавления 1 всего 2
  18. 18:44:28  
  19. 18:44:28 Ищем картинку 2  найдено 2
  20. 18:44:28 $dead_zone = 0
  21. 18:44:28 $dead_size = 0
  22. 18:44:28 добавляем 2 $X/$Y = 213 / 62
  23. 18:44:28 $X/$X_old = 220 / 213
  24. 18:44:28 $X/$Y = 220 / 62   ABS 7
  25. 18:44:28 $dead_zone = 1
  26. 18:44:28 $dead_size = 2
  27. 18:44:28 после добавления 2 всего 3
  28. 18:44:28  
  29. 18:44:28 Ищем картинку 3  найдено 0
  30. 18:44:28 после добавления 3 всего 3
  31. 18:44:28  
  32. 18:44:28 Ищем картинку 4  найдено 0
  33. 18:44:28 после добавления 4 всего 3
  34. 18:44:28  
  35. 18:44:28 Ищем картинку 5  найдено 0
  36. 18:44:28 после добавления 5 всего 3
  37. 18:44:28  
  38. 18:44:28 Ищем картинку 6  найдено 0
  39. 18:44:28 после добавления 6 всего 3
  40. 18:44:28  
  41. 18:44:28 Ищем картинку 7  найдено 0
  42. 18:44:28 после добавления 7 всего 3
  43. 18:44:28  
  44. 18:44:28 Ищем картинку 8  найдено 0
  45. 18:44:28 после добавления 8 всего 3
  46. 18:44:28  
  47. 18:44:28 Ищем картинку 9  найдено 2
  48. 18:44:28 $dead_zone = 0
  49. 18:44:28 $dead_size = 0
  50. 18:44:28 добавляем 9 $X/$Y = 228 / 62
  51. 18:44:28 $X/$X_old = 249 / 228
  52. 18:44:28 $X/$Y = 249 / 62   ABS 21
  53. 18:44:28 $dead_zone = 0
  54. 18:44:28 $dead_size = 2
  55. 18:44:28 добавляем 9 $X/$Y = 249 / 62
  56. 18:44:28 после добавления 9 всего 5
  57. 18:44:28  
  58. 18:44:28 Ищем картинку 10  найдено 0
  59. 18:44:28 после добавления 10 всего 5
  60. 18:44:28  
  61. 18:44:28 цифр после сортировки 5
  62. 18:44:28 Найдено число:  29090
  63.  

может, я как-то не так цифры-образцы обрезаю или область задаю?
Название: Re: Анализ текста в окне
Отправлено: Vint от Апрель 08, 2016, 08:34:04 am
Шрифтик простой. мёртвую зону уменьши $SHIFT_X =
Там достаточно 1-2 на этом размере шрифта, ну 4 на крайняк, а ты наверно 7 засадил.
Название: Re: Анализ текста в окне
Отправлено: i0 от Апрель 08, 2016, 08:37:22 am
уупс. не сообразил что надо менять параметр для каждого шрифта, ща уменьшу)
Название: Re: Анализ текста в окне
Отправлено: Vint от Апрель 08, 2016, 08:52:36 am
Мёртвая зона введена, чтобы в пределах
$SHIFT_X по горизонтали и
$SHIFT_Y по вертикали
не учитывало одну и ту же цифру.
Это нужно при использовании % совпадения, т.к. например он при 90% может найти несколько вариантов одной цифры начиная с разных позиций старта. И все они впишутся в процент.
Для маленьких шрифтов достаточно 1-2 пиксела, для больших можно учесть насколько размыто их сглаживание...
Если лень считать, можно всегда тупо брать половину размера шрифта, подойдёт всегда.
Вот для наглядности цифра 4 при данном % совпадения нашлась и подошла 3 раза. Но это одна и та же позиция и мы отбрасываем лишние.
Название: Re: Анализ текста в окне
Отправлено: i0 от Апрель 08, 2016, 10:02:10 am
всё отлично заработало
вынес для себя $shift_x, $shift_y и $c_ignore в параметры подпрограммы
Название: Re: Анализ текста в окне
Отправлено: ЦИТРИН от Апрель 08, 2016, 01:11:27 pm
всё отлично заработало
вынес для себя $shift_x, $shift_y и $c_ignore в параметры подпрограммы
Зайди на  эту тему --> http://crapware.aidf.org/forum/index.php?topic=2483.0

Может  так проще будет реализовать распознавание.
Название: Re: Анализ текста в окне
Отправлено: Валера Л от Май 12, 2016, 07:17:02 pm
Привет всем!
Помогите чайнику, научить кликера,распознавать цифры,в установленном диапазоне, внутри рамки.
А после совпадения, должен сработать Хальт. 

Название: Re: Анализ текста в окне
Отправлено: Валера Л от Май 12, 2016, 11:17:03 pm
а какой в этом смысл, ну распознает кликер цифру и остановится? Собирай образцы цифр и вставляй их в имеющийся на форуме скрипт распознавания чисел. уже научили распознавать и давно, заодно и поиск по форуму освоишь.

Согласен! Из той инфы, которую я предоставил, смысла не видно.
Смысл в том, что мне надо найти комбинацию цифр, с высоким процентом, которую надо сохранить.
Конечно, идеальный, был бы вариант, для меня, это автоматическое сохранение результатов в какую нибудь папку.
Но так как,я, в программировании  ........
То, для начала, я решил, обойтись функцией "Halt' и ручным сохранением результатов.
Интересно,мне, знать: где собирать образцы цифр?
Название: Re: Анализ текста в окне
Отправлено: Валера Л от Май 13, 2016, 12:12:04 am
поросят ловят в хлеву, волков в лесу, а образцы цифр ловят в скрины с мониторов и вырезают в паинте до нужного размера, как сало на ломтики. ;D
Код: Clickermann
  1. #name "Скрин экрана"
  2. GETSCREEN
  3. screenshot("цифры на разделку_")
  4. HINTPOPUP("цифру...", "я поймал")
  5. BEEP(800,200)
  6. HALT
  7.  


О! Сало на ломтики резать, я умею.
А цифры.....
Ну, ладно.
Утро вечера, нет ночи, мудренее.
Спасибо за участие и советы.
А сделать скрин в нужном формате поможет этот простой скрипт!  8)
Название: Re: Анализ текста в окне
Отправлено: Oraven от Май 13, 2016, 09:41:57 am
Лучше сразу применяй цветокоррекцию, и для снимка можно сразу указать область, порежет автоматически.

Код: Clickermann
  1. // Получение скриншота с цветокоррекцией (фильтр 6)
  2. GETSCREEN
  3. COLORMODE(6)
  4. SCREENSHOTEX(500,500, 550,550, "Image_", 0) // вырежет в координате 500,500, 550,550
  5. HALT
Название: Re: Анализ текста в окне
Отправлено: Кликермен от Май 13, 2016, 01:36:34 pm
я п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)
Название: Re: Анализ текста в окне
Отправлено: Валера Л от Май 14, 2016, 01:46:01 pm
Наконец-то появилось время пообщаться с кликерманами.
Спасибо всем за ответ и советы.
Название: Re: Анализ текста в окне
Отправлено: Валера Л от Май 14, 2016, 01:59:33 pm
я п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)

Скрипт, возможно, хороший.
Но он не подходит для моих целей.
Так как постоянно перезапускает браузер, а мне нужна статическая страница.
Но,прозапас, запомню, а вдруг пригодится.


Название: Re: Анализ текста в окне
Отправлено: Кликермен от Май 14, 2016, 02:37:35 pm
mы шуmuшь?  уберu ф5, u все будеm  нормально! нашел же проблему..
 я показал как можно нарезаmь бысmро u не вручную, дальше дело за малым  собраmь все в одно чuсло
Название: Re: Анализ текста в окне
Отправлено: Валера Л от Май 14, 2016, 02:43:54 pm
mы шуmuшь?  уберu ф5, u все будеm  нормально! нашел же проблему..
 я показал как можно нарезаmь бысmро u не вручную, дальше дело за малым  собраmь все в одно чuсло

Не! Не шучу!
Я кроме русского,белорусского и церковно-славянского, других языков не знаю.
Я так понимаю ф5-это " TFWRITE($cmd, "chcp 1251>nul") "
Название: Re: Анализ текста в окне
Отправлено: Кликермен от Май 14, 2016, 03:08:52 pm
mы шуmuшь?  уберu ф5, u все будеm  нормально! нашел же проблему..
 я показал как можно нарезаmь бысmро u не вручную, дальше дело за малым  собраmь все в одно чuсло

Не! Не шучу!
Я кроме русского,белорусского и церковно-славянского, других языков не знаю.
Я так понимаю ф5-это " TFWRITE($cmd, "chcp 1251>nul") "
KEYPRESS(#F5)
Название: Re: Анализ текста в окне
Отправлено: Валера Л от Май 17, 2016, 10:27:45 pm
Не! Не шучу!
Я кроме русского,белорусского и церковно-славянского, других языков не знаю.
Я так понимаю ф5-это " TFWRITE($cmd, "chcp 1251>nul") "
[/quote]
KEYPRESS(#F5)
[/quote]

Запускал скрипт. Как-то странно он работает.
Записывает одни 1, а при следующем запуске, пишет одни 6.
Название: Re: Анализ текста в окне
Отправлено: Валера Л от Май 17, 2016, 10:49:19 pm
Господа, кликерманы!
Помогите, мне, правильно написать команды.
С горем-пополам составил скрипт. Но он работает не так как-бы хотелось-бы:

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   

Объясню, какую цель я преследую:
Первые, две, команды работают по координатам.
После того как они сработают, всплывает окно, либо в красном контуре, либо в зеленом.
Вот их,я бы хотел, что-бы скрипт распознавал по цветам и закрывал.
Я пытался изобразить, но получилась чихня.
Курсор прыгает по всем координатам.
Я так понимаю надо прописывать условия, а как?
Спасибо.

Название: Re: Анализ текста в окне
Отправлено: Oraven от Май 18, 2016, 08:52:57 am
end - такой команды в кликере нет, нечего писать всякий мусор.
COLORG(52224) - эта функция извлекает зеленый канал из цвета в десятеричном формате. Тебе такое не нужно.
WAIT(0,05) - здесь ошибка в запятой, нужно писать точку. Или просто WAITMS(50)

В данном случаи используется комбинированное условие из двух функций проверки цвета по координате. Укажи правильно координату рамки и цвета.
Код: Clickermann
  1. LCLICK(794,732)
  2. WAITMS(200)
  3. LCLICK(778,610)  // 4375039
  4. WAITMS(200)
  5. LCLICK(719,287)  // 196821
  6. WAITMS(600)
  7.  
  8. GETSCREEN // снимок экрана в буфер кликера для последующего анализа
  9. IF((PXL(100,100) = 255)|(PXL(100,100) = 52224)) // координата и цвет зеленого и красного
  10.   LCLICK(889,105)
  11.   WAITMS(500)
  12. END_IF
Название: Re: Анализ текста в окне
Отправлено: Валера Л от Май 18, 2016, 03:55:21 pm
end - такой команды в кликере нет, нечего писать всякий мусор.
COLORG(52224) - эта функция извлекает зеленый канал из цвета в десятеричном формате. Тебе такое не нужно.
WAIT(0,05) - здесь ошибка в запятой, нужно писать точку. Или просто WAITMS(50)

В данном случаи используется комбинированное условие из двух функций проверки цвета по координате. Укажи правильно координату рамки и цвета.
Код: Clickermann
  1. LCLICK(794,732)
  2. WAITMS(200)
  3. LCLICK(778,610)  // 4375039
  4. WAITMS(200)
  5. LCLICK(719,287)  // 196821
  6. WAITMS(600)
  7.  
  8. GETSCREEN // снимок экрана в буфер кликера для последующего анализа
  9. IF((PXL(100,100) = 255)|(PXL(100,100) = 52224)) // координата и цвет зеленого и красного
  10.   LCLICK(889,105)
  11.   WAITMS(500)
  12. 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"?
Название: Re: Анализ текста в окне
Отправлено: Oraven от Май 18, 2016, 07:33:55 pm
поправочка, лишние скобки в условии.
Код: Clickermann
  1. LCLICK(792,737)  // 7959563
  2. WAITMS(20)
  3. LCLICK(791,610)  // 255
  4. WAITMS(800)
  5.  
  6. GETSCREEN // снимок экрана в буфер кликера для последующего анализа
  7. IF(PXL(343,302) = 3748071) // координата и цвет красного
  8.   LCLICK(724,320)  // 15623680
  9.   WAITMS(500)
  10. END_IF
  11.  
  12. IF(PXL(168,122) = 52224) // координата и цвет зеленого
  13.   LCLICK(891,140)  // 15623680
  14.   WAITMS(500)
  15. END_IF
Название: Re: Анализ текста в окне
Отправлено: Валера Л от Май 18, 2016, 10:00:35 pm
поправочка, лишние скобки в условии.
Код: Clickermann
  1. LCLICK(792,737)  // 7959563
  2. WAITMS(20)
  3. LCLICK(791,610)  // 255
  4. WAITMS(800)
  5.  
  6. GETSCREEN // снимок экрана в буфер кликера для последующего анализа
  7. IF(PXL(343,302) = 3748071) // координата и цвет красного
  8.   LCLICK(724,320)  // 15623680
  9.   WAITMS(500)
  10. END_IF
  11.  
  12. IF(PXL(168,122) = 52224) // координата и цвет зеленого
  13.   LCLICK(891,140)  // 15623680
  14.   WAITMS(500)
  15. END_IF


Спасибо, исправлю.
А как на счет интеграции кода нарезки, в код скрипта?
Как его, правильно, интегрировать?
Название: Re: Анализ текста в окне
Отправлено: Валера Л от Май 19, 2016, 12:48:35 pm
что подразумевается под термином нарезка?

Я подразумеваю вот это:

 "....а образцы цифр ловят в скрины с мониторов и вырезают в паинте до нужного размера, как сало на ломтики. ;D"

пыс. Что то мне перестали приходить уведомления, с форы.
         В связи с чем не могу своевременно реагировать на ответы
Название: Re: Анализ текста в окне
Отправлено: Валера Л от Май 20, 2016, 05:43:18 pm
Всем привет.
"Разделка","вырезка", "нарезка вырезки". Решил я обойти эту "кулинарную" тему.
Сделаю шаблоны своими руками,в редакторе.
К примеру в "паинте".
В связи с чем пытаюсь научить скрипт обращаться в файл, в котором хранятся шаблоны, и определять нужную комбинацию.

Надеюсь на помощь крутых Кликермэнов
Может кто поможет?

Пример шаблона:




Название: Re: Анализ текста в окне
Отправлено: Oraven от Май 21, 2016, 09:28:31 am
Вот написал более короткий скрипт распознавания любых символов. Пробелы не учитываются!
Код: Clickermann
  1. #name "Распознавание символов v1.0"
  2.  
  3. SUB(An, $let, $pict)
  4.   SCANPICTURE($ARR_SCAN, $x1,$y1, $x2,$y2, $pict, -1, 100)
  5.   FOR($arr_num=0,$arr_num<ARRSIZE($ARR_SCAN),2)
  6.      ARRPUSH($ARR_OUT, $ARR_SCAN[$arr_num])
  7.      ARRPUSH($ARR_OUT, $let)
  8.   END_CYC
  9.   UNDEFINE($ARR_SCAN)
  10. END_SUB
  11.  
  12. // область распознавания
  13. $x1 = 222 // верхний левый угол
  14. $y1 = 592
  15.  
  16. $x2 = 302 // нижний правый
  17. $y2 = 615
  18.  
  19. GETSCREEN
  20. An("0","Letters\0.bmp")
  21. An("1","Letters\1.bmp")
  22. An("2","Letters\2.bmp")
  23. An("3","Letters\3.bmp")
  24. An("4","Letters\4.bmp")
  25. An("5","Letters\5.bmp")
  26. An("6","Letters\6.bmp")
  27. An("7","Letters\7.bmp")
  28. An("8","Letters\8.bmp")
  29. An("9","Letters\9.bmp")
  30.  
  31. $siz = ARRSIZE($ARR_OUT)
  32. $srtcheck = 0
  33. $srt = 0
  34. FOR($a=$siz-2,($a>0)&($srt=0),-2)
  35.   FOR($b=0,$b<$a,2)
  36.      IF($ARR_OUT[$b] > $ARR_OUT[$b+2])
  37.         $srtcheck = 1
  38.         $tmp = $ARR_OUT[$b]
  39.         $tmp2 = $ARR_OUT[$b+1]
  40.         $ARR_OUT[$b] = $ARR_OUT[$b+2]
  41.         $ARR_OUT[$b+1] = $ARR_OUT[$b+3]
  42.         $ARR_OUT[$b+2] = $tmp
  43.         $ARR_OUT[$b+3] = $tmp2
  44.      END_IF
  45.   END_CYC
  46.   IF($srtcheck = 0)
  47.      $srt = 1
  48.   END_IF
  49. END_CYC
  50.  
  51. $str = ""
  52. FOR($a=0,$a<ARRSIZE($ARR_OUT),2)  
  53.   IF(STRLEN($str) > 0)
  54.      $str = STRCONCAT($str, $ARR_OUT[$a+1])
  55.   ELSE
  56.      $str = $ARR_OUT[$a+1]
  57.   END_IF    
  58. END_CYC
  59. UNDEFINE($ARR_OUT)
  60. LOGWRITE ($str) // в $str выводятся распознанные символы
  61.  
  62. HALT
  63.  
Название: Re: Анализ текста в окне
Отправлено: Oraven от Май 21, 2016, 03:20:39 pm
Улучшенный скрипт для версии 4.12 кликера.

Теперь скрипт сам определяет символ по первому символу из имени картинки. Нужно лишь нарезать картинки символов и обозвать их соответствующим образом.
К сожалению пока на 4.12 функция GETFILELIST работает крайне плохо. В большинстве случаев просто не возвращает имена файлов поэтому пока от него мало толку.

Код: Clickermann
  1. #name "Распознавание символов v1.1"
  2. // для версии кликера v4.12+
  3.  
  4. SUB(recognize, $x1,$y1, $x2,$y2)
  5.   GETFILELIST($Letters_arr, "Letters\*.bmp")
  6.   GETSCREEN($x1,$y1, $x2,$y2)
  7.   FOR($Let_num=0,$Let_num<ARRSIZE($Letters_arr))
  8.      SCANPICTURE($ARR_SCAN, $x1,$y1, $x2,$y2, STRCONCAT("Letters\", $Letters_arr[$Let_num]), -1, 100)
  9.      FOR($arr_num=0,$arr_num<ARRSIZE($ARR_SCAN),2)
  10.         ARRPUSH($ARR_OUT, $ARR_SCAN[$arr_num])
  11.         $Let = STRCUT($Letters_arr[$Let_num], 1, 1)
  12.         SWITCH($Let)
  13.         CASE(".") // решение проблемы точки
  14.            ARRPUSH($ARR_OUT, "..")
  15.         DEFAULT
  16.            ARRPUSH($ARR_OUT, $Let)
  17.         END_SWITCH
  18.      END_CYC
  19.      UNDEFINE($ARR_SCAN)
  20.   END_CYC
  21.  
  22.   $siz = ARRSIZE($ARR_OUT)
  23.   $srtcheck = 0
  24.   $srt = 0
  25.   FOR($a=$siz-2,($a>0)&($srt=0),-2)
  26.      FOR($b=0,$b<$a,2)
  27.         IF($ARR_OUT[$b] > $ARR_OUT[$b+2])
  28.            $srtcheck = 1
  29.            $tmp = $ARR_OUT[$b]
  30.            $tmp2 = $ARR_OUT[$b+1]
  31.            $ARR_OUT[$b] = $ARR_OUT[$b+2]
  32.            $ARR_OUT[$b+1] = $ARR_OUT[$b+3]
  33.            $ARR_OUT[$b+2] = $tmp
  34.            $ARR_OUT[$b+3] = $tmp2
  35.         END_IF
  36.      END_CYC
  37.      IF($srtcheck = 0)
  38.         $srt = 1
  39.      END_IF
  40.   END_CYC
  41.  
  42.   $str = ""
  43.   FOR($a=0,$a<ARRSIZE($ARR_OUT),2)
  44.  
  45.      IF(STRLEN($str) > 0)
  46.         IF($ARR_OUT[$a]-$ARR_OUT[$a-2] > 10) // обпределение пробела
  47.            $str = STRCONCAT($str, " ")
  48.         END_IF
  49.         $str = STRREPLACE(STRCONCAT($str, $ARR_OUT[$a+1]), "..", ".")
  50.      ELSE
  51.         $str = STRREPLACE($ARR_OUT[$a+1], "..", ".")
  52.      END_IF
  53.  
  54.   END_CYC
  55.   UNDEFINE($ARR_OUT)
  56.   // в $str выводятся распознанные символы
  57. END_SUB
  58.  
  59.  
  60. recognize(673,437, 738,454) // область распознавания
  61. LOGWRITE ($str)
  62. recognize(24,192, 165,222) // область распознавания
  63. LOGWRITE ($str)
  64.  
  65. HALT

Скрипт для 4.13 версии
Код: Clickermann
  1. SUB(recognize, $x1,$y1, $x2,$y2, $c_ignor, $prc)
  2.   GETFILELIST($Letters_arr, "Letters\*.bmp")
  3.   FOR($Let_num=0,$Let_num<ARRSIZE($Letters_arr))
  4.      SCANPICTURE($ARR_SCAN, $x1,$y1, $x2,$y2, STRCONCAT("Letters\", $Letters_arr[$Let_num]), $c_ignor, $prc)
  5.      FOR($arr_num=0,$arr_num<ARRSIZE($ARR_SCAN),2)
  6.         ARRPUSH($ARR_OUT, $ARR_SCAN[$arr_num])
  7.         ARRPUSH($ARR_OUT, STRCUT($Letters_arr[$Let_num], 1, 1))
  8.      END_CYC
  9.      UNDEFINE($ARR_SCAN)
  10.   END_CYC
  11.   $siz = ARRSIZE($ARR_OUT)
  12.   $srtcheck = 0
  13.   $srt = 0
  14.   FOR($a=$siz-2,($a>0)&($srt=0),-2)
  15.      FOR($b=0,$b<$a,2)
  16.         IF($ARR_OUT[$b] > $ARR_OUT[$b+2])
  17.            $srtcheck = 1
  18.            $tmp = $ARR_OUT[$b]
  19.            $tmp2 = $ARR_OUT[$b+1]
  20.            $ARR_OUT[$b] = $ARR_OUT[$b+2]
  21.            $ARR_OUT[$b+1] = $ARR_OUT[$b+3]
  22.            $ARR_OUT[$b+2] = $tmp
  23.            $ARR_OUT[$b+3] = $tmp2
  24.         END_IF
  25.      END_CYC
  26.      IF($srtcheck = 0)
  27.         $srt = 1
  28.      END_IF
  29.   END_CYC
  30.   $str = ""
  31.   FOR($a=0,$a<ARRSIZE($ARR_OUT),2)
  32.      IF(STRLEN($str) > 0)
  33.         IF($ARR_OUT[$a]-$ARR_OUT[$a-2] > 10) // обпределение пробела
  34.            $str = STRCONCAT($str, " ")
  35.         END_IF
  36.         $str = STRCONCAT($str, $ARR_OUT[$a+1])
  37.      ELSE
  38.         $str = $ARR_OUT[$a+1]
  39.      END_IF
  40.   END_CYC
  41.   UNDEFINE($ARR_OUT)
  42. END_SUB
  43.  
  44.  
  45. GETSCREEN
  46. recognize(147,783, 219,809, -1, 100) // область распознавания, цвет прозрачности, процент совпадения
  47. LOGWRITE ($str) // в переменную $str выводятся распознанные символы
  48.  
  49. HALT

В данном примере реализован независимый процент совпадения для каждого символа.
Параметры пишутся непосредственно в имени файла.
Например "0_84.bmp" означает что символ для поиска "0" а процент совпадения "84"
Код: Clickermann
  1. // требуемая версия 4.13 и выше
  2.  
  3. SUB(recognize, $x1,$y1, $x2,$y2) // описание подпрограммы пишем вначале скрипта
  4.   GETFILELIST($Letters_arr, "Letters\*.bmp")
  5.   FOR($Let_num=0,$Let_num<ARRSIZE($Letters_arr))
  6.      STRSEPARATE($Letters_arr[$Let_num], "_", $a_l)
  7.      SCANPICTURE($ARR_SCAN, $x1,$y1, $x2,$y2, STRCONCAT("Letters\", $Letters_arr[$Let_num]), -1, STRREPLACE($a_l[ARRSIZE($a_l)-1],".bmp",""))
  8.      UNDEFINE($a_l)
  9.      FOR($arr_num=0,$arr_num<ARRSIZE($ARR_SCAN),2)
  10.         ARRPUSH($ARR_OUT, $ARR_SCAN[$arr_num])
  11.         ARRPUSH($ARR_OUT, STRCUT($Letters_arr[$Let_num], 1, 1))
  12.      END_CYC
  13.      UNDEFINE($ARR_SCAN)
  14.   END_CYC
  15.   $siz = ARRSIZE($ARR_OUT)
  16.   $srtcheck = 0
  17.   $srt = 0
  18.   FOR($a=$siz-2,($a>0)&($srt=0),-2)
  19.      FOR($b=0,$b<$a,2)
  20.         IF($ARR_OUT[$b] > $ARR_OUT[$b+2])
  21.            $srtcheck = 1
  22.            $tmp = $ARR_OUT[$b]
  23.            $tmp2 = $ARR_OUT[$b+1]
  24.            $ARR_OUT[$b] = $ARR_OUT[$b+2]
  25.            $ARR_OUT[$b+1] = $ARR_OUT[$b+3]
  26.            $ARR_OUT[$b+2] = $tmp
  27.            $ARR_OUT[$b+3] = $tmp2
  28.         END_IF
  29.      END_CYC
  30.      IF($srtcheck = 0)
  31.         $srt = 1
  32.      END_IF
  33.   END_CYC
  34.   $str = ""
  35.   FOR($a=0,$a<ARRSIZE($ARR_OUT),2)
  36.      IF(STRLEN($str) > 0)
  37.         IF($ARR_OUT[$a]-$ARR_OUT[$a-2] > 50) // определение пробела (сколько пикселов между символами считать за пробел)
  38.            $str = STRCONCAT($str, " ")
  39.         END_IF
  40.         $str = STRCONCAT($str, $ARR_OUT[$a+1])
  41.      ELSE
  42.         $str = $ARR_OUT[$a+1]
  43.      END_IF
  44.   END_CYC
  45.   UNDEFINE($ARR_OUT)
  46.   UNDEFINE($ARR_SCAN)
  47. END_SUB
  48.  
  49. //=============================================
  50.  
  51.  
  52. // вызов подпрограммы распознавания
  53. GETSCREEN
  54. COLORMODE(6)
  55. recognize(100,100, 400,400) // область распознавания
  56. LOGWRITE($str) // переменная с результатом (смотрим лог)
  57.  
  58. HALT
Название: Re: Анализ текста в окне
Отправлено: dramster от Май 21, 2016, 05:47:13 pm
вот тебе еще вариант, взял отсюда http://crapware.aidf.org/forum/index.php?topic=2336.msg14743#msg14743 , на представленных тобой двух картинках работает отлично.
код немного подредактировал, вынес переменные уровня цветокоррекции и цвета цифр.
Код: Clickermann
  1. #name "ReCapcha"
  2.  
  3. SUB(pos_size)
  4.   UNDEFINE($num_line_start)
  5.   UNDEFINE($num_line_end)
  6.   UNDEFINE($num_real)
  7.   UNDEFINE($num_y1)
  8.   UNDEFINE($num_y2)
  9.  
  10.   GETSCREEN($x1_fr,$y1_fr,$x2_fr,$y2_fr)
  11.   COLORMODE($clmod,$x1_fr,$y1_fr,$x2_fr,$y2_fr)
  12.  
  13.  
  14.   scanpxl($cap_arr,$x1_fr,$y1_fr,$x2_fr,$y2_fr, $num_color)
  15.   IF(ARRSIZE ($cap_arr) = 0)
  16.      print("капчи в этом поле нету")
  17.      halt
  18.   END_IF
  19.   $y1_cap=$cap_arr[1]
  20.   $y2_cap=ARRPOP($cap_arr)
  21.  
  22.  
  23.   FOR($x=$x1_fr,$x<$x2_fr)
  24.      FOR($y=$y1_cap,$y<$y2_cap+1)
  25.  
  26.         IF(pxl($x,$y) = $num_color)
  27.            $x1_cap= $x
  28.  
  29.            $y=$y2_cap+1
  30.            $x=$x2_fr
  31.         END_IF
  32.      END_CYC
  33.   END_CYC
  34.  
  35.   FOR($x=$x2_fr,$x>$x1_fr,-1)
  36.      FOR($y=$y1_cap,$y<$y2_cap+1)
  37.         IF(pxl($x,$y) = $num_color)
  38.            $x2_cap= $x
  39.            $y=$y2_cap+1
  40.            $x=$x1_fr
  41.         END_IF
  42.      END_CYC
  43.   END_CYC
  44.  
  45.   //print($x1_cap," ",$y1_cap," ",$x2_cap," ",$y2_cap)
  46.   //=======================================
  47.  
  48.   ARRPUSH ($num_line_start, $x1_cap)
  49.   FOR($x=$x1_cap,$x<$x2_cap)
  50.      FOR($y=$y1_cap,$y<$y2_cap+1)
  51.         IF(pxl($x,$y)  = $num_color)
  52.            IF((pxl($x+1,$y)  = $num_color)|(pxl($x+1,$y-1) =$num_color)|(pxl($x+1,$y+1) = $num_color))
  53.               $y=999999
  54.            END_IF
  55.         END_IF
  56.  
  57.      END_CYC
  58.      IF($y=$y2_cap+1)
  59.         ARRPUSH ($num_line_end, $x)
  60.         FOR($x_check=$x+1,$x_check<$x2_cap)
  61.            FOR($y_check=$y1_cap,$y_check<$y2_cap+1)
  62.               IF(pxl($x_check,$y_check)  = $num_color)
  63.                  $x= $x_check
  64.                  ARRPUSH ($num_line_start, $x)
  65.                  $y_check=$y2_cap+1
  66.                  $x_check=$x2_cap
  67.               END_IF
  68.            END_CYC
  69.         END_CYC
  70.      END_IF
  71.   END_CYC
  72.   ARRPUSH ($num_line_end, $x2_cap)
  73.  
  74.   //===================================
  75.  
  76.   FOR($num=0,$num<arrsize($num_line_start))
  77.      FOR($y=$y1_cap,$y<$y2_cap)
  78.         FOR($x=$num_line_start[$num],$x<$num_line_end[$num]+1)
  79.            IF(pxl($x,$y)  = $num_color)
  80.               ARRPUSH($num_y1,$y)
  81.               $y=99999
  82.               $x=$num_line_end[$num]+1
  83.            END_IF
  84.         END_CYC
  85.      END_CYC
  86.   END_CYC
  87.  
  88.   FOR($num=0,$num<arrsize($num_line_start))
  89.      FOR($y=int($y2_cap),$y>$y1_cap,-1)
  90.         FOR($x=$num_line_start[$num],$x<$num_line_end[$num]+1)
  91.            IF(pxl($x,$y)  = $num_color)
  92.               ARRPUSH($num_y2,$y)
  93.               $y=$y1_cap
  94.               $x=$num_line_end[$num]+1
  95.            END_IF
  96.         END_CYC
  97.      END_CYC
  98.   END_CYC
  99.   print("=====================")
  100.   print("найдено цифр в поле - ",arrsize($num_line_start))
  101.  
  102.  
  103.   //   FOR($a=0,$a<arrsize($num_line_start))
  104.   //      print($num_line_start[$a],",",$num_y1[$a],",",$num_line_end[$a],",",$num_y2[$a])
  105.   //   END_CYC
  106. END_SUB
  107.  
  108. //=============================================
  109. SUB(side)
  110.   FOR($num=0,$num<arrsize($num_line_start))
  111.      $step =($num_y2[$num]-$num_y1[$num])/4
  112.  
  113.      FOR($a=0,$a<4)
  114.         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)
  115.            $x=$_return1
  116.         END_IF
  117.  
  118.         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)
  119.            IF($x-$_return1=0)
  120.               ARRPUSH ($side, 0)
  121.            else
  122.               IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)>2)
  123.                  ARRPUSH ($side, -1)
  124.               else
  125.                  IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)>0)
  126.                     ARRPUSH ($side, -2)
  127.                  END_IF
  128.               END_IF
  129.               IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)<-2)
  130.                  ARRPUSH ($side, 1)
  131.               else
  132.                  IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)<0)
  133.                     ARRPUSH ($side, 2)
  134.                  END_IF
  135.               END_IF
  136.            END_IF
  137.         else
  138.            ARRPUSH ($side, 0)
  139.         END_IF
  140.  
  141.         FOR($e=$num_line_end[$num],$e>$num_line_start[$num],-1)
  142.            IF(pxl($e,$num_y1[$num]+ROUND(($step*$a),0)) = $num_color)
  143.               $x=$e
  144.               $e=$num_line_start[$num]
  145.            END_IF
  146.         END_CYC
  147.         FOR($e=$num_line_end[$num],$e>$num_line_start[$num],-1)
  148.            IF(pxl($e,$num_y1[$num]+ROUND(($step*($a+1)),0)) = $num_color)
  149.               $xs=$e
  150.               $e=$num_line_start[$num]
  151.            END_IF
  152.         END_CYC
  153.  
  154.         IF($x-$xs=0)
  155.            ARRPUSH ($side, 0)
  156.         else
  157.            IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)>2)
  158.               ARRPUSH ($side, -1)
  159.            else
  160.               IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)>0)
  161.                  ARRPUSH ($side, -2)
  162.               END_IF
  163.            END_IF
  164.            IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)<-2)
  165.               ARRPUSH ($side, 1)
  166.            else
  167.               IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)<0)
  168.                  ARRPUSH ($side, 2)
  169.               END_IF
  170.            END_IF
  171.         END_IF
  172.  
  173.      END_CYC
  174.  
  175.      print("-------------")
  176.  
  177.      $side_str = $side[0]
  178.      FOR($b=1,$b<arrsize($side))
  179.         $side_str = STRCONCAT ($side_str,":",$side[$b])
  180.      END_CYC
  181.      //  print($side_str)
  182.  
  183.      FOR($c=0,$c<10)
  184.  
  185.         FOR($n=1,$n<TFCOUNT(STRCONCAT("num_",$c))+1)
  186.            STRSEPARATE (TFREAD (STRCONCAT("num_",$c),$n), ":", $temp_arr)
  187.  
  188.            FOR($i=0,$i<8)
  189.               IF(int($temp_arr[$i]) ! int($side[$i]))
  190.                  $i=999
  191.               END_IF
  192.            END_CYC
  193.            IF($i < 999)
  194.               print("цифра ", $num+1," это ",$c)
  195.               ARRPUSH ($num_fin,$c)
  196.               ARRPUSH ($cap_all_arr,$c)
  197.               $n=TFCOUNT(STRCONCAT("num_",$c))+1
  198.               $c=10
  199.            END_IF
  200.            UNDEFINE($temp_arr)
  201.         END_CYC
  202.      END_CYC
  203.  
  204.      IF(arrsize($num_fin)<1)
  205.         print("цифра ",$num+1," не распознана")
  206.         $n_file = INPUTBOX(STRCONCAT("введи цифру которая в капче под номером ",$num+1), 0, 120)
  207.         IF($n_file = "")
  208.            halt
  209.         END_IF
  210.         ARRPUSH ($cap_all_arr,$n_file)
  211.         TFWRITE (STRCONCAT("num_",$n_file), $side_str)
  212.      END_IF
  213.  
  214.      UNDEFINE($side)
  215.      UNDEFINE($num_fin)
  216.   END_CYC
  217.  
  218.   $cap_all_str = $cap_all_arr[0]
  219.   FOR($a=1,$a<arrsize($cap_all_arr))
  220.      $cap_all_str = STRCONCAT ($cap_all_str,$cap_all_arr[$a])
  221.   END_CYC
  222.   print("-------------")
  223.   print($cap_all_str)
  224.   print(" ")
  225.  
  226. END_SUB
  227. //=============================================
  228. //=============================================
  229. //=============================================
  230. $clmod = 7  //уровень коррекции цвета
  231. $num_color = 8388607     //цвет цифр при указанном выше уровне цветокоррекции.
  232.  
  233.  
  234. $x1_fr=325     // координаты поля с капчей (целиком, то что белое)
  235. $y1_fr=395
  236. $x2_fr=369
  237. $y2_fr=419
  238.  
  239.  
  240. pos_size()      // определение границ цифр в капче
  241.  
  242. side()     //распознаватель
  243.  
  244. //в этоге мы имеем массив с цифрами  $cap_all_arr
  245. //и строку  $cap_all_str
  246.  
  247.  
  248. 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 знака.


если же тебе это всеравно покажется сложным, предоставь на форуме картинки всех цифр, можно в разнобой, я обучу и дам тебе нужные файлы.
Название: Re: Анализ текста в окне
Отправлено: Валера Л от Май 23, 2016, 11:49:47 am
вот тебе еще вариант, взял отсюда http://crapware.aidf.org/forum/index.php?topic=2336.msg14743#msg14743 , на представленных тобой двух картинках работает отлично.
код немного подредактировал, вынес переменные уровня цветокоррекции и цвета цифр.
Код: Clickermann
  1. #name "ReCapcha"
  2.  
  3. SUB(pos_size)
  4.   UNDEFINE($num_line_start)
  5.   UNDEFINE($num_line_end)
  6.   UNDEFINE($num_real)
  7.   UNDEFINE($num_y1)
  8.   UNDEFINE($num_y2)
  9.  
  10.   GETSCREEN($x1_fr,$y1_fr,$x2_fr,$y2_fr)
  11.   COLORMODE($clmod,$x1_fr,$y1_fr,$x2_fr,$y2_fr)
  12.  
  13.  
  14.   scanpxl($cap_arr,$x1_fr,$y1_fr,$x2_fr,$y2_fr, $num_color)
  15.   IF(ARRSIZE ($cap_arr) = 0)
  16.      print("капчи в этом поле нету")
  17.      halt
  18.   END_IF
  19.   $y1_cap=$cap_arr[1]
  20.   $y2_cap=ARRPOP($cap_arr)
  21.  
  22.  
  23.   FOR($x=$x1_fr,$x<$x2_fr)
  24.      FOR($y=$y1_cap,$y<$y2_cap+1)
  25.  
  26.         IF(pxl($x,$y) = $num_color)
  27.            $x1_cap= $x
  28.  
  29.            $y=$y2_cap+1
  30.            $x=$x2_fr
  31.         END_IF
  32.      END_CYC
  33.   END_CYC
  34.  
  35.   FOR($x=$x2_fr,$x>$x1_fr,-1)
  36.      FOR($y=$y1_cap,$y<$y2_cap+1)
  37.         IF(pxl($x,$y) = $num_color)
  38.            $x2_cap= $x
  39.            $y=$y2_cap+1
  40.            $x=$x1_fr
  41.         END_IF
  42.      END_CYC
  43.   END_CYC
  44.  
  45.   //print($x1_cap," ",$y1_cap," ",$x2_cap," ",$y2_cap)
  46.   //=======================================
  47.  
  48.   ARRPUSH ($num_line_start, $x1_cap)
  49.   FOR($x=$x1_cap,$x<$x2_cap)
  50.      FOR($y=$y1_cap,$y<$y2_cap+1)
  51.         IF(pxl($x,$y)  = $num_color)
  52.            IF((pxl($x+1,$y)  = $num_color)|(pxl($x+1,$y-1) =$num_color)|(pxl($x+1,$y+1) = $num_color))
  53.               $y=999999
  54.            END_IF
  55.         END_IF
  56.  
  57.      END_CYC
  58.      IF($y=$y2_cap+1)
  59.         ARRPUSH ($num_line_end, $x)
  60.         FOR($x_check=$x+1,$x_check<$x2_cap)
  61.            FOR($y_check=$y1_cap,$y_check<$y2_cap+1)
  62.               IF(pxl($x_check,$y_check)  = $num_color)
  63.                  $x= $x_check
  64.                  ARRPUSH ($num_line_start, $x)
  65.                  $y_check=$y2_cap+1
  66.                  $x_check=$x2_cap
  67.               END_IF
  68.            END_CYC
  69.         END_CYC
  70.      END_IF
  71.   END_CYC
  72.   ARRPUSH ($num_line_end, $x2_cap)
  73.  
  74.   //===================================
  75.  
  76.   FOR($num=0,$num<arrsize($num_line_start))
  77.      FOR($y=$y1_cap,$y<$y2_cap)
  78.         FOR($x=$num_line_start[$num],$x<$num_line_end[$num]+1)
  79.            IF(pxl($x,$y)  = $num_color)
  80.               ARRPUSH($num_y1,$y)
  81.               $y=99999
  82.               $x=$num_line_end[$num]+1
  83.            END_IF
  84.         END_CYC
  85.      END_CYC
  86.   END_CYC
  87.  
  88.   FOR($num=0,$num<arrsize($num_line_start))
  89.      FOR($y=int($y2_cap),$y>$y1_cap,-1)
  90.         FOR($x=$num_line_start[$num],$x<$num_line_end[$num]+1)
  91.            IF(pxl($x,$y)  = $num_color)
  92.               ARRPUSH($num_y2,$y)
  93.               $y=$y1_cap
  94.               $x=$num_line_end[$num]+1
  95.            END_IF
  96.         END_CYC
  97.      END_CYC
  98.   END_CYC
  99.   print("=====================")
  100.   print("найдено цифр в поле - ",arrsize($num_line_start))
  101.  
  102.  
  103.   //   FOR($a=0,$a<arrsize($num_line_start))
  104.   //      print($num_line_start[$a],",",$num_y1[$a],",",$num_line_end[$a],",",$num_y2[$a])
  105.   //   END_CYC
  106. END_SUB
  107.  
  108. //=============================================
  109. SUB(side)
  110.   FOR($num=0,$num<arrsize($num_line_start))
  111.      $step =($num_y2[$num]-$num_y1[$num])/4
  112.  
  113.      FOR($a=0,$a<4)
  114.         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)
  115.            $x=$_return1
  116.         END_IF
  117.  
  118.         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)
  119.            IF($x-$_return1=0)
  120.               ARRPUSH ($side, 0)
  121.            else
  122.               IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)>2)
  123.                  ARRPUSH ($side, -1)
  124.               else
  125.                  IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)>0)
  126.                     ARRPUSH ($side, -2)
  127.                  END_IF
  128.               END_IF
  129.               IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)<-2)
  130.                  ARRPUSH ($side, 1)
  131.               else
  132.                  IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)<0)
  133.                     ARRPUSH ($side, 2)
  134.                  END_IF
  135.               END_IF
  136.            END_IF
  137.         else
  138.            ARRPUSH ($side, 0)
  139.         END_IF
  140.  
  141.         FOR($e=$num_line_end[$num],$e>$num_line_start[$num],-1)
  142.            IF(pxl($e,$num_y1[$num]+ROUND(($step*$a),0)) = $num_color)
  143.               $x=$e
  144.               $e=$num_line_start[$num]
  145.            END_IF
  146.         END_CYC
  147.         FOR($e=$num_line_end[$num],$e>$num_line_start[$num],-1)
  148.            IF(pxl($e,$num_y1[$num]+ROUND(($step*($a+1)),0)) = $num_color)
  149.               $xs=$e
  150.               $e=$num_line_start[$num]
  151.            END_IF
  152.         END_CYC
  153.  
  154.         IF($x-$xs=0)
  155.            ARRPUSH ($side, 0)
  156.         else
  157.            IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)>2)
  158.               ARRPUSH ($side, -1)
  159.            else
  160.               IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)>0)
  161.                  ARRPUSH ($side, -2)
  162.               END_IF
  163.            END_IF
  164.            IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)<-2)
  165.               ARRPUSH ($side, 1)
  166.            else
  167.               IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)<0)
  168.                  ARRPUSH ($side, 2)
  169.               END_IF
  170.            END_IF
  171.         END_IF
  172.  
  173.      END_CYC
  174.  
  175.      print("-------------")
  176.  
  177.      $side_str = $side[0]
  178.      FOR($b=1,$b<arrsize($side))
  179.         $side_str = STRCONCAT ($side_str,":",$side[$b])
  180.      END_CYC
  181.      //  print($side_str)
  182.  
  183.      FOR($c=0,$c<10)
  184.  
  185.         FOR($n=1,$n<TFCOUNT(STRCONCAT("num_",$c))+1)
  186.            STRSEPARATE (TFREAD (STRCONCAT("num_",$c),$n), ":", $temp_arr)
  187.  
  188.            FOR($i=0,$i<8)
  189.               IF(int($temp_arr[$i]) ! int($side[$i]))
  190.                  $i=999
  191.               END_IF
  192.            END_CYC
  193.            IF($i < 999)
  194.               print("цифра ", $num+1," это ",$c)
  195.               ARRPUSH ($num_fin,$c)
  196.               ARRPUSH ($cap_all_arr,$c)
  197.               $n=TFCOUNT(STRCONCAT("num_",$c))+1
  198.               $c=10
  199.            END_IF
  200.            UNDEFINE($temp_arr)
  201.         END_CYC
  202.      END_CYC
  203.  
  204.      IF(arrsize($num_fin)<1)
  205.         print("цифра ",$num+1," не распознана")
  206.         $n_file = INPUTBOX(STRCONCAT("введи цифру которая в капче под номером ",$num+1), 0, 120)
  207.         IF($n_file = "")
  208.            halt
  209.         END_IF
  210.         ARRPUSH ($cap_all_arr,$n_file)
  211.         TFWRITE (STRCONCAT("num_",$n_file), $side_str)
  212.      END_IF
  213.  
  214.      UNDEFINE($side)
  215.      UNDEFINE($num_fin)
  216.   END_CYC
  217.  
  218.   $cap_all_str = $cap_all_arr[0]
  219.   FOR($a=1,$a<arrsize($cap_all_arr))
  220.      $cap_all_str = STRCONCAT ($cap_all_str,$cap_all_arr[$a])
  221.   END_CYC
  222.   print("-------------")
  223.   print($cap_all_str)
  224.   print(" ")
  225.  
  226. END_SUB
  227. //=============================================
  228. //=============================================
  229. //=============================================
  230. $clmod = 7  //уровень коррекции цвета
  231. $num_color = 8388607     //цвет цифр при указанном выше уровне цветокоррекции.
  232.  
  233.  
  234. $x1_fr=325     // координаты поля с капчей (целиком, то что белое)
  235. $y1_fr=395
  236. $x2_fr=369
  237. $y2_fr=419
  238.  
  239.  
  240. pos_size()      // определение границ цифр в капче
  241.  
  242. side()     //распознаватель
  243.  
  244. //в этоге мы имеем массив с цифрами  $cap_all_arr
  245. //и строку  $cap_all_str
  246.  
  247.  
  248. 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 -------------
Название: Re: Анализ текста в окне
Отправлено: Oraven от Май 23, 2016, 02:18:34 pm
Ну и в чем проблема то, сделай 10 картинок цифр и точку и вперед.

Вот для 4.11 версии с учетом точки
Код: Clickermann
  1. #name "Распознавание символов v1.0.1"
  2. // для версии кликера v4.11
  3.  
  4. SUB(An, $let, $pict)
  5.   SCANPICTURE($ARR_SCAN, $x1,$y1, $x2,$y2, $pict, -1, 100)
  6.   FOR($arr_num=0,$arr_num<ARRSIZE($ARR_SCAN),2)
  7.      ARRPUSH($ARR_OUT, $ARR_SCAN[$arr_num])
  8.      SWITCH($Let)
  9.      CASE(".") // решение проблемы точки
  10.         ARRPUSH($ARR_OUT, "..")
  11.      DEFAULT
  12.         ARRPUSH($ARR_OUT, $Let)
  13.      END_SWITCH
  14.   END_CYC
  15.   UNDEFINE($ARR_SCAN)
  16. END_SUB
  17.  
  18. // область распознавания
  19. $x1 = 292 // верхний левый угол
  20. $y1 = 586
  21.  
  22. $x2 = 442 // нижний правый
  23. $y2 = 631
  24.  
  25. GETSCREEN
  26. An("0","Letters\0.bmp")
  27. An("1","Letters\1.bmp")
  28. An("2","Letters\2.bmp")
  29. An("3","Letters\3.bmp")
  30. An("4","Letters\4.bmp")
  31. An("5","Letters\5.bmp")
  32. An("6","Letters\6.bmp")
  33. An("7","Letters\7.bmp")
  34. An("8","Letters\8.bmp")
  35. An("9","Letters\9.bmp")
  36. An(".","Letters\.0.bmp")
  37.  
  38. $siz = ARRSIZE($ARR_OUT)
  39. $srtcheck = 0
  40. $srt = 0
  41. FOR($a=$siz-2,($a>0)&($srt=0),-2)
  42.   FOR($b=0,$b<$a,2)
  43.      IF($ARR_OUT[$b] > $ARR_OUT[$b+2])
  44.         $srtcheck = 1
  45.         $tmp = $ARR_OUT[$b]
  46.         $tmp2 = $ARR_OUT[$b+1]
  47.         $ARR_OUT[$b] = $ARR_OUT[$b+2]
  48.         $ARR_OUT[$b+1] = $ARR_OUT[$b+3]
  49.         $ARR_OUT[$b+2] = $tmp
  50.         $ARR_OUT[$b+3] = $tmp2
  51.      END_IF
  52.   END_CYC
  53.   IF($srtcheck = 0)
  54.      $srt = 1
  55.   END_IF
  56. END_CYC
  57.  
  58. $str = ""
  59. FOR($a=0,$a<ARRSIZE($ARR_OUT),2)
  60.   IF(STRLEN($str) > 0)
  61.      $str = STRREPLACE(STRCONCAT($str, $ARR_OUT[$a+1]), "..", ".")
  62.   ELSE
  63.      $str = STRREPLACE($ARR_OUT[$a+1], "..", ".")
  64.   END_IF
  65. END_CYC
  66. UNDEFINE($ARR_OUT)
  67. LOGWRITE ($str) // в $str выводятся распознанные символы
  68.  
  69. HALT
Название: Re: Анализ текста в окне
Отправлено: Oraven от Май 23, 2016, 02:20:41 pm
На счет кодировки, нужно в реестре поправить значения

Нужно приравнять кодировки 1250 и 1252 к 1251
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1250"="c_1251.nls"
"1251"="c_1251.nls"
"1252"="c_1251.nls"

И перезагрузить комп.
Название: Re: Анализ текста в окне
Отправлено: Oraven от Май 23, 2016, 02:22:23 pm
Если там графика меняется то дополнительно нужно делать цветокоррекцию, и скрины цифр тоже делать с цветокоррекцией.
Название: Re: Анализ текста в окне
Отправлено: Валера Л от Май 23, 2016, 03:36:22 pm
На счет кодировки, нужно в реестре поправить значения

Нужно приравнять кодировки 1250 и 1252 к 1251
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1250"="c_1251.nls"
"1251"="c_1251.nls"
"1252"="c_1251.nls"

И перезагрузить комп.



Кодировки приравнял, комп перезагрузил.
Все осталось без изменений.
По-прежнему рисует вопросики.


Все! Нашел причину.
Название: Re: Анализ текста в окне
Отправлено: aster от Сентябрь 30, 2016, 03:33:03 pm
помогите плз, скрипт распознования работает отлично,но как заставить его работать в цикле?
при последующем запросе распознования не определяет цифры,а добавляет в строку старые значения
что то нужно обнулить,а вот что не могу понять
скрипт dramsterа имею ввиду
Название: Re: Анализ текста в окне
Отправлено: Золотой от Сентябрь 30, 2016, 03:39:03 pm
помогите плз, скрипт распознования работает отлично,но как заставить его работать в цикле?
при последующем запросе распознования не определяет цифры,а добавляет в строку старые значения
что то нужно обнулить,а вот что не могу понять
скрипт dramsterа имею ввиду
А зачем тут понимать? После завершения твоего цикла, просто прописываешь удаление сначала массивов, потом наращиваемых переменных, если не поможет вообще всех переменных, дело-то простое и много ума не надо.
Название: Re: Анализ текста в окне
Отправлено: aster от Сентябрь 30, 2016, 04:12:55 pm
А зачем тут понимать? После завершения твоего цикла, просто прописываешь удаление сначала массивов, потом наращиваемых переменных, если не поможет вообще всех переменных, дело-то простое и много ума не надо.

если не трудно можно пример как обнулить массив?
Название: Re: Анализ текста в окне
Отправлено: Oraven от Сентябрь 30, 2016, 04:20:18 pm
А зачем тут понимать? После завершения твоего цикла, просто прописываешь удаление сначала массивов, потом наращиваемых переменных, если не поможет вообще всех переменных, дело-то простое и много ума не надо.

если не трудно можно пример как обнулить массив?

Код: Clickermann
  1. UNDEFINE($arr)
Название: Re: Анализ текста в окне
Отправлено: aster от Сентябрь 30, 2016, 04:35:02 pm
Код: Clickermann
  1. UNDEFINE($arr)

просто огромное спасибо , помоглло )))

Название: Re: Анализ текста в окне
Отправлено: YoClickamann от Октябрь 05, 2016, 10:03:34 am
Кто-нибудь здесь знаком с Sikuli, OpenCV, ProjectNaphta?
Название: Re: Анализ текста в окне
Отправлено: Vint от Октябрь 05, 2016, 10:38:48 am
Жениться вам надо барин.

Твоя неугомонная энергия несёт тебя по верхушкам тем, унося в сказочную даль.
Название: Re: Анализ текста в окне
Отправлено: i0 от Октябрь 05, 2016, 10:51:02 am
Твоя неугомонная энергия несёт тебя по верхушкам тем, унося в сказочную даль.
ну а мы кругозор расширяем, норм )
Название: Re: Анализ текста в окне
Отправлено: Vint от Октябрь 05, 2016, 11:05:58 am
 :)
Поискал, что же такое эта Сыкуля (Sikuli), блин, ну и название.
Увидел древнюю, примитивную и тормозную поделку с интересной задумкой. Но не стоящую внимания.
Есть много более полезных вещей, от селениума до упилота с автоитами... вплоть до любого высокоуровнего языка.

Про OpenCV читал только. Не было сферы применения. Ардуино не балуюсь и машинное зрение это не та область, где можно поковыряться два дня и прекрасно использовать в любых проектах. Всё динамично развивается и находится хоть и не в зачаточном состоянии, но далеко от конца пути.
Название: Re: Анализ текста в окне
Отправлено: Ddimas от Октябрь 19, 2016, 11:06:36 am
Ребят, подскажите пожалуйста следующее...

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

Название: Re: Анализ текста в окне
Отправлено: Золотой от Октябрь 19, 2016, 12:08:40 pm
Ребят, подскажите пожалуйста следующее...

нужно чтобы в определенной области экрана делал анализ цифр, он же ресурс(деньги)....и после этого листал дальше по кликом или когда нашел определенные действие, типа клика)) ...что я мог задать поиск цифр, более чем искомые
анализ цифр это слишком примитивно, воспользуйтесь выложенным на форуме скриптом " распознавание чисел"... и после этого поток сознания не оформленный в понятные предложения.
подскажите , что такое определённые действия типа клика, но не клик?
Название: Re: Анализ текста в окне
Отправлено: i0 от Октябрь 19, 2016, 12:12:52 pm
Ребят, подскажите пожалуйста следующее...
я понял по "он же ресурс(деньги)" включительно.
дальше мозг силится связать несогласованные слова и понимает, что: "да ну нафиг"
Название: Re: Анализ текста в окне
Отправлено: Vint от Октябрь 19, 2016, 12:34:01 pm
Может дальше это машинный перевод с украинского... или татарского?
Название: Re: Анализ текста в окне
Отправлено: Ddimas от Октябрь 19, 2016, 01:50:35 pm
Ну набросились)) я думал подскажите((.......вроде просто же...в определенном месте экрана(наверное по координатам), есть цифры, и к ним нужно применить следующие.....понять кликеру, величина числа и после нажать на нужное место), короче чтоб обновляла базы и искала нужное количество ресурсов, не точно а от заданной величины...да и ле есть шаблоны..может сам разберусь, побовал найти)) честно....спасибо
Название: Re: Анализ текста в окне
Отправлено: Vint от Октябрь 19, 2016, 02:22:09 pm
Ты повторно объяснил то, что все и так поняли и кстати ответили http://crapware.aidf.org/forum/index.php?topic=88.msg17859#msg17859
Не поняли вторую часть поста из-за несвязанных между собой слов.

То что посоветовали использовать, даже искать не нужно. Оно находится прямо в этой теме:
http://crapware.aidf.org/forum/index.php?topic=88.msg1571#msg1571

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

Если это не флэш, и число можно выделить мышью, то выделять и копировать в буфер обмена.
Название: Re: Анализ текста в окне
Отправлено: Cleoss от Октябрь 20, 2016, 01:38:40 am
.......вроде просто же...в определенном месте экрана(наверное по координатам), есть цифры, и к ним нужно применить следующие.....понять кликеру, величина числа и после нажать на нужное место), короче чтоб обновляла базы и искала нужное количество ресурсов, не точно а от заданной величины...да и ле есть шаблоны..

Это тест Тьюринга) куда там компам, админы не все догнали))
Название: Re: Анализ текста в окне
Отправлено: Shamax от Март 20, 2017, 09:05:25 am
(https://pp.userapi.com/c837135/v837135525/2e25b/yMPhESdI94c.jpg)
помогите сделать скрипт
сравнить 2 цифры
если 1 не равно 2 то кликать в определенной точке
Название: Re: Анализ текста в окне
Отправлено: Shamax от Март 20, 2017, 10:56:18 am
(https://pp.userapi.com/c837135/v837135525/2e25b/yMPhESdI94c.jpg)
помогите сделать скрипт
сравнить 2 цифры
если 1 не равно 2 то кликать в определенной точке
Народ когда уже научитесь отличать, что такое цифра, а что такое число? Если не все предложения в рублях тогда сравнивать стоит суммы с пересчётом в одну валюту с учётом указанного курса.
Помогите - это конечно конечно вопиющее требование, вроде "спасите", но хотелось бы понять чем вас не устраивает скрипт по распознаванию чисел который написал уважаемый Vint?
Вы хотите Проводить такую цветокорекцию картинок, чтоб изображение сводилось к одинаковому и близкому в процентах или требуется ещё более свежее решение? Просто нормальным скриптам своё предложение проще запоминать, чем узнавать по картинке. Здесь конечно есть мушкетёры которые"...пишут скрипты ради того, чтобы ПИСАТЬ", но может достаточно просто потыкать носом в уже написаннное? Тем более что если вы не умеете включать чужие скрипты в состав своих, то и написанные по вашему сценарию скрипт будет проблематично использовать на практике.

ну это реально сделать или нет?
сравнить число и все можно только последние 2 цифры сравнивать
ну я не знаю как это реализовать,
за сколько можно это сделать по деньгам
Название: Re: Анализ текста в окне
Отправлено: gsukhado от Август 07, 2017, 01:32:00 pm
Всем день добрый.
Попробовал использовать для своих целей Распознавание чисел 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) - тоже не помогло

Уважаемые знатоки, что тут еще надо "подвернуть", чтобы заработало для конкретной ситуации?

Код в основной части:
Код: Clickermann
  1. //основная часть
  2. #include "Распознавание чисел 1.5.cms" //подключение для распознавания уровня шахт
  3.  
  4. print("--------------")
  5. print("Начинаем фармить на поверхности")
  6.   undefine($mass_shaht)
  7.   getscreen
  8.   colormode(7)
  9.   $sh_x=0 //задание координат шахты для атаки, если (0,0) - то атаковать нечего
  10.   $sh_y=0
  11.  
  12.   // ---Поиск шахты с золотом  
  13.   SCANPICTURE ($mass_shaht, 70, 400, 355, 685, "g1_gold_7v1.bmp",-1,70) // ищем с 70% совпадения
  14.   Print("количество золотых шахт до проверки = ", arrsize($mass_shaht)/2 )
  15.  
  16.   $arrsize_fict=arrsize($mass_shaht)
  17.   while ($arrsize_fict > 0)
  18.      $tmp_y=arrpop($mass_shaht)
  19.      $tmp_x=arrpop($mass_shaht)
  20.  
  21.      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) // проверка на наличие тайминга
  22.         print("...тайминг есть, атаковать нельзя")
  23.         // поиск уровня обнаруженной шахты
  24.         $log = 1
  25.         number_read($tmp_x-18,$tmp_y+6,$tmp_x+8,$tmp_y+25, "textures\digit_", 7)
  26.         print ("уровень шахты:  ", $res, " просто посмотрели")
  27.  
  28.      else
  29.         print("...тайминга нет")
  30.         $sh_x=$tmp_x
  31.         $sh_y=$tmp_y
  32.         // поиск уровня обнаруженной шахты
  33.         $log = 1
  34.         number_read($tmp_x-18,$tmp_y+6,$tmp_x+8,$tmp_y+25, "textures\digit_", 7)
  35.         if ($res < 13)
  36.         print ("...уровень шахты:  ", $res, " атакуем")
  37. $arrsize_fict=0 //для прерывания цикла while - если нашли цель, то иные можно не проверять
  38. GOTO(end_while)
  39.         else
  40.            print("...уровень шахты:  ", $res, " НЕ атакуем")
  41.         end_if
  42.      end_if
  43.      $arrsize_fict=arrsize($mass_shaht)
  44.      end_while:  
  45.   end_cyc
  46. //далее алгоритм собственно атаки
  47.  

P.S.Не очень понял где лучше данный вопрос задать: то ли создавать отдельный вопрос в основном чате "Общие вопросы", то ли не плодить нового и продолжить имеющуюся тему. Решил продолжить имеющуюся
Название: Re: Анализ текста в окне
Отправлено: Vint от Август 07, 2017, 03:12:48 pm
Смещения пробовал ставить от $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% не найдёт.
что тут еще надо "подвернуть", чтобы заработало для конкретной ситуации?
А шрифт никак нельзя увеличить? Выставить более высокое разрешение в игре или подобрать размер окна чтоб размер был ближе к не сглаженным эталонам.

Если нельзя, то я сочувствую. Или выбрать другой способ или тщательно настраивать каждую цифру подбором образца и процента. Потом ещё исключить взаимное влияние.
Название: Re: Анализ текста в окне
Отправлено: gsukhado от Август 07, 2017, 06:17:37 pm
Vint, спасибо за ответы!
Что то нарезанные образцы цифр сильно рафинированные. Неужели настоящие?
Нет, пытался их облагородить :)

При таком маленьком шрифте и такой дикой разнице, там некоторые и на 50% не найдёт.
А шрифт никак нельзя увеличить? Выставить более высокое разрешение в игре или подобрать размер окна чтоб размер был ближе к не сглаженным эталонам.
Если нельзя, то я сочувствую. Или выбрать другой способ или тщательно настраивать каждую цифру подбором образца и процента. Потом ещё исключить взаимное влияние.
С ноутбука, так что размер в bluestack какой есть...
...Хотя попробую повернуть экран набок на 90 градусов, тогда размер экрана bluestack увеличится почти в 2 раза, буду надеяться что поможет....
Название: Re: Анализ текста в окне
Отправлено: faser от Август 07, 2017, 06:20:40 pm
А шрифт никак нельзя увеличить? Выставить более высокое разрешение в игре или подобрать размер окна чтоб размер был ближе к не сглаженным эталонам.

Если нельзя, то я сочувствую. Или выбрать другой способ или тщательно настраивать каждую цифру подбором образца и процента. Потом ещё исключить взаимное влияние.
там палка о 2-х концах. Надо чтобы больше шахт влазило, но при этом картинки будут - хрен разберешь. Можно приблизить, иметь хорошие картинки и отлично определять текст, но при этом на экран будет влезать всего пара шахт (если повезёт) нужного уровня. Постоянный фарм пары шахт - прямая дорга в баню. По хорошему, надо приблизить и помимо поиска картинок задать алгоритм слайда карты в пределах синей границы. Ну или хотя бы в большом приближении жестко задать количество свайпов типа: вправо, вправо, вниз, влево, влево, вверх)
Название: Re: Анализ текста в окне
Отправлено: gsukhado от Август 07, 2017, 09:17:01 pm
там палка о 2-х концах. Надо чтобы больше шахт влазило, но при этом картинки будут - хрен разберешь. Можно приблизить, иметь хорошие картинки и отлично определять текст, но при этом на экран будет влезать всего пара шахт (если повезёт) нужного уровня. Постоянный фарм пары шахт - прямая дорга в баню. По хорошему, надо приблизить и помимо поиска картинок задать алгоритм слайда карты в пределах синей границы. Ну или хотя бы в большом приближении жестко задать количество свайпов типа: вправо, вправо, вниз, влево, влево, вверх)
Да, все верно - "обход" свайпами внутри синей границы - это следующий шаг в восстановлении студенческих навыков программирования ))
Но сделать алгоритм рандомного блуждания внутри границы - сам не потяну, придется высчитывать и жестко прописывать свайпы обхода...
Название: Re: Анализ текста в окне
Отправлено: gsukhado от Август 08, 2017, 11:29:28 am
Общий вопрос по алгоритму Распознавание чисел 1.5.cms (http://crapware.aidf.org/forum/index.php?topic=88.msg1571#msg1571 )

Для случаев, когда конкретные написания цифр могут достаточно сильно отклоняться от "шаблона", можно ли использовать не конкретные образцы, а их массивы? Например, сделать подпапки "texures\number0\", "texures\number1\", "texures\number2\"... в которые накидывать разные написания одной и той же цифры. А алгоритм бы проверял на совпадение каждому из вариантов цифры в соответствующей подпапке.
А совсем идеально - чтобы если совпадений не найдено (установив высокую точность, например от 95), но скриншот данного кусочка экрана сразу складировался в отдельной папке - из которой потом вручную можно было бы нарезать цифры и добавить в нужную подпапку...

Есть мастера, которые могли бы так доделать алгоритм распознавания? Или тогда комп каждое распознавание будет по полчаса делать?
Название: Re: Анализ текста в окне
Отправлено: Vint от Август 08, 2017, 01:50:11 pm
Здесь такого нет. Но так делали другой способ распознавания, в основном для капчи.

С распознаванием чисел в данной ситуации это тупик. Слишком большая разница в рендерах.
Постоянно будут новые варианты и на настройку уйдёт гораздо больше времени, не говоря уж о скорости. Скорость будет всё падать и падать.
Хочешь - попробуй. Я бы не советовал так искать в данном случае.

Вот вся тема с несколькими вариантами
http://crapware.aidf.org/forum/index.php?topic=2336.0
Название: Re: Анализ текста в окне
Отправлено: Vint от Август 08, 2017, 01:58:43 pm
Если там не много шаблонов, а к примеру, 2 или 3 на цифру, то можно легко доделать.

Если у всех цифр по 3 шаблона, то просто добавить поисков:
Код: Clickermann
  1. SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,"_1.bmp"), 16744447, $pr)
  2. SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,"_2.bmp"), 16744447, $pr)
  3. SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,"_3.bmp"), 16744447, $pr)

Если у всех разное, то добавить через IF или SWITCH
Код: Clickermann
  1.      SWITCH($i)
  2.      CASE(0)
  3.         $pr = 95
  4.         SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,"_2.bmp"), 16744447, $pr)
  5.      CASE(1)
  6.         $pr = 99
  7.      CASE(3)
  8.         $pr = 93
  9.         SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,"_2.bmp"), 16744447, $pr)
  10.         SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,"_3.bmp"), 16744447, $pr)
  11.      CASE(4)
  12. ...

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

Но начнутся пересечения. При проценте отличном от 100, одну и ту же цифру может находить на одном и том же месте несколько раз.
И начнёт путать между цифрами, особенно 6-8-9-0 и 1-7
При 100% количество образцов будет не маленьким. И всё равно межцифровые ошибки возможны.
Название: Re: Анализ текста в окне
Отправлено: faser от Август 08, 2017, 04:52:35 pm
Общий вопрос по алгоритму Распознавание чисел 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
 т.к. это скорее вопросы не к скрипту распознавания цифр, а к нашему частному случаю в игре
Название: Re: Анализ текста в окне
Отправлено: gsukhado от Август 11, 2017, 01:37:08 am
Пытаюсь настроить под себя и разобраться с алгоритмом  Распознавание чисел 1.5.cms
Строка  102: $dead_size = ARRSIZE($dead)
Но ведь переменной $dead до этого никак не вводили и значение ей не задавали. Единственное что мы делаем, это _в_конце (!) цикла применяем UNDEFINE($dead).
Откуда в таком случае получается размер массива ARRSIZE($dead) ?
Название: Re: Анализ текста в окне
Отправлено: Oraven от Август 11, 2017, 08:05:48 am
$dead это массив, и да вначале он равен 0 и цикл будет пропущен. Но потом идет формирование этого массива если $dead_zone = 0 и на следующем круге FOR($j=0, $j < $a_scansize, 2) $dead_size уже не будет равна 0
Код: Clickermann
  1.         IF($dead_zone = 0)
  2.            ARRPUSH($dead, $X)
  3.            ARRPUSH($dead, $Y)
  4.            ARRPUSH($data, $X)
  5.            ARRPUSH($data, $i)
Название: Re: Анализ текста в окне
Отправлено: gsukhado от Август 14, 2017, 12:26:31 am
Извините, если не в тему  :( . Программка Portable ABBYY Screenshot Reader, весит всего 25м. Можно заставить кликер "таскать" руку для выделения зоны распознавания, результат (в зависимости от настроек) попадает в буфер обмена. Очень неплохо распознает текст, даже не горизонтальный (см. примеры в прицепе)! А вот если бы научиться передавать ей параметры зоны распознавания вместо графического выделения!!! Может кто "подломит"?  ;)

Попробовал, да весело распознает ;)
только если так приспособить:
переключаемся на окно с текстом
KEYPRESS R
выделяем область
KEYPRESS ENTER
распознанный текст в буфере
А для начинающего подробней можно, как это все запрограммировать?
...попробовал Portable ABBYY Screenshot Reader вручную - строку с буквами и цифрами распознает хорошо. А если только цифры без букв - то совсем плохо :(
Название: Re: Анализ текста в окне
Отправлено: gsukhado от Август 14, 2017, 01:19:06 pm
Стоит подумать о другом методе. Например поделить на зоны цифр и считать в области сумму чистого цвета 10310011
Может там граница более чёткая.
Имеется в виду что-то типа такого алгоритма? https://habrahabr.ru/post/101446/


А для случаев плохого распознавания (одни и те же цифры достаточно сильно друг от друга отличаются), вот этот вариант не поможет случайно, никто не пробовал?
https://habrahabr.ru/post/158431/
"Создаём новую двумерную матрицу b(x,y). В неё будем писать результаты.
Берём четыре соседних пикселя — квадрат.
Если хотя бы один из цветов этих пикселей остался в списке основных цветов — пишем в новую матрицу b(0,0)=Х. Если ни одного нет — пишем b(0,0)=0.
Берём следующие 4 пикселя. Повторять до конца матрицы, а в случае больших изображений операцию даже можно прогнать дважды."
Название: Re: Анализ текста в окне
Отправлено: Vint от Август 14, 2017, 02:31:59 pm
Да, на том шрифте предлагалось что-то типа такого. Но там шрифт большой.
На среднем и на мелком такой вариант не подойдёт.
Название: Re: Анализ текста в окне
Отправлено: gsukhado от Август 14, 2017, 05:16:29 pm
Судя по картинке на хабре, там размер по высоте около 13 пикселей.
Если я могу сделать цифры такого же размера, то получается попробовать алгоритм можно? Где-то он для кликермана уже был реализован? (я как программист слабоват)
...или ты про алгоритм "по сумме чистого цвета", а не про "двумерную матрицу"?
Название: Re: Анализ текста в окне
Отправлено: Vint от Август 14, 2017, 05:50:13 pm
Я про первый, там 20х30. Твоё изменение поста и не видел тогда.

А вторая... не понял, чем она отличается от нашего обычного сравнения с шаблоном?
"Один из сайтов" это наверно Авито. Жешев - чёртов пособник спамеров  ;D
Название: Re: Анализ текста в окне
Отправлено: gsukhado от Август 14, 2017, 06:17:05 pm
А вторая... не понял, чем она отличается от нашего обычного сравнения с шаблоном?
У меня проблема в том, что цифры между собой сильно разные, не получается отловить просто по шаблону. За счет поворота BlueStacks горизонтально на экране ноутбука, получилось увеличить размер цифр до примерно 6 на 13.
Если я правильно понял описание по ссылке у Жешева - то за счет его алгоритма происходит "усреднение" фактических скринов с экрана, т.е. они как бы приближаются к однотипному шаблону. Или я не правильно понял что Жешев делает?
Название: Re: Анализ текста в окне
Отправлено: Vint от Август 14, 2017, 06:27:08 pm
Усреднение. Ну попробуй.
У Драмстера кажись в одном из вариантов есть сравнение с усреднённым образцом. Почти то же самое, но наоборот.

Просто все вот эти попиксельные действия не очень быстрые. И нужно перекрашивать в буфере.

Выложи хоть новые скрины с новым размером шрифта.
Название: Re: Анализ текста в окне
Отправлено: gsukhado от Август 14, 2017, 06:59:12 pm
Вот еще не обработанные нарезки со скринов, плюс общий скрин экрана
(нарезки, по которым искал - не выкладываю, т.к. возможно не вполне верно и нарезал)

upd: добавил заготовки для цифр поштучно, вне архива
Название: Re: Анализ текста в окне
Отправлено: Vint от Август 14, 2017, 09:56:34 pm
Ничего страшного, это же не самораспаковывающиеся.
Я в любом случае архив распаковываю архиватором по ПКМ без запуска.
Меня последнюю неделю, на рабочую почту, долбят направленными письмами. Всё шифровальщик хотят всучить. Как покопаешься, чего там только нет в загрузчиках и макросы к офису и шелл и баты. Зачем столько. Выше ведь вероятность что один из типов антивирь не пропустит в не зависимости от содержимого.
Название: Re: Анализ текста в окне
Отправлено: gsukhado от Август 14, 2017, 10:24:17 pm
Какой смысл открывать архив от неизвестного человека?  А если у вас на компе вирус и вы об этом не подозреваете?
Зачем архивировать скрины, если эта программа работает с несжатыми форматами изображений?
1.По безопасности:
Не очень понимаю, в чем тут может быть вирус, если нет ни одного запускаемого файла?
2.По удобству:
Набор цифр вроде удобней брать архивом сразу, чем поштучно скачивать.
Но добавил заготовки в то же сообщение и поштучно, если архивом есть риски
3.Объективные ограничения:
Общий скрин экрана в *.bmp = 5 мб, форумом не принимается по размеру, так что только архивом
Название: Re: Анализ текста в окне
Отправлено: dramster от Август 15, 2017, 12:36:29 am
Усреднение. Ну попробуй.
У Драмстера кажись в одном из вариантов есть сравнение с усреднённым образцом. Почти то же самое, но наоборот.

насколько я понял, это ты про это 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)


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

вот накалякал под вышеуказанную заготовку

Код: Clickermann
  1. #name "text_reader"
  2.  
  3.  
  4. ////////////////////////////////////////////////////////////////////////////////
  5. /////////разбивает текст на строки//////////////////////////////////////////////
  6. ////////////////////////////////////////////////////////////////////////////////
  7.  
  8. SUB(lines,$x1_text,$y1_text,$x2_text,$y2_text)
  9.   UNDEFINE ($x1_line_arr)
  10.   UNDEFINE ($y1_line_arr)
  11.   UNDEFINE ($x2_line_arr)
  12.   UNDEFINE ($y2_line_arr)
  13.  
  14.   IF_PIXEL_IN($x1_text,$y1_text, $x1_text,$y2_text, $char_color)
  15.      print("текста не влазит в границы распознавания слева")
  16.      halt
  17.   END_IF
  18.   IF_PIXEL_IN($x2_text,$y1_text, $x2_text,$y2_text, $char_color)
  19.      print("текста не влазит в границы распознавания справа")
  20.      halt
  21.   END_IF
  22.  
  23.   IF(PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)<$x2_text-$x1_text+1)
  24.      print("первоя строка обрезана,неучитывается")
  25.      while(PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)<$x2_text-$x1_text+1)
  26.         inc($y1_text)
  27.      END_CYC
  28.   END_IF
  29.  
  30.   while($y1_text<$y2_text)
  31.  
  32.      while((PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)=$x2_text-$x1_text+1)&($y1_text<$y2_text))
  33.         inc($y1_text)
  34.      END_CYC
  35.  
  36.  
  37.      IF($y1_text<$y2_text)
  38.         arrpush($x1_line_arr, $x1_text)
  39.         arrpush($y1_line_arr, $y1_text)
  40.  
  41.  
  42.         $h_str_temp=0
  43.         while($h_str_temp<$h_str)
  44.  
  45.            while((PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)<$x2_text-$x1_text+1)&($y1_text<$y2_text))
  46.               inc($y1_text)
  47.               inc($h_str_temp)
  48.            END_CYC
  49.  
  50.            IF($h_str_temp<$h_str)
  51.               while((PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)=$x2_text-$x1_text+1)&($y1_text<$y2_text))
  52.                  inc($y1_text)
  53.               END_CYC
  54.               $h_str_temp = 0
  55.  
  56.               $del_arr = arrpop($x1_line_arr)
  57.               $del_arr = arrpop($y1_line_arr)
  58.               arrpush($x1_line_arr, $x1_text)
  59.               arrpush($y1_line_arr, $y1_text)
  60.            END_IF
  61.  
  62.         END_CYC
  63.  
  64.  
  65.      END_IF
  66.  
  67.      IF(PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)=$x2_text-$x1_text+1)
  68.         arrpush($x2_line_arr, $x2_text)
  69.         arrpush($y2_line_arr, $y1_text-1)
  70.      else
  71.         print("последняя строка обрезана,неучитывается")
  72.         $del_arr = arrpop($x1_line_arr)
  73.         $del_arr = arrpop($y1_line_arr)
  74.      END_IF
  75.  
  76.   END_CYC
  77.  
  78.   print("количество строк - ",arrsize($x1_line_arr))
  79.   // координаты в лог и скрины
  80.   //   FOR($a=0,$a<arrsize($x1_line_arr))
  81.   //      print($x1_line_arr[$a]," ",$y1_line_arr[$a]," ",$x2_line_arr[$a]," ",$y2_line_arr[$a])
  82.   //      SCREENSHOTEX($x1_line_arr[$a],$y1_line_arr[$a],$x2_line_arr[$a],$y2_line_arr[$a])
  83.   //   END_CYC
  84.  
  85.   IF(arrsize($x1_line_arr)=0)
  86.      print("текста не найденно")
  87.      halt
  88.   END_IF
  89.  
  90. END_SUB
  91. ////////////////////////////////////////////////////////////////////////////////
  92.  
  93. ////////////////////////////////////////////////////////////////////////////////
  94. /////////размер и количество символов в строке//////////////////////////////////
  95. ////////////////////////////////////////////////////////////////////////////////
  96. SUB(pos_size,$x1_line,$y1_line,$x2_line,$y2_line)
  97.  
  98.   UNDEFINE ($x1_char_arr)
  99.   UNDEFINE ($y1_char_arr)
  100.   UNDEFINE ($x2_char_arr)
  101.   UNDEFINE ($y2_char_arr)
  102.  
  103.  
  104.   FOR($x1_line_temp=$x1_line,$x1_line_temp<$x2_line+1)
  105.      FOR($y1_line_temp=$y1_line,$y1_line_temp<$y2_line+1)
  106.         IF(pxl($x1_line_temp,$y1_line_temp)=$char_color)
  107.            arrpush($x1_char_arr,$x1_line_temp)
  108.            while(PXLCOUNT($x1_line_temp,$y1_line,$x1_line_temp,$y2_line,$back_color)<$y2_line-$y1_line+1)
  109.               inc($x1_line_temp)
  110.            END_CYC
  111.            arrpush($x2_char_arr,$x1_line_temp-1)
  112.         END_IF
  113.      END_CYC
  114.   END_CYC
  115.  
  116.   FOR($i_char=0,$i_char<arrsize($x1_char_arr))
  117.      SCANPXL ($pix_temp,$x1_char_arr[$i_char],$y1_line,$x2_char_arr[$i_char],$y2_line,$char_color)
  118.      arrpush($y1_char_arr,$pix_temp[1])
  119.      arrpush($y2_char_arr,$pix_temp[arrsize($pix_temp)-1])
  120.      UNDEFINE ($pix_temp)
  121.   END_CYC
  122.  
  123.  
  124.   print("количество символов в строке - ",arrsize($x1_char_arr))
  125.  
  126.   //скрины каждого символа
  127.   //   FOR($a=0,$a<arrsize($x1_char_arr))
  128.   //      SCREENSHOTEX($x1_char_arr[$a],$y1_char_arr[$a],$x2_char_arr[$a],$y2_char_arr[$a])
  129.   //   END_CYC
  130.  
  131. END_SUB
  132. ////////////////////////////////////////////////////////////////////////////////
  133.  
  134.  
  135.  
  136. ////////////////////////////////////////////////////////////////////////////////
  137. ////////////////очертание символов//////////////////////////////////////////////
  138. ////////////////////////////////////////////////////////////////////////////////
  139. SUB(shape,$x1_char,$y1_char,$x2_char,$y2_char)
  140.  
  141.   UNDEFINE($left_1)
  142.   UNDEFINE($left_2)
  143.   UNDEFINE($left_3)
  144.   UNDEFINE($left_4)
  145.   UNDEFINE($left_5)
  146.   UNDEFINE($right_1)
  147.   UNDEFINE($right_2)
  148.   UNDEFINE($right_3)
  149.   UNDEFINE($right_4)
  150.   UNDEFINE($right_5)
  151.   UNDEFINE($up_1)
  152.   UNDEFINE($up_2)
  153.   UNDEFINE($up_3)
  154.   UNDEFINE($up_4)
  155.   UNDEFINE($up_5)
  156.   UNDEFINE($down_1)
  157.   UNDEFINE($down_2)
  158.   UNDEFINE($down_3)
  159.   UNDEFINE($down_4)
  160.   UNDEFINE($down_5)
  161.   int(($y2_char-$y1_char+1)/2)
  162.  
  163.   //лево
  164.   FOR($temp=$x1_char,(pxl($temp,$y2_char)!$char_color)&($temp<$x2_char))
  165.      inc($left_1)
  166.   END_CYC
  167.   $left_1 = ROUND($left_1/($x2_char-$x1_char+1)/$accur,-1)*10
  168.   IF($left_1 > 9)
  169.      $left_1 = 9
  170.   END_IF
  171.   FOR($temp=$x1_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp<$x2_char))
  172.      inc($left_2)
  173.   END_CYC
  174.   $left_2 = ROUND($left_2/($x2_char-$x1_char+1)/$accur,-1)*10
  175.   IF($left_2 > 9)
  176.      $left_2 = 9
  177.   END_IF
  178.   FOR($temp=$x1_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/2,0))!$char_color)&($temp<$x2_char))
  179.      inc($left_3)
  180.   END_CYC
  181.   $left_3 = ROUND($left_3/($x2_char-$x1_char+1)/$accur,-1)*10
  182.   IF($left_3 > 9)
  183.      $left_3 = 9
  184.   END_IF
  185.   FOR($temp=$x1_char,(pxl($temp,$y1_char+ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp<$x2_char))
  186.      inc($left_4)
  187.   END_CYC
  188.   $left_4 = ROUND($left_4/($x2_char-$x1_char+1)/$accur,-1)*10
  189.   IF($left_4 > 9)
  190.      $left_4 = 9
  191.   END_IF
  192.   FOR($temp=$x1_char,(pxl($temp,$y1_char)!$char_color)&($temp<$x2_char))
  193.      inc($left_5)
  194.   END_CYC
  195.   $left_5 = ROUND($left_5/($x2_char-$x1_char+1)/$accur,-1)*10
  196.   IF($left_5 > 9)
  197.      $left_5 = 9
  198.   END_IF
  199.  
  200.   //право
  201.   FOR($temp=$x2_char,(pxl($temp,$y2_char)!$char_color)&($temp>$x1_char),-1)
  202.      inc($right_1)
  203.   END_CYC
  204.   $right_1 = $right_1 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
  205.   $right_1 = ROUND($right_1/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
  206.   IF($right_1 > 9)
  207.      $right_1 = 9
  208.   END_IF
  209.   FOR($temp=$x2_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp>$x1_char),-1)
  210.      inc($right_2)
  211.   END_CYC
  212.   $right_2 = $right_2 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
  213.   $right_2 = ROUND($right_2/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
  214.   IF($right_2 > 9)
  215.      $right_2 = 9
  216.   END_IF
  217.   FOR($temp=$x2_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/2,0))!$char_color)&($temp>$x1_char),-1)
  218.      inc($right_3)
  219.   END_CYC
  220.   $right_3 = $right_3 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
  221.   $right_3 = ROUND($right_3/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
  222.   IF($right_3 > 9)
  223.      $right_3 = 9
  224.   END_IF
  225.   FOR($temp=$x2_char,(pxl($temp,$y1_char+ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp>$x1_char),-1)
  226.      inc($right_4)
  227.   END_CYC
  228.   $right_4 = $right_4 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
  229.   $right_4 = ROUND($right_4/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
  230.   IF($right_4 > 9)
  231.      $right_4 = 9
  232.   END_IF
  233.   FOR($temp=$x2_char,(pxl($temp,$y1_char)!$char_color)&($temp>$x1_char),-1)
  234.      inc($right_5)
  235.   END_CYC
  236.   $right_5 = $right_5 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
  237.   $right_5 = ROUND($right_5/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
  238.   IF($right_5 > 9)
  239.      $right_5 = 9
  240.   END_IF
  241.  
  242.   //верх
  243.   FOR($temp=$y1_char,(pxl($x1_char,$temp)!$char_color)&($temp<$y2_char))
  244.      inc($up_1)
  245.   END_CYC