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

Основной раздел => Использование => Topic started by: Doda on January 22, 2016, 12:41:13 AM

Title: Распознавалка симпл капчи
Post by: Doda on January 22, 2016, 12:41:13 AM
Надоела мне монополия, захотелось взбодриться, зашел на сайт,  с прикольной браузеркой и сходу натолкнулся на вот такую вот капчу
(https://psv4.vk.me/c404529/u268539606/docs/21c2c460bd24/Bezymyanny.jpg)

Как же решить? на форуме   знатоки предложили бы через  платный сервис, или воспользоваться уже готовыми решениями)  ну мы тоже не лыком шиты, попробуем изобрести велосипед.  между цифрами везде есть интервал,  если  отделить все цифры через этот интервал,  то получим цифорки, которые будем распознавать в дальнейшем.\
Сохранили штук 5 капч на комп, для экспериментов и погнали
Набросали код,  взяли пример
(https://pp.vk.me/c633423/v633423606/bddb/yYjcAqRSCOA.jpg)
Вот результат
(https://pp.vk.me/c633423/v633423606/bde3/IsOurzarq-c.jpg)
Вроде все отлично, но при наложениях, у нас  бывает режется по 3-4 цифры.  Ща буду исправлять))

Code: (clickermann) [Select]
GETSCREEN
for($i=652, $i<710)
   for($i2=355, $i2<370)
      //      arrpush($chist,$i2)
      arrpush($chist2,pxl($i,$i2))
    //  print(pxl($i,$i2))
           
   end_cyc

   FOR($a2,$a2<arrsize($chist2)) //
      if ($chist2[$a2]=0)
         $nopolosa=1
      //   print( $nopolosa, "полоса")
                 
      end_if
   END_CYC
   
   if ($nopolosa=0)
      arrpush($save,$i)
   end_if
   UNDEFINE($nopolosa)
   UNDEFINE($chist2)
   UNDEFINE($a2)
end_cyc
FOR($a3,$a3<arrsize($save)) //
   print($save[$a3])
   
END_CYC
FOR($a4,$a4<arrsize($save)-1) // п
SCREENSHOTEX($save[$a4],355, $save[$a4+1],370, "Image_", 0)
   
END_CYC
halt
Вот такая ересь выходит.  убрать мусор -проверка  интервала, а убрать наложение, тоже проверка интервала и поиск самого слабого места( минимум черного)
(https://pp.vk.me/c633423/v633423606/bdea/UxvF6nRtjYQ.jpg)
Code: (clickermann) [Select]
if ($save[$a4+1]>$save[$a4]+1) этим условием зачистили весь лишний мусор)

Изменив эту часть
Code: (clickermann) [Select]
FOR($a2,$a2<arrsize($chist2)) //
      if ($chist2[$a2]=0)
         $nopolosa=$nopolosa+1
      //   print( $nopolosa, "ïîëîñà")
                 
      end_if
   END_CYC
   
   if ($nopolosa<2)
      arrpush($save,$i)
   end_if
получаем разрез четко между цифрами, без захвата. сейчас  добавлю тесты
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 22, 2016, 01:02:33 AM
Пластырь, Объясни насчет полной цифры?

