За последние 24 часа нас посетили 17980 программистов и 1700 роботов. Сейчас ищут 1540 программистов ...

труъ каптча.

Тема в разделе "PHP для новичков", создана пользователем +Sten+, 26 фев 2008.

  1. savvot

    savvot Активный пользователь

    С нами с:
    25 мар 2008
    Сообщения:
    14
    Симпатии:
    0
    Ну код я показывать не буду, по вполне понятным причинам. А вот демку попробую показать.

    В общем заходим ЛИНК ПОТЕР, ПОСКОЛЬКУ "САМЫЕ УМНЫЕ" НАЧАЛИ ПАРСИТЬ КАПЧУ И ГРУЗИТЬ МНЕ СЕРВАК

    В поле вставляем урл капчи:
    Код (Text):
    1.  
    2. http://image.captchas.net/?client=wordtracker&random=35qh3s7debl&alphabet=abcdefghkmnopqrstuvwxyz&letters=4
    ВАЖНО: в этом линке можно (и нужно) менять параметр random, чтобы выводились разные капчи, но НЕ надо менять alphabet и num, потому что распознавалка заточена на 4 символа и этот алфавит (капча, используемая на вордтрекере).

    Распознавание само-собой не 100%, хуже всего распознаются символы "a" и "e".

    Если интересно, могу в общих чертах рассказать алгоритм (в данном случае алгоритмы, поскольку самое трудное было выделить символы из этой мешанины пикселей), по которому работает данный скрипт.
     
  2. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    жесть. На картинке uqhf, распозновалка сказала bafa.
    "Найдите 10 совпадений". :)
     
  3. savvot

    savvot Активный пользователь

    С нами с:
    25 мар 2008
    Сообщения:
    14
    Симпатии:
    0
    Ты лучше посчитай отношение успешного распознавания к неуспешному на разных капчах с большой выборкой ;)
    Вобще там в среднем 1:3 - 1:5 (в СРЕДНЕМ!). Уж поверь, я пока писал этот модуль столько капчей распознал, что и не представить.

    И вобще сам попробуй хотя бы символы нормально выделить из этой капчи с помощью GD функций, а потом критикуй :)
     
  4. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    да не, меня просто приколола ситуация, что "гадал, но не угадал ни одной буквы".
     
  5. savvot

    savvot Активный пользователь

    С нами с:
    25 мар 2008
    Сообщения:
    14
    Симпатии:
    0
    Ну я же волнуюсь! :)) "Детище" то свое, выстраданное. Для меня это было очень непросто. :)
     
  6. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Угу, с удовольствием почитаю ;)
     
  7. Anonymous

    Anonymous Guest

    +1

    У меня с первого раза угадала, собака.
    И это хорошо. ;)
     
  8. savvot

    savvot Активный пользователь

    С нами с:
    25 мар 2008
    Сообщения:
    14
    Симпатии:
    0
    Итак, по поводу алгоритма:

    В данном случае (см. выше демо), основной трудностью было выделить сами символы, причем выделить как однородные области (контуры), без шума и артефактов. Поскольку сам алгоритм распознавания оперирует массивом "рабочих" пикселей и "пустых", то главной задачей было привести капчу к именно такому виду, без лишних деталей.

    Оригинальная капча и результат предварительной обработки:
    [​IMG] [​IMG]

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

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

    Ну а дальше создается относительно большая база этих символов и соответствий их буквам, во внутреннем формате скрипта (обычно приходится забивать руками базу, но с данной капчей получилось это автоматизировать - посмотрите на урл капчи в предыдущих сообщениях и поймёте как и почему).

    Сам же алгоритм распознавания в основе своей примитивен - это обычное сравнение. Но само-собой все не так просто. Иначе, с учетом неровности символов, с учетом различных углов и погрешностей предварительной обработки, база для успешного распознавания должна была быть очень большой, а время распознавания увеличилось бы до нереальных значений. Я не буду в точности описывать алгоритм, в нем нет ничего сложного, но все-таки это результат многих экпериментов и, в чем-то, мое личное "ноу-хау".
    Скажу лишь, что он учитывает:
    - размеры символов (ширина-высота) и их различие
    - количество точек в символе (не нулевых значений)
    - толщину символов (тоже был написан свой алгоритм расчета)
    И к этому всему применяется особый набор правил сравнения и математ. операций, который был вычислен в основном эмпирическим путем.

    В результате получаем:
    - большую скорость распознавания, почти независимую от размера базы (в демке медленно грузится сама картинка с сервера, где расположена капча, а распознавание - быстрое)
    - небольшой размер базы требуемый для точного результата (сугубо индивидуально для каждой капчи)

    В принципе - ничего особо сложного, но результат налицо :)
     
  9. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Заметано.

    savvot
    Спасибо за ответы.
     
  10. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
  11. BS

    BS Активный пользователь

    С нами с:
    10 апр 2008
    Сообщения:
    149
    Симпатии:
    0
  12. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    BS
    Только если слова писать... случайный код и человек не подберет.
     
  13. BS

    BS Активный пользователь

    С нами с:
    10 апр 2008
    Сообщения:
    149
    Симпатии:
    0
    ну вот набросал работающий примерчик. Можно довести до ума, чтобы числа были хорошо читаемы.
     
  14. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    на рапид давно заглядывали?
     
  15. BS

    BS Активный пользователь

    С нами с:
    10 апр 2008
    Сообщения:
    149
    Симпатии:
    0
    armadillo А в подпись свою давно заглядывали?
     
  16. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Да, умно сделали, но люди с небольшим IQ не понимают, почему у них не влазит 5 цифра, а раньше влазила, читать пояснение на английском никто не хочет. Уже 2 раза слышал, что "рапида сломалась, посмотри сам... 5 цифра не влазит!!"
     
  17. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  18. BS

    BS Активный пользователь

    С нами с:
    10 апр 2008
    Сообщения:
    149
    Симпатии:
    0
    читается нормально, возможно, что и распознается тоже
     
  19. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  20. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Прищурился, поднял пальцем веко правого глаза, трагическим взглядом посмотрел на картинку, увидел почти все цифры :) Попроще бы, чтобы только прищуриться.
     
  21. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Хм. Опросил 3 человек. Они прочитали с ходу 10 из 10.
     
  22. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Sergey89
    Да нет, видно отлично, непривычно просто как-то, с первого раза люди не знают, что у 1 есть плацдарм снизу и короткий носик, а у 7 нету плацдарма и нос длиннее. Стоит 1 раз отгадать проблемные символы (увидеть четко) и все отложится в мозге :) Лично я не мог понять, 1 или 7 там с 1 раза.
     
  23. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Исключил 1 и 7. Вроде понятнее стало.
     
  24. Johnatan

    Johnatan Активный пользователь

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    Посмотрел последнюю каптчу.. Уж очень на грани между "вижу чётко" и "а вдруг это не 8, а 6?". Из 10 просмотренных каптч я кажется отгадал все, но чувство, что обязательно высветится такая, которую я не смогу понять - осталось. Но, имхо, оно того стоит, если эту каптчу не сможет бот распознать.
     
  25. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Считаю, что название темы попало в самую точку, и если бот еще не может распознать какие-то каптчи, то эти каптчи читаются человеком уже с трудом, а боты... они и этому научатся, чтоб им не ладно было. Так что, ИМХО, нужна альтернатива, нужна уже завтра, следовательно реализовывать сегодня