Капча RIPN.. Помогите пожалуйста...

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by crazyadmin007, 21 May 2010.

  1. crazyadmin007

    crazyadmin007 New Member

    Joined:
    12 Mar 2010
    Messages:
    10
    Likes Received:
    1
    Reputations:
    0
    Вобщем сразу к делу.
    Пишу прогу для автоматической регистрации доменов в зоне pp.ru и net.ru. Проблема только в распозновании капчи, а точнее..
    Имеется капча следующего вида
    [​IMG]
    Для себя выстроил следующий алгоритм работы:
    1. Перевожу изображения в черно белый цвет
    2. Удаляю шумы
    3. Выделяю символы по отделности
    4. И далее идет распознование (Тут у мнея имеются готовые решения на основе нейросетей, главное в нормалный вид привести до этого пункта)

    С первыми двумя пунктами справился, получилось следующее..
    [​IMG]
    Перепробовал кучу изображений шумы отлично убираются.
    С п.4 надеюсь больших проблем не должно быть.

    Вобщем не получаеться с п.3, выделить отдельно символы и развернуть на первоначальные позиции. Проблема вся втом что символы часто накладываются друг на друга с поворотом в разные стороны.

    Пожалуйста помогите советом ,что можно сделать.. Пишу на дельфях, но буду рад любому совету.
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Когдато подобным пытался заниматься, но забил на это.
    А вообще идея была в том, чтобы взять алгоритм обхода препятствий (в исходниках для игр много их). И вот выбрать саму крайнюю левую точку. И в алгоритме обхода задать условие - прийти из неё в неё же. но делай обход по часовой стрелке и не проверяя первый шаг. Главное чтобы обход был тока в одну сторону движения.
    И получалась примерно такая работа:
    1) черная точка - стена, её нужно обойти.
    2) как столкнулся с черной точкой, так запомнил её координаты.
    3) далее по гонять обход подобным методом.
    4) когда ты встретил точку из которой начал движение, то у тебя уже будет иметься набор координат внешних точек, который составляют многоугольник.
    5) берешь копируеш этот многоугольник себе - это будет готовая выдранная буква
    6) по координатам этого многоугольника делаеш заливку белым цветом (цветом фона) и в конечном итоге ты удалешь с рисунка выделенную букву.
    7) далее желательно в той области где ты удалил букву опять убрать шумы (могут случайно отстаться случайные точки)
    8) Опять находишь крайнюю точку и повторяй действия.

    Хотя тут судя по виду набор букв одинаковый тут имеется. Так что сразу выбери образы всех букв. И далее поворотом картинки сверяй с образами. хотябы просто по кол-ву совпадающих точек
    Если так прокатит то относительно быстро будет распознаваться.
    Вот если посчитать, что
    1) угол поворота достаточно будет 5 градусов.
    2) всего 90 градусов (типа максимум 45 в одну сторону наклон и в другую стокаже)
    3) нужно значит максимум 18 позиций проверить
    4) в англ алфавите 26 букв, итого получается максимум сравнений 468
    5) если учесть что на капче 6 символов, то 2808 сравнений.
    6) если учесть что буква каждая буква максимум 30*30 то 900 точек сравнить надо
    7) итого 2808 * 900 = 2527200 точек сравнить надо для распознавания.
    Если учесть что код будет иметь среднюю оптимизацию (чисто ток работа с памятью)
    то на обычных процах в однопотомном режиме выйдет 16-32 миллесек. И то это за счет того что поток будет прерываться по истечению процессорного времени.
     
  3. crazyadmin007

    crazyadmin007 New Member

    Joined:
    12 Mar 2010
    Messages:
    10
    Likes Received:
    1
    Reputations:
    0
    Пасибо большое, с алгоритмом обхода препятствий т.е. оконтуривания в моем случаи посмотрю но опять же натыкаюсь на неприятность
    1. Не все буквы получаються замкнуты(впринципи обойти это можно)
    2. Самый неприятный гемор это наложение букв друг на друга, я показал более нормальный образец. Вот такие капчи выпадают порядка 1 из 10.

    [​IMG] перевожу в ЧБ изображения и убираю шумы и вот

    [​IMG]

    W и Y не получиться отделить оконтурив их, буква E тоже полхо замкнута.

    У меня родиласт новая идея, оцените её, плиз..

    Что если взять из координат Чб изображения вырезать цветные буквы чтобы было без шумов. Я это к тому что в исходном изображении буквы отличаються по цветам и вырезать каждую букву по разности в цветах. Тогда необходимо решит еще одну задачку:

    1.Необходимо определить наиболее часто встречающиеся 6 цветов и исходя из этих эталонов вырезать изображения.
    2. А дальше разворот и распознание.

    надеюсь идея понятна, помогите сформулировать более точно, может че-нибудь еще подскажите или исправите..
    Заранее ОГРОМНОЕ СПАИБО! Как даделаю обязательно выложу. :)
     
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Дай линк на генератор капчи
     
  5. crazyadmin007

    crazyadmin007 New Member

    Joined:
    12 Mar 2010
    Messages:
    10
    Likes Received:
    1
    Reputations:
    0
    Если действительно интересно вот здесь форма для входа
    http://www.ripn.net:8080/nic/dns/form/
    регни по нижней ссылки (на этой же странице) персону,а затем на нее службу тех. потдержки. После входа в панель сразу же увидишь страницу регистрации доменов и заветную капчу которая все портит... Может я и забил бы на капчу и вводил её вручную :) . Весь гемор в железном ограничении на количество доменов в час, помоему около пяти если не ошибаюсь .. Т.е пять челов могут регнуть домен, а остальные пролетают в течении часа конечно.. на PP.RU нет такого ожиотажа , а на NET.RU очень сложно попасть.