ну так, если найдем  интервал между цифрами, то облегчим задачу в тыщу раз. порезали число,  дальше с помощью процессинговых треков на каждую составляющую можно с  95% вероятностью угадывать цифры
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 22, 2016, 01:07:43 AM
Да, у меня  постоянно присутствует пустая картинка. не могу   догнать ,как ее убрать
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 22, 2016, 01:12:40 AM
Да, в самом начале этот колормод был лишним
Вот что выходит в итоге. работает неплохо, но все же режет порой неверно, оставляя по 2 цифры
Может резать не четко по вертикали, а по контуру эту капчу?
(https://pp.vk.me/c633423/v633423606/be14/3ttQbEzAyUo.jpg)
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 22, 2016, 01:45:32 AM
Спасибо за идею, получилось очень неплохо)
(https://pp.vk.me/c633423/v633423606/be27/nAPK5UkG0x8.jpg)
Осталось обучить кликер  теперь  анализировать эти числа
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 22, 2016, 01:51:02 AM
Алгоритм - если у нас скопление  черного в  верхней части и по диагонали, значит это 7.
 скопления черного по вертикали - единичка
 и т.д.. берем точку самую верхнюю левую, дальше ведем ее, по контуру. анализируя контур уже смотрим, какая цифра. чтобы не применять клише, и не сравнивать картинки
Title: Re: Распознавалка симпл капчи
Post by: dramster on January 22, 2016, 03:00:21 AM
поделись ссылкой с этой капчей. есть кое какая идейка. давно задумывался о чемто подобном, универсальном распознавании цифр, без всяких там настроек и тп. может что и выйдет, хотя вероятность этого ничтожно мала.
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 22, 2016, 03:03:29 AM
http://wekings.ru/login (http://wekings.ru/login)  вот здесь она вылезает)  хочу написать брутфорсер аккаунтов))
Насчет универсальности - лучше всего через нейронные сети. читал  год назад, что в америке изобрели прогу, которая распознает 93% капч.  ну, в открытый доступ ее ясен пень никто не скидывал)
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 22, 2016, 09:11:03 AM
9 - точками выглядит вот так.  так же остальные 9 чисел. Осталось формулу  приписать,  используя закономерности. вот думаю попробовать поделить цифру на 4- 8 секторов(право, влево, низ ,вверх) и анализировать подсекторы
Code: (clickermann) [Select]
12:03:05 700358
12:03:05 700359
12:03:05 700360
12:03:05 700361
12:03:05 701357
12:03:05 701358
12:03:05 701359
12:03:05 701360
12:03:05 701361
12:03:05 701362
12:03:05 702356
12:03:05 702357
12:03:05 702362
12:03:05 702366
12:03:05 703356
12:03:05 703362
12:03:05 703363
12:03:05 703366
12:03:05 703367
12:03:05 704356
12:03:05 704363
12:03:05 704367
12:03:05 705356
12:03:05 705362
12:03:05 705363
12:03:05 705367
12:03:05 705368
12:03:05 706356
12:03:05 706357
12:03:05 706361
12:03:05 706362
12:03:05 706367
12:03:05 707357
12:03:05 707358
12:03:05 707359
12:03:05 707360
12:03:05 707361
12:03:05 707362
12:03:05 707363
12:03:05 707364
12:03:05 707365
12:03:05 707366
12:03:05 707367
12:03:05 708359
12:03:06 708360
12:03:06 708361
12:03:06 708362
12:03:06 708363
12:03:06 708364
12:03:06 708365
12:03:06 708366
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 22, 2016, 03:08:29 PM
вот что получается при уменьшении процента  :-\
[spoiler](https://pp.vk.me/c633424/v633424606/b15b/192cWEcMrPQ.jpg) Или я дурак.. или...[/spoiler]
Сейчас  провожу тесты,  через среднее количество точек и отношение к высоте-ширине. попробую через  этот параметр
[spoiler](https://pp.vk.me/c633424/v633424606/b163/-3fx9N_kcuY.jpg)[/spoiler]
Title: Re: Распознавалка симпл капчи
Post by: Oraven on January 22, 2016, 03:31:39 PM
Вот попробуй такое
Программка Cap 1.8.0.0
Cap.7z (https://dl.dropboxusercontent.com/u/74475554/Cap.7z)
Создана для распознавания несложной капчи
Входит в состав USDownloadera

В сборке пример.
Распознается картинка "ScreenShot00742.png" Батник "FineOCR_CM.bat" запускает распознавание. Все настройки распознавания хранятся в "capCM.ini" благо там есть комментарии. В папке "CapLettersCM" шаблоны цифр. Распознавание происходит в файл, но можно и в буфер обмена.

Инструкцию уже не найти походу
Вот нашел только пару ссылок
http://govnoproger.ru/soft/cap-exe-na-primere-kapchi-yandeksa.html (http://govnoproger.ru/soft/cap-exe-na-primere-kapchi-yandeksa.html)
http://autoit-script.ru/index.php?topic=9993.0 (http://autoit-script.ru/index.php?topic=9993.0)

А это оригинальная сборка, там больше примеров
Cap_USDownloader.7z (https://dl.dropboxusercontent.com/u/74475554/Cap_USDownloader.7z)
Title: Re: Распознавалка симпл капчи
Post by: Vint on January 22, 2016, 03:34:54 PM
Среднее количество точек не отличит 6 от 9.

Тоже давно задумывался взяться за универсальную распознавалку.
Тоже на ум приходило и прослеживание контура (по идее самое правильное, но пока непонятно как реализовать) и деление на сектора с подсчётами количества (при искажениях думаю даст самый плохой результат).
Приходилось и резать изображение на цифры/объекты анализируя вертикальную колонку в 1 пикс.
И нейронные сети вспоминал. Ну как вспоминал... вспоминал что они есть  ;D я то в них ничего не шарю. Но там нужно обучать на большой выборке. Кто это будет делать для нового шрифта или типа капчи... тупик. Результат, опять же не фонтан и зависит от времени обучения.

Сейчас вот почитал и утвердилась уверенность, что нужно делать несколько способов и использовать их от типа капчи. Часть описанных проверок видно же сразу что даст плохой результат при определённом шрифте. Совсем универсального способа не будет.

Деление на 6-8 зон думаю нужно. А вот что покажет это вместе с искажениями в виде плавления и вижу что цифру 4 из 0049 от 0058 из поста http://crapware.aidf.org/forum/index.php?topic=2336.msg14436#msg14436 фиг различит. У одной всё это смещено в правые сегменты, а в другой в средние.
Title: Re: Распознавалка симпл капчи
Post by: Vint on January 22, 2016, 03:48:22 PM
Вот попробуй такое
Программка Cap 1.8.0.0
Cap.7z (https://dl.dropboxusercontent.com/u/74475554/Cap.7z)
Создана для распознавания несложной капчи
Входит в состав USDownloadera

Там тоже подготовка шаблонов
;Имя каталога с литерами (Можно использовать литеры от Антикапчи)
CatalogLetters=CapLettersCM

Это лишь чуть продвинутый аналог нашей распознавалки на кликермэне.
Туда тоже некоторые из настроек можно прикрутить.
Но прикольная.

Понравилось:
;Максимальная ширина букв (чтобы ножик не останавливался раньше времени)
LetterWidth=10
;Минимальная ширина букв, чтобы мусор не выводить
LetterWidthMin=5
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 22, 2016, 03:51:52 PM
Я попробую написать определение контура,  скину пример для  какой-либо цифры. Мне пару лет назад чувак говорил про эти контуры. Например
Code: (clickermann) [Select]
  for($i2=355, $i2<370)             //по игреку
         for($i=$save[$a4], $i<$save[$a4+1]+1)  //по иксу
здесь сначала гоним икс, слева направо, потом ниже, и опять гоним икс. как только находим черную точку  после 13 проверки (нашу цифру),  фиксируем, затем смотрим во все стороны. кроме левой и верхней(которые мы прошли). На примере девятки видно,  если есть свободные пиксели() точки 27,38 и ниже), в ограниченном объеме в плоскостях х и у, значит  круг. а круг это  6, 9, 0, 8. уже что -то!))
(https://pp.vk.me/c633424/v633424606/b182/cNCzZXyl0AY.jpg)
Title: Re: Распознавалка симпл капчи
Post by: dramster on January 22, 2016, 03:52:37 PM
а у меня вот какая идея, пока не брался за нее, не уверен получится ли. попробую описать.

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

что думаете по этой идее?
Title: Re: Распознавалка симпл капчи
Post by: Vint on January 22, 2016, 03:53:06 PM
...
А это оригинальная сборка, там больше примеров
Cap_USDownloader.7z (https://dl.dropboxusercontent.com/u/74475554/Cap_USDownloader.7z)

О, а там образцы в папке CapLettersGP очень похожи на пример из данной темы.
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 22, 2016, 04:03:12 PM
...
А это оригинальная сборка, там больше примеров
Cap_USDownloader.7z (https://dl.dropboxusercontent.com/u/74475554/Cap_USDownloader.7z)

О, а там образцы в папке CapLettersGP очень похожи на пример из данной темы.
Действительно. но там все шаблонами)  а мне охота реализовать через контуры)  думаю будет быстрее  работать
Title: Re: Распознавалка симпл капчи
Post by: Vint on January 22, 2016, 04:03:52 PM
что думаете по этой идее?

Думаю на цифрах с наклоном или поплывшими волнами работать не  будет. Для прямых может быть.

Думаю сразу думать "о всех людях на земле" не нужно. Выбрать для начала определённые ограничения в рамках которых распознавание будет с хорошим результатом.

Потому что... картинки искажаются по разному. гдето контур остаётся непрерывным, а где то будут цифры в виде непропечатанного штампа. Или вот изображу пример... даже прямой и ровный  ;D см. скрины.
И как здесь определять замкнутые контуры или круги как в примере "Браm комара"?
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 22, 2016, 04:07:34 PM
Пунктирная капча тоже решается) главное - хороший алгоритм) там интервал между  точками вроде везде  одинаков, а это дает нам фору. по-моему такая капча даже проще
Title: Re: Распознавалка симпл капчи
Post by: Vint on January 22, 2016, 04:19:03 PM
Пунктирная капча тоже решается) главное - хороший алгоритм) там интервал между  точками вроде везде  одинаков, а это дает нам фору. по-моему такая капча даже проще
Не факт что будет равномерным. Пример штампа.
Я не говорю что решать не надо, говорю что нужно сделать под определённые виды с которыми сможем бороться. Позже можно добавлять другие решения или изменять существующие.
Title: Re: Распознавалка симпл капчи
Post by: Vint on January 22, 2016, 04:20:13 PM
идеяя с контурами перспективная, но я вижу её несколько иначе. Нужно попиксельно разбить изображение цифры на квадраты и проверять соединение этих пикселей между собой.  Грубо говоря учитываться будут повороты неприрывной линии. каждой цифре соответствует примерная длинна такой линии и соотношение поворотов. Алгоритм определения будет не самый простой, но довольно надёжный и универсальный, так как такой способ использует глаз человека, определяя какой знакомый символ перед ним.

Я тоже так думал. А разве имели ввиду другой способ определения контура?
Title: Re: Распознавалка симпл капчи
Post by: Vint on January 22, 2016, 04:24:29 PM
Вот из проги тоже очень важная мысль про очерёдность проверки
Quote
;Приоритет символов для опознавания, слева - самые значащие. Т.к. многие символы, например I являются составными частями других
PriorityString=0128345679
;разница процентного отношения между символом, могущим быть частью другого
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 22, 2016, 04:39:24 PM
капчи вк даже самому порой трудно разобрать))\
(https://vk.com/captcha.php?sid=756187905262&s=1&v=1277950)
Title: Re: Распознавалка симпл капчи
Post by: Vint on January 22, 2016, 04:40:07 PM
логично сначала проверять на 8, а только потом на 3 и сначала на  7 и 4, а потом на 1 но это при отладке утрясётся, главное  основной принцип распознования, к которому различными методами  видоизменения можно будет сводить разгадываемые картинки.
Да. Тоже заметил на единице. Наверно очерёдность для сравнения с шаблонами такая лучше. А для контуров лучше другая. Но нужна.

по соотношению: ПОПУЛЯРНОСТЬ, СЛОЖНОСТЬ, ДОХОДНОСТЬ имеет смысл ломать капчу ВК. Практически сразу получаем армию постоянных  заказчиков.
И её сразу поменяют на китайскую, про которую я читал в декабре в теме http://habrahabr.ru/post/272857/
Title: Re: Распознавалка симпл капчи
Post by: Vint on January 22, 2016, 04:42:15 PM
капчи вк даже самому порой трудно разобрать))\
(https://vk.com/captcha.php?sid=756187905262&s=1&v=1277950)
Как раз самому нормально разобрать. Ошибки крайне редки.
А вот  reCAPTCHA это АД. Я наверно, в половине случаев неправильно распознаю.
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 23, 2016, 12:19:18 AM
Очень интересная статья https://intsystem.org/captcha/kcaptcha-recognition/ (https://intsystem.org/captcha/kcaptcha-recognition/), когда реализуем алгоритм распознавания -можно выложить нечто подобное, на нашем форуме.
А по теме - нарежу   шаблонов, попробую сравнивать с больши количеством шаблоном.   реализация контура - для меня пока сложная задача
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 23, 2016, 12:40:33 AM
я думал про его лабиринт. не дорос пока.   на днях по пробую разобрать его код, и приспособить)
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 23, 2016, 12:48:11 AM
А ведь я еще  в конце октября не понимал что означает эта запись for($i=0, $i<5). Здешний форум и упорство   помогли осилить) хотя я уже два раза удалял весь кликер и все наработки..) когда заходил в тупик))
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 23, 2016, 03:32:10 AM
Через шаблоны - работает неплохо. но у меня глюк, причину не могу понять.
 находит, но порой бывает  (самое интересное, обрезает все ровно, все цифры   отделяет друг от дружки, а при сравнении-  берет следующую цифру для распознавания). пример на скрине. 0233  - нашел 0, затем  3  не стал искать, нашел вместо нее 2 раза   восьмерку, которая идет позже. самое интересное, что  интервал по иксу - правильный, но   вместо 3, ищет восьмерку.такой косяк  вылезает постоянно. пропуская цифру, и ищет следующую за ней. кстати, сделал 500 шаблонов, ищет на ура. понижая  % совпадения максимум до 95
