PDA

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


crazyadmin007
21.05.2010, 22:42
Вобщем сразу к делу.
Пишу прогу для автоматической регистрации доменов в зоне pp.ru и net.ru. Проблема только в распозновании капчи, а точнее..
Имеется капча следующего вида
http://www-xakep.narod2.ru/imagecode.png
Для себя выстроил следующий алгоритм работы:
1. Перевожу изображения в черно белый цвет
2. Удаляю шумы
3. Выделяю символы по отделности
4. И далее идет распознование (Тут у мнея имеются готовые решения на основе нейросетей, главное в нормалный вид привести до этого пункта)

С первыми двумя пунктами справился, получилось следующее..
http://www-xakep.narod2.ru/captha.bmp
Перепробовал кучу изображений шумы отлично убираются.
С п.4 надеюсь больших проблем не должно быть.

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

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

slesh
22.05.2010, 09:56
Когдато подобным пытался заниматься, но забил на это.
А вообще идея была в том, чтобы взять алгоритм обхода препятствий (в исходниках для игр много их). И вот выбрать саму крайнюю левую точку. И в алгоритме обхода задать условие - прийти из неё в неё же. но делай обход по часовой стрелке и не проверяя первый шаг. Главное чтобы обход был тока в одну сторону движения.
И получалась примерно такая работа:
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 миллесек. И то это за счет того что поток будет прерываться по истечению процессорного времени.

crazyadmin007
22.05.2010, 16:03
Пасибо большое, с алгоритмом обхода препятствий т.е. оконтуривания в моем случаи посмотрю но опять же натыкаюсь на неприятность
1. Не все буквы получаються замкнуты(впринципи обойти это можно)
2. Самый неприятный гемор это наложение букв друг на друга, я показал более нормальный образец. Вот такие капчи выпадают порядка 1 из 10.

http://www-xakep.narod2.ru/imagecode7.jpg перевожу в ЧБ изображения и убираю шумы и вот

http://www-xakep.narod2.ru/captha1.bmp

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

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

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

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

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

slesh
22.05.2010, 16:08
Дай линк на генератор капчи

crazyadmin007
22.05.2010, 21:56
Если действительно интересно вот здесь форма для входа
http://www.ripn.net:8080/nic/dns/form/
регни по нижней ссылки (на этой же странице) персону,а затем на нее службу тех. потдержки. После входа в панель сразу же увидишь страницу регистрации доменов и заветную капчу которая все портит... Может я и забил бы на капчу и вводил её вручную :) . Весь гемор в железном ограничении на количество доменов в час, помоему около пяти если не ошибаюсь .. Т.е пять челов могут регнуть домен, а остальные пролетают в течении часа конечно.. на PP.RU нет такого ожиотажа , а на NET.RU очень сложно попасть.