Ничего этим не сказано. Можно было написать на С, реализация отличалась бы только на уровне функций для работы с графикой. Автору пришлось бы скачать какой-нибудь libgif и в нем разбиратся. А зачем спрашивается?
Принципиально не использовать язык Х — просто глупо. Хороший программист должен уметь правильно выбрать инструмент.
вы сами ниже написали, что капча простая и пост овощной. хороший программист в этом посте только в вашем комментарии, да и правильных инструментов навалом. а куча программистов на похапе говорит лишь о том, что люди не хотят развиваться
Ваше пренебрежение языком программирование, показывает, что вы как программист ничтожны — вы просто кодер.
Для настоящему программиста нет особой разницы на чем писать — на php, бейсике, c/c++, python, ruby или каком-либо еще языке программирования. Он везде напишет хороший код.
В данном случае автор руководствовался принципом, где быстрее и проще реализовать алгоритм. Да, можно было данный алгоритм реализовать на c++, потратив на это в N раз больше времени — но разве оно стоило того?
> Он везде напишет хороший код
Какие красивые слова. А Вы сами-то на многих языках писали идеальный код? Так легко переключаетесь? В любой момент если надо на любом языке из списка «php, бейсике, c/c++, python, ruby» сбацаете любую задачу?
Я не защищаю теорию о том что php плох в этой задаче, это-то как раз не соответствует действительности, я ставлю под сомнение утверждение что «для настоящего программиста нет особой разницы на чем писать» — такое может сказать только человек, который никогда не работал в действительно крупных проектах. Всегда есть языки, которые знаешь лучше, и разработка на них выйдет быстрее и качественнее, чем «на любом». Ещё и про «ничтожность» других судите по своим бредовым убеждениям.
я считаю, что хороший программист в состоянии выбрать какой язык («инструмент») ему найболее лучше подойдет для решения конкретной задачи. ведь для тривиальной задачи совершенно не нужно подключать навороченный фреймворк, не так ли?
Ну это так.
Но прагматик также подумает, сколько времени займёт у него эта разработка. И если использование фреймворка существенно сократит время разработки, то почему бы и нет? Тут уже надо смотреть, какая задача стоит — достаточно или 10 капч в секунду, или надо миллионы обрабатывать.
Я что-то говорил про время?
Я говорил про составление алгоритма, его реализацию и оформление реализации.
Эту схему можно хоть блоксхемами сделать, а спроектировать на конкретный язык программирования — не очень сложная задача.
Как пример, немного утрированный, но можно увелить сложность:
умножение на 5 можно сделать двумя способами
1) a = b*5
2) a = b+b+b+b+b
Какой бы язык программирования не был — хороший программист выберет первый вариант.
Ага, если говорить об оптимизации, то я бы тоже сдвинул на 2 бита влево, и потом еще раз прибавил :)
Хотя, это пережитки эпохи 8086. Сейчас процессор сам в состоянии (на уровне микрокода) понять, как ему эффективнее сделать ту или иную операцию. Это вам не 86-й, где команда MUL/IMUL могла занимать больше сотни тактов.
Про пост ничего не было. А простая или сложная капча вроде не от языка зависит.
Куча программистов на похапе говорит лишь о том, что у похапе низкий порог вхождения, поэтому среди похапистов высокая концентрация быдлокодеров. Но если конкретный человек знает пыхпых, то это еще ни о чем не говорит.
вобще-то, это была цитата из этого комментария(http://1div.habrahabr.ru/blog/63854/#comment_1774343), и ответ был вроде как не вам, но можете позащищать детей, если это так доставляет. и таки да, я могу, но мериться длинной клавиатуры у меня нет желания
Если я правильно помню курс по нейронным сетям, распознать и классифицировать входные образы, в том числе цифры, как в примере из поста, может двуслойная нейросеть, состоящая из слоя Кохонена и слоя Гроссберга. Кстати, ничего особо сложного.
Если вы это расценили как «пост — говно, работа — тоже», то это ваши проблемы. Я вообще не понимаю почему вы сразу отнеслись к нему отрицательно, хотя сами, скорее всего, сам код даже и не глядели.
Если человек что-то написал, то это само по себе уже заслуживает оценки, и если это что-то не «чятик на дельфи», то я не вижу никакой причина ее занижать.
в написании самой нейросети нет ничего сложного… вся сложность как раз в конвертации исходного изображения в более простое (очищенное от шума и прочего, что и было сделано в этой статье), которое нейросеть сможет прогнать через себя. другими словами методы обработки изображения являются фундаментом для любой нс, которая работает с изображениями, причем нс целесообразно использовать для распознавания рукописного текста, а здесь достаточно того, что было сделано — быстро и относительно просто
При решении этой задачки я не руководствовался тем, какой инструмент лучше бы подошёл… я работал с тем, что было под рукой, что было бы проще понять читателям, и это вовсе не значит что мой любимый язык php, и я только на нём разрабатываю.
Можно было бы написать код и на Ассемблере. Но зачем?
Многие бы стали вникать в суть кода? Если здесь самое интересное — понять алгоритм.
К слову, в своё время писал системные службы на Ассемблере, под Windows. К примеру одна из сетевых служб сейчас уже N-й год работает в одном из интернет-центров города, и подсчитывает трафик.
Теперь к Windows`у придерётесь? :)
Ещё раз повторюст, что целью этого поста было показать как можно обойти типичную капчу, проанализировать алгоритм, а не показать какие-то прелести языка.
А жаль, за мысль отличную от всех остальных слили чувака с хабры, а мог бы ведь еще и что-то полезное написать… Демократия это плохо, но лучше нее все равно ничего нет.
Это конечно весьма интересно, но все же эта капча уж очень простая. Вот если бы вы нейросеть написали, которая обучена такие капчи распознавать, то это было бы действительно круто.
По секрету скажу, что настоящей целью для меня было — попасть на Хабр. :) Цель выполнил, получил инвайт :)
Т.к. тема интересна — в следующий раз напишу о взломе капчи посложнее, и на каком-нибудь другом языке.
Давно собрался поломать капчу на сайте Теле2 (там тоже простая) правда не из спортивного интереса а чтобы смски себе слать когда сервак падает. http://sms.tele2.ru/controls/ImageCode.aspx Если будет желание, можете потренероваться на ней =)
На статью меня пожалуй не хватит, но так… немножко потренировался.
Там вроде шрифт один и тот же, только наклон разный и шум мешается.
От шумов картинку можно почистить медианной фильтрацией.
Потом бинаризовать с помощью k-средних.
Выделяем объекты, чтобы определить наклон вычисляем наклон главной оси объекта, например, с наименьшим эксцентриситетом. В зависимости от угла сдвигаем строчки пикселей на сколько надо (понятно, что нецелое число, ну и фиг с ними с погрешностями округления =)
Ну и потом сравниваем с шаблонами циферок.
Если захотеть, за вечер можно наваять. Про алгоритмы обработки изображений, которые я упомянул, хорошо написано на английской википедии ;)
> я один устал от просветленных или есть еще такие?
да, блин, надо просто меньше реагировать на это =) ясно-понятно, что в подобном «просветлении» ключевую роль играет массовая агитация и пропаганда; при этом, «просветлённые», как правило, весьма поверхностно знают и Python, и Ruby (часто — на уровне мануалов «пишем блог за 15 минут»), и, рассуждают в большей мере о фреймворках, противопоставляя (зачем-то? зачем? :)) — язык.
«Просветлённым»: главное, попадая под влияние массовой мэйнстримовой идеи, иметь смелость жить своим умом. И, если уж Вы хотите, показать, рассказать об особенностях и достоинствах Python'a/Ruby'и, то и нужно писать именно об этом, а не о том, как «похапе» (блин, какое забавное наречие :)) «уныл» ;)
вы будете смеяться, но когда я писал верхний мега-комент, у меня в голове там и крутилось посоветовать автору статьи: «уважаемый автор, не надо статей, дайте им видео-каст 'пишем мега-де-капчер за 15 минут'… и не надо сорцы, надо gem install megadecapcher»
> и не надо сорцы, надо gem install megadecapcher»
Ну, вот этот момент уже спорный. Прогресс имеет направление, связанное со снижением механической работы в созидательном процессе. «Правило генерации (из одной философии): избегайте ручного ввода кода, при любом удобном случае, пишите программы, которые бы писали программы.» Поэтому кодогенерация (и как частные случае — просто автокомплит и сниппеты в редакторе) — это хорошо.
По идее, плагины (в данном случае, руби-джемы) тоже можно представить частями конструктора (уже сгенерированными за человека), из которой кто-то строит свои системы. И это тоже хорошо. Другой вопрос — качество этих плагинов и знание самого Руби (или даже РубиОнРэйлс) — если этот вопрос тоже не столь важен — это тоже хорошо, человек строит свою систему и достигает цели (а цели разные — кому-то хочется глубоко знать язык, кому-то — закрывать побольше заказов — все цели относительно хороши).
Помню, когда-то аналогичным способом ломал капчу сервиса по бесплатным отправкам смс-ок. В результате с помощью скрипта на сервере + миниопера я укладывался в 5 нетариффицируемых килобайт, отправляя смс-ку. Но потом тот сервис прикрыли (оставив возможность посылать только локальные смс-ки в пределах дальнего региона РФ).
Сейчас, наверное, самый простой и дешевый способ распознавать капчи в поток — это воспользоваться специализированными сервисами, которые позволяют распознавать 1000 капч за 1$
Угу. За 1$ семья из 10-ти индусов будет и больше капч распознавать :) Где-то пробегала статья про такой вид бизнеса. Сидят ребята, вводят капчи, получают по меркам своей страны кучу бабла.
1) Режем капчу
На этом этапе отрезаем слева и справа по 12px.
Т.к. высота цифры не выше 14px, то снизу и сверху обрезаем лишнее, в зависимости от высоты всей капчи.
2) Идем по полоскам, попиксельно закрашиваячерным, если встречаем резкое (критерий надо вывести) увеличение яркости, то закрашиваем белым.
В результате останутся только цифры на черном фоне
3) дальше распознаем, наложением шаблона.
ЗЫ Так же как вариант, можно применить фильтр — четкие границы (недавно была статья на хабре).
Да, в принципе этот алгоритм получился бы проще и понятней. И вообщем-то так я и хотел реализовать.
Но! Оказалось, что в редких случаях, пиксели практически сливались с градиентом (получаем нечёткие границы). Конечно во многих случаях капча бы распознавалась успешно, но всё же был бы достаточно высокий % когда капча не распозновалась.
Поэтому и пришлось сначала чистить угловой градиент, и лишь потом обрезать саму капчу.
Я что-то пропустил в деле проверки проиндексированности страниц в Яндексе? Тот же YCCY продолжает работать именно через него. Или минусующие вообще не поняли, при чём тут mail.ru? -)
Не знаю, в каких случаях ещё Яндекс показывает даннуюб CAPTCHA, но он точно показывает её при массовой проверке проиндексированности страниц (даже если поставить запрос 1 ссылки каждые 4-5 секунд). Если у вас сайт с десятками тысяч страниц и вы хотите продавать ссылки (через Сапу или что-то ещё), нужно исключить из списка страницы, не проиндексированные Яндексом. Тут вариантов 2 — или Яндекс.XML (платный) или mail.ru, использующий в качестве своего поискового движка тот же Яндекс, но не требующий ввода CAPTCA при массовых запросах. Программ для проверки много, в том числе YCCYб она как раз может использовать 2 метода провеки через mail.ru
Синусоиды идут вдоль прямой и с постоянным шагом, — по этому их распознать не сложно. Белые синусоиды потом снять сложней, ибо есть только отдельные точки, но все равно даже пары цифр достаточно. Ну а дальше распознавание самих цифр — тривиальная задача.
в данной капче можно без морфологии, в цикле пробегаются цвета пикселей, где RGB будет больше определенного значения -то место и метим. В свое время так битрикс со своими цветными циферками и буковками палился, там правдо нужно было границу «не больше» для каждого цвета подобрать :) ишрифт у них лежал, так что наготовить масок — было делом получаса.
Вобще gif это зло для капч, там качество цифр на порядки выше чем у jpg и читать такие капчи легче
Интересный подход, но скорее относится к алгоритму распознавания текста в картинке. Взлом капчи — более сложная задача и не обязательно связанная с распознаванием картинки.
Что будет если чуть-чуть изменить алгоритм формирования капчи?! — скрипт перестанет работать.
Но в целом понравилось ;)
На лекции не хожу — т.к. не учусь, надоело :)
Про «корреляционный метод» и «математическую морфологию» слышу впервые.
Так что по-видимому целью моего поста было — показать каким образом, таким смертным как я, не владеющими этими внеземными технологиями — просто разобрать капчу :)
Часто для того, что успешно сосчитать такую капчу без сильных искажений, достаточно сканировать только первых несколько столбцов цифры, а то и просто проверять суммы пискселей каждой цифры. Такие маски занимают куда меньше.
Здесь можно куда более дешёвый способ предложить — поставить 30 старейших компов в Либерии, посадить за них 30 местных человек (естественно компы на велотяге!) и за тарелку супа в день они каждый будет выдавать по капче в 10 секунд.
Т.е. 30 капч в 10 секунд = 3 капчи в секунду.
Причем алгоритмы пусть хоть заменяются. И можно к тому же это на поток поставить.
Правда гугл, подлец, требует подтверждения по СМСке, но здесь уже надо привлекать китайцев — их много.
А вааще, если по теме, то афтар — крайне плохой человек, ибо способствует делу спамеров гребаных. Хоть и из праздного любопытства.
> А вааще, если по теме, то афтар — крайне плохой человек, ибо способствует делу спамеров гребаных. Хоть и из праздного любопытства.
А вот это палка о двух концах. Чем больше будет взламываться простых капч, тем больше будет тех, что у Яндекса. Тем сложней будет их взламывать… до поры до времени — пока не научатся )) Закон щита и меча, одним словом.
Меня поразила как-то давно программа Universal Share Downloader с плагином разпознавания капчи на rapidshare. В то время там стола убийственная капча, в которой надо было ввести буквы, на которых нарисованы кошки, но не собаки. Я сам (глазами в смысле) не всегда мог определить, что именно за существо изображено, а вот распознавалка всё съедала и добавки просила.
интересно, а какой есть альтернативный способ заменить капчу? Например на некоторых блогах встречал такое: «5+2= ?». Насколько этот метод спамоустойчивый, может кто его использует, поделитесь впечатлениями. Спасибо!
Этот метод настолько же спамоустойчив, как и другие методы. А при распознавании отдельных знаков (5, +, 2) машине пройти его даже проще, чем человеку, поскольку компьютер считает лучше человека
Не зря гугл перешел от каптч на отправку кода на SMS.
Похоже что нужен интернет с надежной аутентификацией пользователей, тогда и каптчи будут не нужны. На самом деле достало уже вводить их, пихают везде, а толк от них только на некотрых сайтах.
может быть я плохо умею искать или мало кто об этом пишет, но нигде не встречал подобного.
А сам я даже и не задумывался на этим. Думал, что анализ графики — слишком сложное дело и явно не для пхп.
Большое спасибо!
кстатии не очень сложна… заметьте линии цифр более вертикальны чем остальные, потом исправляем перспективу и проганяем через нейронную сеть… в теории реально её распознать
Ломаем капчу