Code: (clickermann) [Select]
GETSCREEN(610,326, 700, 350)
COLORMODE(8)



for($i=610, $i<702)
   for($i2=326, $i2<350)
      //      arrpush($chist,$i2)
      arrpush($chist2,pxl($i,$i2))
      //  print(pxl($i,$i2))
     
   end_cyc
   
   FOR($a2=0,$a2<arrsize($chist2)) //
      if ($chist2[$a2]=0)
         $nopolosa=$nopolosa+1
         //   print( $nopolosa, "iieina")
         
      end_if
   END_CYC
   
   if ($nopolosa<2)
      arrpush($save,$i)
   end_if
   UNDEFINE($nopolosa)
   UNDEFINE($chist2)
   UNDEFINE($a2)
end_cyc
FOR($a3,$a3<arrsize($save)) //
   print($save[$a3])
   
END_CYC
FOR($a4=0,$a4<arrsize($save)-1) // i
   if ($save[$a4+1]>$save[$a4]+1)
      if ($save[$a4+1]-$save[$a4]>15)
         $e=round(($save[$a4+1]-$save[$a4])/2)
         print("режем")
         WAIT(2)
         
         SCREENSHOTEX($save[$a4],326, $save[$a4]+$e,350, "Image_", 0)
         SCREENSHOTEX($save[$a4]+$e,326, $save[$a4+1],350, "Image_", 0)
      else
         SCREENSHOTEX($save[$a4],326, $save[$a4+1],350, "Image_", 0)
         
         $proc = 100
         if ($t1=0)
            TFReadArr("filelist.txt", $arr )
            $t1=1
         end_if
         While($chek=0)
            for ($lk=0, $lk<arrsize($arr))
               $l= $arr[$lk]
               IF_PICTURE_IN ($save[$a4],326, $save[$a4+1],350, $l, -1, $proc)
print($save[$a4]," у ",326, $save[$a4+1]," кк ",350)
    $kartinka=1
                  $cart=$l
                  $chek=1
                  $lk=2000
                  print($cart," ,йес")
                  WAITms(800)
                  arrpush($carts,$cart)
               else
                  print("не нашел",  $proc)
               end_if
               
            end_cyc
            print("выход с цикла   картинпоиска")
            $lk=0
            if ($kartinka=0)
               inc($proc,-1)
            end_if
         end_cyc
         print("чек больше одного -выход")
         WAIT(1)
         
         $chek=0
         $kartinka=0
         $cart=0
         
         
         
      end_if
   end_if
   
END_CYC
FOR($a99=0,$a99<arrsize($carts)
   print($carts[$a99])
end_cyc
halt



Title: Re: Распознавалка симпл капчи
Post by: Doda on January 23, 2016, 03:48:20 AM
для тройки нужно уменьшить процент совпадения, а для восьмёрки увеличить.
не думаю.  процент - 95-98 везде. на таком не будет путать 3, 8. говорю же, берет следующий элемент. вот как здесь.  проскочил 5,   подумав что это 0, проскочил 4, взяв ее  как 9.  я не думаю что 5 похоже на 0.  говорю же, пропускает число, беря вместо него следующее. хотя диапазон сканирования стоит   нормальный. и режет четко
Title: Re: Распознавалка симпл капчи
Post by: dramster on January 24, 2016, 11:45:14 AM
попробовал я всетаки реализовать свой вариант http://crapware.aidf.org/forum/index.php?topic=2336.msg14454#msg14454
вроде всё ничего, но упор вот в чем, как лучше всего определить, с каким шаблоном больше всего совпадает найденая картинка? чтото никак не могу сообразить. остановился на таком варианте (сам непонимаю что именно он определяет, но результат лучший из всех что и перебирал) - ((($num_n*100)/($num_cap_temp-$num_n))*100)/(($num_cap_n*100)/$num_cap_temp)
$num_n - пиксели которые совпали с шаблоном
$num_cap_n - количество пикселей найденных на капче
$num_cap_temp - количество пикселей которые записаны в шаблоне.
наглядно
(http://i.imgur.com/Om5XSj7.png)
черные пиксели - шаблон
красные пиксели - искомая картинка

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

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

"Следующие ошибки возникли при попытке отправки сообщения:
Сообщение превышает максимально допустимую длину (20000 знаков)."
такчто скрипт во вложении  :D , уж очень он огромный.

во вложении шаблоны вот такого вида
(http://i.imgur.com/DGJ1nUA.png)

ну и пару тестов покажу, три определения подряд
(http://i.imgur.com/x1ozMrs.png)
11:26:39 найдено цифр в поле 6
11:26:39 589 597 start y - 320
11:26:39 599 607 start y - 320
11:26:39 608 614 start y - 319
11:26:39 615 621 start y - 319
11:26:39 624 628 start y - 319
11:26:39 631 639 start y - 319
11:26:46 цифра 1 это 7
11:26:53 цифра 2 это 0
11:27:00 цифра 3 это 2
11:27:07 цифра 4 это 6
11:27:13 цифра 5 это 1
11:27:20 цифра 6 это 4
11:27:20 702614
11:27:41 найдено цифр в поле 6
11:27:41 588 596 start y - 320
11:27:41 598 605 start y - 320
11:27:41 609 611 start y - 320
11:27:41 614 620 start y - 319
11:27:41 621 629 start y - 319
11:27:41 632 640 start y - 319
11:27:48 цифра 1 это 0
11:27:55 цифра 2 это 4
11:28:02 цифра 3 это 1
11:28:09 цифра 4 это 3
11:28:15 цифра 5 это 0
11:28:22 цифра 6 это 8
11:28:22 041308
11:28:36 найдено цифр в поле 6
11:28:36 586 594 start y - 319
11:28:36 597 605 start y - 319
11:28:36 609 611 start y - 320
11:28:36 614 620 start y - 319
11:28:36 622 631 start y - 319
11:28:36 632 642 start y - 319
11:28:43 цифра 1 это 4
11:28:50 цифра 2 это 6
11:28:57 цифра 3 это 1
11:29:04 цифра 4 это 7
11:29:11 цифра 5 это 3
11:29:18 цифра 6 это 6
11:29:18 461736

как видите, в первом случяе 1 ошибка, во втором две, в третьем без ошибок.

изредка, примерно 1 из 20, находит 5 цифр вместо шести, можно будет доработать, но пока это не мешает.
Title: Re: Распознавалка симпл капчи
Post by: dramster on January 24, 2016, 12:27:36 PM
никакого, это просто текстовый файл, без расширения. там записан массив - построчно двоечки и единички.
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 24, 2016, 01:11:51 PM
разбираю код твой) ты нестандартно мыслишь, парень!  вот,    переделал слегка,  теперь код на  начало-конец капчи (по ширине)на 6 строк меньше
Твой вариант
Code: (clickermann) [Select]
FOR($x=$x1_fr,$x<$x2_fr)   //по ширине
      FOR($y=$y1_cap,$y<$y2_cap+1)  //наши новые коорды по высоте цифр УУ
         
         IF(pxl($x,$y) = 0) //нашли пиксель
            $x1_cap= $x  //запомнили первый по иксу
            $y=$y2_cap+1  //ломаем цикл
            $x=$x2_fr
         END_IF
      END_CYC
   END_CYC
   FOR($x=$x2_fr,$x>$x1_fr,-1)  // от конца,  влево
      FOR($y=$y1_cap,$y<$y2_cap+1)
         IF(pxl($x,$y) = 0) //черный нашли
            $x2_cap= $x     //запоминаем  конец по ширине х
            $y=$y2_cap+1  //ломаем
            $x=$x1_fr
         END_IF
      END_CYC
   END_CYC

Мой вариант
Code: (clickermann) [Select]
FOR($x=$cap_arr[0],$x<arrsize($cap_arr)-1,2)
      if($memoryx=0) //берем  макс, мин как первое знач, сравниваем, ищем наименьшее-большее
         $x1_cap=$x
         $x2_cap=$x
         $memoryx=1
      end_if
      if ($x>$x2_cap) // все просто
         $x2_cap=$x
      end_if
      if ($x<$x1_cap)
         $x1_cap=$x
      end_if
  END_CYC
         $memoryx=0
Быстрее оперировать с массивом, нежели  к буферу обращатся. И  аррпоп игрека - нужно разместить после  проверки икса.

насчет 5 цифр. порой   проходит вот такая штука(одна цифра наезжает на другую)
(https://pp.vk.me/c633424/v633424606/bb67/N5mYz-OEw50.jpg)
Title: Re: Распознавалка симпл капчи
Post by: dramster on January 24, 2016, 08:19:44 PM
Мой вариант
Code: (clickermann) [Select]
FOR($x=$cap_arr[0],$x<arrsize($cap_arr)-1,2)
      if($memoryx=0) //берем  макс, мин как первое знач, сравниваем, ищем наименьшее-большее
         $x1_cap=$x
         $x2_cap=$x
         $memoryx=1
      end_if
      if ($x>$x2_cap) // все просто
         $x2_cap=$x
      end_if
      if ($x<$x1_cap)
         $x1_cap=$x
      end_if
  END_CYC
         $memoryx=0
Быстрее оперировать с массивом, нежели  к буферу обращатся. И  аррпоп игрека - нужно разместить после  проверки икса.
не правильный вариант. вернее вариант правильный, но реализован не правильно
FOR($x=$cap_arr[0],$x<arrsize($cap_arr)-1,2) -  $cap_arr[0] это координата с черным пикселем, arrsize($cap_arr) это количество элементов в массиве. не те значения сравниваются. ну и остальное туда же $x2_cap=$x

правильно:
Code: (clickermann) [Select]
$x1_cap=$cap_arr[0]
FOR($a=0,$a<arrsize($cap_arr),2)
      if ($cap_arr[$a]>$x2_cap)
         $x2_cap=$cap_arr[$a]
      end_if
      if ($cap_arr[$a]<$x1_cap)
         $x1_cap=$cap_arr[$a]
      end_if
END_CYC

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

Code: (clickermann) [Select]
$x1_fr=574      // координаты поля с капчей (целиком, то что белое)
$y1_fr=311
$x2_fr=655
$y2_fr=334




GETSCREEN($x1_fr,$y1_fr,$x2_fr,$y2_fr)
COLORMODE(8,$x1_fr,$y1_fr,$x2_fr,$y2_fr)
wait(1)

$t = $_ms
scanpxl($cap_arr,$x1_fr,$y1_fr,$x2_fr,$y2_fr, 0)
$y1_cap=$cap_arr[1]
$y2_cap=ARRPOP($cap_arr)
FOR($x=$x1_fr,$x<$x2_fr)
   FOR($y=$y1_cap,$y<$y2_cap+1)     
      IF(pxl($x,$y) = 0)
         $x1_cap= $x
         $y=$y2_cap+1
         $x=$x2_fr
      END_IF
   END_CYC
END_CYC
FOR($x=$x2_fr,$x>$x1_fr,-1)
   FOR($y=$y1_cap,$y<$y2_cap+1)
      IF(pxl($x,$y) = 0)
         $x2_cap= $x
         $y=$y2_cap+1
         $x=$x1_fr
      END_IF
   END_CYC
END_CYC
print("первый тест за ", $_ms-$t,"мс.")
print($x1_cap," ",$y1_cap," ",$x2_cap," ",$y2_cap)


//=======================================
$x1_cap=0
$y1_cap=0
$x2_cap=0
$y2_cap=0
UNDEFINE($cap_arr)
//=======================================
wait(1)

$t = $_ms
scanpxl($cap_arr,$x1_fr,$y1_fr,$x2_fr,$y2_fr, 0)
$x1_cap=$cap_arr[0]
FOR($a=0,$a<arrsize($cap_arr),2)
      if ($cap_arr[$a]>$x2_cap)
         $x2_cap=$cap_arr[$a]
      end_if
      if ($cap_arr[$a]<$x1_cap)
         $x1_cap=$cap_arr[$a]
      end_if
END_CYC
$y1_cap=$cap_arr[1]
$y2_cap=ARRPOP($cap_arr)
print("второй тест за ", $_ms-$t,"мс.")
print($x1_cap," ",$y1_cap," ",$x2_cap," ",$y2_cap)


halt
Code: [Select]
20:00:01 первый тест за 325мс.
20:00:01 586 319 641 332
20:00:03 второй тест за 273мс.
20:00:03 586 319 641 332

а вообще да, есть над чем работать, лижбы это стоило того, скрипт сырой, раздутый, медленный.

вопрос то вот в чем:

Quote
как лучше всего определить, с каким шаблоном больше всего совпадает найденая картинка? чтото никак не могу сообразить. остановился на таком варианте (сам непонимаю что именно он определяет, но результат лучший из всех что и перебирал) - ((($num_n*100)/($num_cap_temp-$num_n))*100)/(($num_cap_n*100)/$num_cap_temp)
$num_n - пиксели которые совпали с шаблоном
$num_cap_n - количество пикселей найденных на капче
$num_cap_temp - количество пикселей которые записаны в шаблоне.
наглядно
(http://i.imgur.com/Om5XSj7.png)
черные пиксели - шаблон
красные пиксели - искомая картинка

вот как правильнее определить, что это шестерка а не восьмерка?
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 24, 2016, 08:26:53 PM
Точно, не то сравниваю! и прирост не такой уж значительный.
Я пробую искать без шаблонов. доделаю, скину. например без шаблонов легко будут искаться 0, 8. то есть:
количество прямых линий, их соотношение к границам картинки,   пропуски  между линиями по горизонтали. ну и диагонали прикрутить. пример.  7 - прямая линия сверху, 2 - снизу. 0 - по краям, симметричная  дыра в центре. от 8 отличается тремя полосами по горизонтали
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 24, 2016, 08:56:39 PM
Вот например.
два нуля

Code: (clickermann) [Select]
23:51:51 разрыв по длине, на высоте 336 длина -4
23:51:51 2
23:51:51 2
23:51:51 разрыв по длине, на высоте 337 длина -4
23:51:51 2
23:51:51 2
23:51:51 разрыв по длине, на высоте 338 длина -5
23:51:51 2
23:51:51 2
23:51:51 разрыв по длине, на высоте 339 длина -5
23:51:52 2
23:51:52 2
23:51:52 разрыв по длине, на высоте 340 длина -5
23:51:52 2
23:51:52 2
23:51:52 разрыв по длине, на высоте 341 длина -5
23:51:52 2
23:51:52 2
23:51:52 разрыв по длине, на высоте 342 длина -5
23:51:52 2
23:51:52 2
23:51:52 разрыв по длине, на высоте 343 длина -5
23:51:52 2
23:51:52 2
23:51:52 разрыв по длине, на высоте 344 длина -4
23:51:52 2
23:51:52 2
23:51:52 разрыв по длине, на высоте 345 длина -4
23:51:52 2
23:51:52 2
23:51:52 2
23:51:52 665 674 start y - 334
23:51:52 2
23:51:52 2
23:51:52 2
23:51:52 разрыв по длине, на высоте 336 длина -5
23:51:52 2
23:51:52 2
23:51:52 разрыв по длине, на высоте 337 длина -6
23:51:52 2
23:51:52 2
23:51:52 разрыв по длине, на высоте 338 длина -6
23:51:52 2
23:51:52 2
23:51:52 разрыв по длине, на высоте 339 длина -6
23:51:52 2
23:51:52 2
23:51:52 разрыв по длине, на высоте 340 длина -7
23:51:52 2
23:51:52 2
23:51:52 разрыв по длине, на высоте 341 длина -6
23:51:52 2
23:51:52 2
23:51:52 разрыв по длине, на высоте 342 длина -6
23:51:52 2
23:51:52 2
23:51:52 разрыв по длине, на высоте 343 длина -5
23:51:52 2
23:51:52 2
23:51:52 разрыв по длине, на высоте 344 длина -5
23:51:52 2
23:51:52 2
23:51:52 разрыв по длине, на высоте 345 длина -4
23:51:52 2

как видно, разрыв между боковыми стенками у нас  с 336 по 345 по высоте, примерно сплошной, без разрывов. значит это ноль. я думаю так распознавать, без шаблонов. шаблоном будет - количество соединений, линий, кругов.  описанное в коде
Title: Re: Распознавалка симпл капчи
Post by: Doda on January 24, 2016, 09:45:52 PM
начало кода драмстера - на определение границ, дальше оперируя с границами    по прямым линиям, кругам - пробую настроить.  например,  линия больше 75 процентов по нижней полосе, отстутствие замкнутых разрывов(ноль, восемь. начинается слева, потом разрыв, ведущей до правой образующей цифры). отсутствие горизонтальных прямых. Способ не универсален, при сильных искривлениях капчи он загнется
(https://pp.vk.me/c633424/v633424606/bc75/z1vrwztNPoc.jpg)
Title: Re: Распознавалка симпл капчи
Post by: Золотой on January 27, 2016, 11:45:11 AM
как на картинке обойти букву по контуру? начиная с одной точки, обойти п округу, и вернуться к исходной, с сохранением всех координат?
 для начала нужно сохранить все нужные координаты. Нужные координаты для нас те которые относятся к контуру.
искать будем на обработанной чёрно-белой картинке цифры.
1. создаем массив всех чёрных пикселей.
2. последовательно проверяем все пиксели массива, на соседство с белыми пикселями.если такого соседства нет, то пиксель нам неинтересен, он внутренний. Если есть, то важно задать какой белый пиксель является зачётным;
2.а. Если учитывать только те четыре, что соседствуют по горизонтали и вертикали,
то  получаем небольшой массив координат пикселей внешнего и внутренних контуров ( если такой есть у данной буквы)
его можно обойти соединяя пиксели контура вертикально, горизонтально и диагонально.
2.б.  Если учитывать, как соседние ещё и 4 пикселя по диагонали,
то полученный массив контуров буквы будет вдвое больше  и обходить его нужно будет поворотами на 90 градусов, по непрерывной ломанной от пикселя к пикселю.
что удобнее в рамках определения капчи зависит от выбранных способов дальнейшей обработки.
3. Чтоб на практике попиксельно обойти полученные контуры, массив нужно сортировать уже на предмет соседства двух чёрных пикселей из массива контуров,  с соседством + - 1 пиксель. примеры сортировки массивов на форуме есть.

Title: Re: Распознавалка симпл капчи
Post by: dramster on February 02, 2016, 06:30:10 PM
вчера  пришла мне кое какая идея по распознания данной капчи ... и всяческих других чисел. получилось очень даже ничего, не менее 9 из 10 распознаний проходит успешно, тем более, что распознавание со временем улучшается при обучении не распознанных цифр. загвоздка иногда бывает в определении количества цифр в капче, но я пока об этом не задумывался.
вышло не так уж и сложно, а результат очень даже ничего. я даже видео записал https://www.youtube.com/watch?v=mpQ-nnGXUFg
иногда путает 8 и 0 .... ну еще с 9 тоже, но редко.

суть рапознавания - определения примерных очертаний цифры слева и справа.
допустим, у нас нарисована цифра 4
(http://i.imgur.com/zEMAOn3.png)
делим ее на 4 части по высоте. определяем координату Х точки а1 и а2, находим разницу в смещении, сравниваем эту разницу с полной шириной цифры, и в зависимости в какую сторону смещается точка и на сколько, по отношению к общей ширине, получаем число - -2, -1, 0, 1, 2. если с минусом, значит линия цифры уходит влево, если положительное, то в право. если 0, то точки находятся в одной линии вертикали, смещения нет. если 2 - значит точка сместилась на расстояние в половину ширины искомой цифры и более. 1 - смещение не значительное, менее половины ширины.
так определяем поочереди от а1 к а2, от б1 к б2, от а2 к а3, б2 - б3 и тд. в результате имеем набор из восьми чисел. пишем этот набор в виде строки в файл при обучении (окно ввода, вылезет если цифра не распознана). при распознавании - идет сравнение со строками каждого файла, 10 файлов с ранее записанными комбинациями рельефа цифр.

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

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

скрипт, для общего обозрения (не будет работать без файлов очертаний цифр (во вложении), либо пока не обучится) :
Code: (clickermann) [Select]
#name "ReCapcha"

SUB(pos_size)
   UNDEFINE($num_line_start)
   UNDEFINE($num_line_end)
   UNDEFINE($num_real)
   UNDEFINE($num_y1)
   
   GETSCREEN($x1_fr,$y1_fr,$x2_fr,$y2_fr)
   COLORMODE(8,$x1_fr,$y1_fr,$x2_fr,$y2_fr)
   
   
   scanpxl($cap_arr,$x1_fr,$y1_fr,$x2_fr,$y2_fr, 0)
   IF(ARRSIZE ($cap_arr) = 0)
      print("капчи в этом поле нету")
      halt
   END_IF
   $y1_cap=$cap_arr[1]
   $y2_cap=ARRPOP($cap_arr)
   
   
   FOR($x=$x1_fr,$x<$x2_fr)
      FOR($y=$y1_cap,$y<$y2_cap+1)
         
         IF(pxl($x,$y) = 0)
            $x1_cap= $x
            $y=$y2_cap+1
            $x=$x2_fr
         END_IF
      END_CYC
   END_CYC
   
   FOR($x=$x2_fr,$x>$x1_fr,-1)
      FOR($y=$y1_cap,$y<$y2_cap+1)
         IF(pxl($x,$y) = 0)
            $x2_cap= $x
            $y=$y2_cap+1
            $x=$x1_fr
         END_IF
      END_CYC
   END_CYC
   
   //print($x1_cap," ",$y1_cap," ",$x2_cap," ",$y2_cap)
   //=======================================
   
   ARRPUSH ($num_line_start, $x1_cap)
   FOR($x=$x1_cap,$x<$x2_cap)
      FOR($y=$y1_cap,$y<$y2_cap+1)
         IF(pxl($x,$y)  = 0)
            IF((pxl($x+1,$y)  = 0)|(pxl($x+1,$y-1) = 0)|(pxl($x+1,$y+1) = 0))
               $y=999999
            END_IF
         END_IF
         
      END_CYC
      IF($y=$y2_cap+1)
         ARRPUSH ($num_line_end, $x)
         FOR($x_check=$x+1,$x_check<$x2_cap)
            FOR($y_check=$y1_cap,$y_check<$y2_cap+1)
               IF(pxl($x_check,$y_check)  = 0)
                  $x= $x_check
                  ARRPUSH ($num_line_start, $x)
                  $y_check=$y2_cap+1
                  $x_check=$x2_cap
               END_IF
            END_CYC
         END_CYC
      END_IF
   END_CYC
   ARRPUSH ($num_line_end, $x2_cap)
   
   //===================================
   
   FOR($num=0,$num<arrsize($num_line_start))
      FOR($y=$y1_cap,$y<$y2_cap)
         FOR($x=$num_line_start[$num],$x<$num_line_end[$num]+1)
            IF(pxl($x,$y)  = 0)
               ARRPUSH($num_y1,$y)
               $y=99999
               $x=$num_line_end[$num]+1
            END_IF
         END_CYC
      END_CYC
   END_CYC
   
   FOR($num=0,$num<arrsize($num_line_start))
      FOR($y=int($y2_cap),$y>$y1_cap,-1)
         FOR($x=$num_line_start[$num],$x<$num_line_end[$num]+1)
            IF(pxl($x,$y)  = 0)
               ARRPUSH($num_y2,$y)
               $y=$y1_cap
               $x=$num_line_end[$num]+1
            END_IF
         END_CYC
      END_CYC
   END_CYC
   print("=====================")
   print("найдено цифр в поле - ",arrsize($num_line_start))
   
   
   //   FOR($a=0,$a<arrsize($num_line_start))
   //      print($num_line_start[$a],",",$num_y1[$a],",",$num_line_end[$a],",",$num_y2[$a])
   //   END_CYC
END_SUB

//=============================================
SUB(side)
   FOR($num=0,$num<arrsize($num_line_start))
      $step =($num_y2[$num]-$num_y1[$num])/4
     
      FOR($a=0,$a<4)
         IF_PIXEL_IN($num_line_start[$num],$num_y1[$num]+ROUND(($step*$a),0),$num_line_end[$num],$num_y1[$num]+ROUND(($step*$a),0),0)
            $x=$_return1
         END_IF
         
         IF_PIXEL_IN($num_line_start[$num],$num_y1[$num]+ROUND(($step*($a+1)),0),$num_line_end[$num],$num_y1[$num]+ROUND(($step*($a+1)),0),0)
            IF($x-$_return1=0)
               ARRPUSH ($side, 0)
            else
               IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)>2)
                  ARRPUSH ($side, -1)
               else
                  IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)>0)
                     ARRPUSH ($side, -2)
                  END_IF
               END_IF
               IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)<-2)
                  ARRPUSH ($side, 1)
               else
                  IF(($num_line_end[$num]-$num_line_start[$num])/($x-$_return1)<0)
                     ARRPUSH ($side, 2)
                  END_IF
               END_IF
            END_IF
         else
            ARRPUSH ($side, 0)
         END_IF
         
         FOR($e=$num_line_end[$num],$e>$num_line_start[$num],-1)
            IF(pxl($e,$num_y1[$num]+ROUND(($step*$a),0)) = 0)
               $x=$e
               $e=$num_line_start[$num]
            END_IF
         END_CYC
         FOR($e=$num_line_end[$num],$e>$num_line_start[$num],-1)
            IF(pxl($e,$num_y1[$num]+ROUND(($step*($a+1)),0)) = 0)
               $xs=$e
               $e=$num_line_start[$num]
            END_IF
         END_CYC
         
         IF($x-$xs=0)
            ARRPUSH ($side, 0)
         else
            IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)>2)
               ARRPUSH ($side, -1)
            else
               IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)>0)
                  ARRPUSH ($side, -2)
               END_IF
            END_IF
            IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)<-2)
               ARRPUSH ($side, 1)
            else
               IF(($num_line_end[$num]-$num_line_start[$num])/($x-$xs)<0)
                  ARRPUSH ($side, 2)
               END_IF
            END_IF
         END_IF
         
      END_CYC
     
      print("-------------")
     
      $side_str = $side[0]
      FOR($b=1,$b<arrsize($side))
         $side_str = STRCONCAT ($side_str,":",$side[$b])
      END_CYC
      //  print($side_str)
     
      FOR($c=0,$c<10)
         
         FOR($n=1,$n<TFCOUNT(STRCONCAT("num_",$c))+1)
            STRSEPARATE (TFREAD (STRCONCAT("num_",$c),$n), ":", $temp_arr)
           
            FOR($i=0,$i<8)
               IF(int($temp_arr[$i]) ! int($side[$i]))
                  $i=999
               END_IF
            END_CYC
            IF($i < 999)
               print("цифра ", $num+1," это ",$c)
               ARRPUSH ($num_fin,$c)
               ARRPUSH ($cap_all_arr,$c)
               $n=TFCOUNT(STRCONCAT("num_",$c))+1
               $c=10
            END_IF
            UNDEFINE($temp_arr)
         END_CYC
      END_CYC
     
      IF(arrsize($num_fin)<1)
         print("цифра ",$num+1," не распознана")
         $n_file = INPUTBOX(STRCONCAT("введи цифру которая в капче под номером ",$num+1), 0, 120)
         IF($n_file = "")
            halt
         END_IF
         ARRPUSH ($cap_all_arr,$n_file)
         TFWRITE (STRCONCAT("num_",$n_file), $side_str)
      END_IF
     
      UNDEFINE($side)
      UNDEFINE($num_fin)
   END_CYC
   
   $cap_all_str = $cap_all_arr[0]
   FOR($a=1,$a<arrsize($cap_all_arr))
      $cap_all_str = STRCONCAT ($cap_all_str,$cap_all_arr[$a])
   END_CYC
   print("-------------")
   print($cap_all_str)
   print(" ")
   
END_SUB
//=============================================
//=============================================
//=============================================
$x1_fr=835     // координаты поля с капчей (целиком, то что белое)
$y1_fr=438
$x2_fr=916
$y2_fr=459


//$x1_fr=350      // координаты поля с капчей (целиком, то что белое)
//$y1_fr=665
//$x2_fr=674
//$y2_fr=809


pos_size()      // определение границ цифр в капче

IF(arrsize($num_line_start) ! 6)
   print("найдено ",arrsize($num_line_start)," цифр")
   halt
END_IF


side()     //распознаватель

//в этоге мы имеем массив с цифрами  $cap_all_arr
//и строку  $cap_all_str



halt
опять же, сильно код не проверял, возможно в нем есть что улучшать.

Title: Re: Распознавалка симпл капчи
Post by: Кликермен on February 02, 2016, 06:57:34 PM
Драмстер, ты гений! я пробовал нечто подобное реализовать, но по другому принципу
 смотрим пиксели слева направо, и сверху вниз. если находим черный каему, запоминаем, доходим до края -   встречалась ли каемка повторно. если  встречалась, то запоминаем,  где у нас  есть такое место. это сразу отсекает 7.  например  цифра 5, такое встречается по горизонтали(снизу завиток)
(https://pp.vk.me/c633826/v633826143/17a4f/5pZoh5eCMnA.jpg)
и вертикали (дважды).
(https://pp.vk.me/c633826/v633826143/17acb/C21Aggiq4kw.jpg)
 запоминая и сравнивая с образцом определяем что и где. и еще  доп проверка  -  поиск длинных ровных линий(если капча сильно поехавашая, то не сработает) определяем в какой части  изображения(сверху, снизу, слева, справа) у нас есть  линии(вертикаль, горизонталь) - и сверяясь с шаблоном, сразу определяем
Title: Re: Распознавалка симпл капчи
Post by: Кликермен on February 09, 2016, 07:33:50 AM
подскажите, куда копать

что есть? 3 массива, в которых  10<ячеек<15, он такого вида
12 17 17
14 5 15
14 0 12
14 0 10
14 0 12
12 0 14
10 0 14
12 0 14
14 1 14
12 5 14
8 12 15
5 19 17
//////
1 массив 2 массив 3 массив. наименьшие/наибольшие цифры -скопления/отсутствие пикселей.
8 25 20
14 17 20
20 11 14
20 8 11
14 2 11
11 0 11
14 0 11
20 0 14
20 0 17
17 8 17

В данном примере это 0. как технически грамотнее реализовать поиск min/max областей? с запоминанием индексов массивов? причем массивов 3
Title: Re: Распознавалка симпл капчи
Post by: dramster on February 10, 2016, 09:42:07 PM
если я правильно понял задачу, то:
Code: (clickermann) [Select]
STRSEPARATE("8,14,20,20,14,11,14,2,20,17",",",$arr)

$arr_min= $arr[0]
$arr_max= $arr[0]
FOR($a=0,$a<ARRSIZE($arr)
   IF($arr_min>$arr[$a])
      $arr_min=$arr[$a]
      $i_min=$a
   END_IF
   IF($arr_max<$arr[$a])
      $arr_max=$arr[$a]
      $i_max=$a
   END_IF
END_CYC

print("min - ",$arr_min," под индексом ", $i_min)
print("max - ",$arr_max," под индексом ", $i_max)


halt
находим в массиве мин/макс, и запоминаем их индексы.
Title: Re: Распознавалка симпл капчи
Post by: SVS on March 01, 2016, 07:54:24 PM
Хотел проверить как работает распознавалка капчи,пишет 18:54:26 найдено цифр в поле - 1
18:54:26 найдено 1 цифр.Что не так делаю??
Title: Re: Распознавалка симпл капчи
Post by: Кликермен on March 01, 2016, 08:13:44 PM
измени положение капчи у себя
Title: Re: Распознавалка симпл капчи
Post by: SVS on March 02, 2016, 12:26:10 AM
$x1_fr=835     // координаты поля с капчей (целиком, то что белое)
$y1_fr=438
$x2_fr=916
$y2_fr=459
Я так понял тут надо выставить свои координаты?Выставлял верхний левый и нижний правый углы белого поля с капчей.
Результат тот же.
Title: Re: Распознавалка симпл капчи
Post by: SVS on March 02, 2016, 02:23:31 AM
Нет.Подскажите где и как это сделать.
Открываю http://wekings.ru/login,
что и где  предварительно обработать?
Title: Re: Распознавалка симпл капчи
Post by: dramster on March 02, 2016, 05:49:50 PM
я сейчас на не своем компе. мои действия - скачал последнюю версию кликера http://crapware.aidf.org/page/4 ,  скачал архив со скриптом и доп файлами из вложения этого сообщения http://crapware.aidf.org/forum/index.php?topic=2336.msg14743#msg14743 . распаковал архив, запустил kapcha.cms, открыл http://wekings.ru/login , изменил нужную область в скрипте
Code: (clickermann) [Select]
$x1_fr=574
$y1_fr=314
$x2_fr=654
$y2_fr=333
пуск скрипта
Code: [Select]
17:34:41 =====================
17:34:41 найдено цифр в поле - 6
17:34:41 -------------
17:34:42 цифра 1 это 1
17:34:42 -------------
17:34:43 цифра 2 это 5
17:34:43 -------------
17:34:44 цифра 3 это 6
17:34:44 -------------
17:34:46 цифра 4 это 9
17:34:46 -------------
17:34:48 цифра 5 это 7
17:34:48 -------------
17:34:48 цифра 6 это 2
17:34:48 -------------
17:34:48 156972
всё верно разгаданно. неужто это так сложно!?
Title: Re: Распознавалка симпл капчи
Post by: Vint on April 07, 2016, 09:11:08 AM
Давеча увидел вот такую анимированную капчу (прикреплённые).
Всё извращённей и извращённей. Хоть она хорошо подходит под разгадывание через антигейт я не представляю как бы пришлось решать её через чистый кликер. Слава богу пока мне это не требуется.
Интересно стало, какие можно применить методы.
Title: Re: Распознавалка симпл капчи
Post by: Кликермен on April 07, 2016, 11:27:02 PM
Давеча увидел вот такую анимированную капчу (прикреплённые).
Всё извращённей и извращённей. Хоть она хорошо подходит под разгадывание через антигейт я не представляю как бы пришлось решать её через чистый кликер. Слава богу пока мне это не требуется.
Интересно стало, какие можно применить методы.
Как вариант -  колормод 8, затем для поиска текста искать квадратные  блоки 3*3, значит наткнулись на начало текста капчи. Число символов постоянно, далее ищем вправо, определяем возможные пробелы, режем символы, проводим процедуру несколько раз, чтобы нарезать все возможные комбинации капчи
Title: Re: Распознавалка симпл капчи
Post by: Vint on April 08, 2016, 08:14:44 AM
Зачем колормод? От сглаживания?...
Ну это то ладно. 3х3 я так понимаю ориентировка на жирный шрифт?
А вот число символов не постоянно, там же видно.

Я за то, что в некоторые моменты времени снимок попадает на дополнительные накладывающиеся символы.

P.S. ты видел что это gif?
Title: Re: Распознавалка симпл капчи
Post by: Alexiy on March 18, 2018, 12:55:20 AM
я сейчас на не своем компе. мои действия - скачал последнюю версию кликера http://crapware.aidf.org/page/4 ,  скачал архив со скриптом и доп файлами из вложения этого сообщения http://crapware.aidf.org/forum/index.php?topic=2336.msg14743#msg14743 . распаковал архив, запустил kapcha.cms, открыл http://wekings.ru/login , изменил нужную область в скрипте
Code: (clickermann) [Select]
$x1_fr=574
$y1_fr=314
$x2_fr=654
$y2_fr=333
пуск скрипта
Code: [Select]
17:34:41 =====================
17:34:41 найдено цифр в поле - 6
17:34:41 -------------
17:34:42 цифра 1 это 1
17:34:42 -------------
17:34:43 цифра 2 это 5
17:34:43 -------------
17:34:44 цифра 3 это 6
17:34:44 -------------
17:34:46 цифра 4 это 9
17:34:46 -------------
17:34:48 цифра 5 это 7
17:34:48 -------------
17:34:48 цифра 6 это 2
17:34:48 -------------
17:34:48 156972
всё верно разгаданно. неужто это так сложно!?

хм, как ни странно - по ссылке на сайт если - то пишет найдено 5 цифер и всё. а по картинке на форуме - всё четко работает. Обновил пару раз страницу - заработало. Попросило пару раз назвать ему цифру!
А как обратиться к вам за помощью подогнать ваш скрипт под мою "капчу" ?( Там цветные цифры на цветном фоне(
Title: Re: Распознавалка симпл капчи
Post by: dramster on March 18, 2018, 01:16:25 AM
может стоило попробовать обновить капчу (страницу)? в теме про это говорилось, что иногда одна цифра может наехать на соседнюю, для наглядности пост http://crapware.aidf.org/forum/index.php?topic=2336.msg14524#msg14524

можно использовать контраст в таких случаях, вот тема с примером - http://crapware.aidf.org/forum/index.php?topic=2399.0
[spoiler=пример из той темы]
Quote
не мог отделить сами цифры от фона. но, как пример, покажу на капче, где кокраз таки при колормод 8, встречались иногда прострелы в контурах цифр.
капча (http://i.imgur.com/xouifPc.png)
колормод 8 (http://i.imgur.com/ONP0WPD.png)
$mid=170 $k=255 (http://i.imgur.com/1KCslXW.png)
$mid=190 $k=255 (http://i.imgur.com/2BnS0bg.png)
[/spoiler]
только тут пример в обратном направлении скорее всего.

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

вот еще продолжение по усовершенствованию сего творения, гдето начиная с этого поста http://crapware.aidf.org/forum/index.php?topic=88.msg23101#msg23101
Title: Re: Распознавалка симпл капчи
Post by: dramster on March 18, 2018, 01:18:45 AM
А как обратиться к вам за помощью подогнать ваш скрипт под мою "капчу" ?( Там цветные цифры на цветном фоне(
« Последнее редактирование: Сегодня в 01:07:03 от Alexiy »
да без проблем, можно создать новую тему, если задачи схожи с этим примером капчи, то можно и сюда, вместе подумаем и решим  ;)
Title: Re: Распознавалка симпл капчи
Post by: Alexiy on March 18, 2018, 01:25:52 AM
О , спасибо! я и не чаял уж отклика!) В принципе - задача схожая по началу) - определить цифры. Но дальше больше - надо решить примеры с ними.. В вопросах - от 1 до 9 на сложение и вычитание. Короче, чтобы не молоть в пустую - вот картинка -
Title: Re: Распознавалка симпл капчи
Post by: dramster on March 18, 2018, 01:45:50 AM
О , спасибо! я и не чаял уж отклика!) В принципе - задача схожая по началу) - определить цифры. Но дальше больше - надо решить примеры с ними.. В вопросах - от 1 до 9 на сложение и вычитание. Короче, чтобы не молоть в пустую - вот картинка -
даже учитывая, что твой пример в формате .jpg, а мы не привыкли работать с "испорченными" изображениями, решить такую капчу - рас плюнуть  :D . нужно всего то пару примеров с разными фонами и вариантами цифр, обязательно в формате без потери качества - бмп, пнг, ну или гиф.

 ну и я думаю, лучше продолжить в этой теме http://crapware.aidf.org/forum/index.php?topic=88 . там все же немного эволюционировал вышеуказанный скрипт.  либо создать новую тему. какаято неразбериха пошла по форуму  :( , тут одно, там второе, а в итоге - во втором продолжение первого, и по разным темам .... сам путаюсь где и что, и на чем закончилось.
Title: Re: Распознавалка симпл капчи
Post by: Alexiy on March 18, 2018, 02:06:35 AM
Открыл я там тему..неудачно получилось ( не умею форумами пользоваться, вот как то так
http://crapware.aidf.org/forum/index.php?topic=3862.msg26372#msg26372
Title: Re: Распознавалка симпл капчи
Post by: 007clickermann on October 23, 2018, 09:43:46 PM
А как можно решить вот такую капчу?
(http://prntscr.com/l9kuyf)
http://prntscr.com/l9kuyf
Файл также во вложении.
Title: Re: Распознавалка симпл капчи
Post by: dramster on October 23, 2018, 09:51:21 PM
Програмно, я сомневаюсь. Проще через сервисы типа рукапча и утилиты agclient, там копейки цена. http://crapware.aidf.org/forum/index.php?topic=73.0
Title: Re: Распознавалка симпл капчи
Post by: 007clickermann on October 23, 2018, 10:03:56 PM
В том то и дело, хочется не для одного аккаунта. Пробовал с помощью SCANPICTURE, вырезал каждую цифру отдельно в bmp и сравнивал всю область капчи с файлом каждой цифры bmp, но как-то вообще у меня это не работает.
Title: Re: Распознавалка симпл капчи
Post by: dramster on October 23, 2018, 10:10:43 PM
Впринципе, если удастся  отделить цифры от линий (удалить линии), то проблем вообще никаких. С удалением черной/черных линий нужно еще подумать, у меня идей пока нет.


Нужно больше экземпляров, или ссылку на эту капчу.
Title: Re: Распознавалка симпл капчи
Post by: 007clickermann on October 23, 2018, 10:19:14 PM
Впринципе, если удастся  отделить цифры от линий (удалить линии), то проблем вообще никаких. С удалением черной/черных линий нужно еще подумать, у меня идей пока нет.


Нужно больше экземпляров, или ссылку на эту капчу.

Вложил 10 примеров, может поможет как-то.
Title: Re: Распознавалка симпл капчи
Post by: dramster on October 23, 2018, 10:31:27 PM
Вложил 10 примеров, может поможет как-то.
Нет, не поможет, так как файлы в jpg, и в отвратительном качестве. Нужны в формате без потерь - bmp, png...
Title: Re: Распознавалка симпл капчи
Post by: 007clickermann on October 24, 2018, 08:29:29 AM
Еще раз перезалил, увеличил и сделал в bmp.
Title: Re: Распознавалка симпл капчи
Post by: Vint on October 24, 2018, 10:20:12 AM
Увеличил?  :o
Здесь поподробнее. Как увеличил, чем и зачем. Или это и есть оригинальный размер? Или оригинального мы не знаем, а эта капча в чём нибудь типа эмулятора андроида и размер зависит от размеров окна?
Title: Re: Распознавалка симпл капчи
Post by: 007clickermann on October 24, 2018, 12:13:51 PM
Увеличил не саму капчу, не рисунок, а окно в процентах для того, чтобы можно было сделать скриншот покрупнее.
Когда делал скриншот, то выбрал формат сохранения bmp.
В чем вопрос? Не придирайтесь к словам.
Title: Re: Распознавалка симпл капчи
Post by: Vint on October 24, 2018, 01:24:30 PM
Увеличил не саму капчу, не рисунок, а окно в процентах для того, чтобы можно было сделать скриншот покрупнее.
Когда делал скриншот, то выбрал формат сохранения bmp.
В чем вопрос? Не придирайтесь к словам.
Никто к словам не придирается. Пытаются выяснить непонятные "махинации"  :D. И как видно, не зря.
Не обратил бы я внимание на слово "увеличил" и если бы кто нибудь взялся искать решение, это могло всплыть через пять страниц обсуждений и поисков - 'почему же не работает'.

Нельзя играться с масштабом для скринов! Все изображения пересчитываются.
В задачах по анализу графики просят скрины , чтобы с ними работать, а не только на них посмотреть. И они должны обязательно быть в рабочем масштабе и цвете.
Title: Re: Распознавалка симпл капчи
Post by: 007clickermann on October 24, 2018, 01:37:41 PM
Выше писали о том, что плохое качество и jpg. Для улучшения качества увеличил масштаб и сохранял в другом формате. Какое значение имеет размер, если область сканирования все равно выставляется в параметрах в коде и важно понять идею как расшифровать подобную капчу на автомате?
Если нужен оригинальный размер в bmp, то естественно, пришлю оригинальные. Опять же, увеличивалось это все только для удобства генерирования идей :)
Title: Re: Распознавалка симпл капчи
Post by: Vint on October 24, 2018, 01:59:52 PM
Выше писали о том, что плохое качество и jpg. Для улучшения качества увеличил масштаб и сохранял в другом формате.
В том сообщении "качество" относилось к степени сжатия JPEG. Можно зашакалить до жутких артефактов, а можно сохранить и в качестве 100% без артефактов jpeg-а совсем.

Опять же, увеличивалось это все только для удобства генерирования идей :)
Для этого хватило бы и первого выложенного скрина. Чтобы подобрать подходящие способы решений, этого мало. Нужно пробовать, а пробовать на искажённом изображении нет смысла. Потом, на рабочем, всё будет иначе.
Title: Re: Распознавалка симпл капчи
Post by: dramster on October 24, 2018, 09:45:38 PM

Вложил 10 примеров, может поможет как-то.
Да, масштаб это лишнее, ну и фиг с ним, уменьшил снова для экспериментов.

И как оказалось, и как и писал Кирил, ничего выдумывать не нужно, уже есть готовые алгоритмы. Нужно немного подправить их, и все будет работать.

Вот готовый распознаватель по шаблонам http://crapware.aidf.org/forum/index.php?topic=88.msg16221#msg16221

Я попробовал с колормодом 8, процент нужно выставлять при отладке , зависит от масштаба. Горизонтальные линии в этом случае не помеха. Попробовал сканировать пару цифр в масштабе 33% от имеющегося, процент = 83, находит без проблем, но находит иногда лишние по вертикали (одну над одной), без проблем можно отсеять. Если же масштаб побольше взять, то точность скорее всего увеличится.

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

Title: Re: Распознавалка симпл капчи
Post by: 007clickermann on October 25, 2018, 12:22:49 AM
Ясно, спасибо, буду пробовать.
Title: Re: Распознавалка симпл капчи
Post by: kubosan on December 10, 2018, 03:30:23 PM
А как можно решить вот такую капчу?
(http://prntscr.com/l9kuyf)
http://prntscr.com/l9kuyf
Файл также во вложении.

Можно вот так  https://prnt.sc/lt1vt4