Что такое решить капчу с цифрами
Как правильно вводить капчу
Заработок на вводе капч сегодня достаточно распространенный способ получить доход, но, как и у каждого дела, здесь тоже есть свои нюансы. Как правильно разгадывать капчу и заработать больше денег, узнаем прямо сейчас.
Ввод капч, конечно же, является легким способом заработать, но миллионами, вы вряд ли здесь сможете обзавестись. Эта работа для тех, кто только начал зарабатывать в интернете, и на самом деле, это действительно хороший старт. Этот способ заработка один из самых простых, однако, он же – один из самых низкооплачиваемых.
Как начать зарабатывать на вводе капчи
Казалось бы, если это очень просто, зачем нужны инструкции к данной работе? Они понадобятся вам для того, чтобы оптимизировать свою работу, а значит, и увеличить свой доход. Чтобы начать получать прибыль необходимо сделать всего пару действий:
Заработок 💰 онлайн на вводе капчиВсё, что вам нужно — это правильно ввести текст с картинки (с капчи).
Вы получаете деньги 💵 за каждый ввод капчи.
Зарегистрироваться>>>
Набор капчи
Самое главное здесь, уметь правильно и быстро вписывать текст с картинки. Это могут быть как буквы, так и цифры или же их совокупность. Отметить стоит, что на рассматриваемых сервисах у зарегистрированного пользователя есть возможность выбрать уровень сложности выполняемых заданий.
Схема простая: чем легче задание – тем оно дешевле, чем сложнее – тем больше денег.
Самыми простыми капчами считаются капчи из цифр, более сложными, буквы. Третий уровень сложности – это если вводишь капчу на которой изображены и буквы и цифры. Высокооплачиваемыми капчами считаются картинки с изображением ангийских символов. Стоит отметить, что именно такие капчи тяжелее сего набирать, но это тоже дело привычки – раз, второй посидел над клавиатурой, изучил английский алфавит, дальше будет проще.
Не нужно бояться пробовать что-то новое и переходить с одного уровня сложности на другой, потому что повышение стоимости за сложные задания должно быть для исполнителя стимулом к получению большого заработка.
Виды капч
Капча представляет собой не только искаженную картинку с изображением на ней символов, это могут быть также четкие картинки различного рода, расположены в неправильном ракурсе. Пользователь должен, к примеру, правильно развернуть уточку, которая нарисована верх ромашками. Это делается тоже при помощи мышки, нажатием нескольких кнопок.
Здесь нет ничего сложного, но при этом, скорость набора таких капч, будет немного меньше. На счет оплаты таких капч, точную сумму сказать нельзя, потому, как ценовая политика зависит непосредственно от работодателя. Нельзя также сказать, что такого рода капчи самые дорогостоящие, потому как они, в принципе, попадаются не так часто.
Разгадай капчу
Капча – подтверждение того, что за компьютером действия производятся человеком, а не автоматической программой, то есть, роботом. Приведем пример достаточно сложного и высокооплачиваемого задания. Чтобы разгадывать капчу, нужно следовать очень простым инструкциям:
Как правильно разгадывать капчу
>>»>’ data-sheets-userformat=’<"2":769,"3":<"1":0>,»11″:4,»12″:0>’> Заработок 💰 онлайн на вводе капчиВсё, что вам нужно — это правильно ввести текст с картинки (с капчи).
Вы получаете деньги 💵 за каждый ввод капчи.
Зарегистрироваться>>>
Как вы могли заметить, это непростое введение капчи в окошко, здесь необходимо переходить с ссылки на ссылку, и выбирать правильный ответ. Необходимо заметить, что именно такие задания оцениваются достаточно дорого. Логика здесь проще некуда – сложное задание – высокая плата, легкое задание – плата минимальная. Все предельно просто, разобраться в этой системе под силу даже новичку.
Резюме
Какой бы способ заработка в интернете вы для себя не выбрали, главное, чтобы он приносил вам желаемую прибыль, но начинать необходимо с самого простого, Постепенно приобретая опыт и знания, которые вам пригодятся для того, чтобы перейти на новую ступень, и получать еще больше путем выполнения более сложных заданий.
Как только вы изучаете область вашего заработка настолько тщательно, что ничего нового найти здесь не можете, попробуйте прейти в более сложную систему, которая вам еще неизвестна. Это не только интереснее, но и прибыльнее, а значит, вы сможете зарабатывать еще больше.
Как создать пассивный доход за 4 дня 💰
Марафон на котором 🔥 вы создадите пассивный доход в прямом эфире с нуля и узнаете конкретные стратегии инвестирования в квартиры, дома, гаражи, автомобили и даже доходные сайты
Как это работает: CAPTCHA
Сколько лет существует Хабр — столько лет на нём регулярно появляются посты про очередную капчу — будь то скрипт генерации картинки, новая идея капчи с котиками и тому подобное. Самый свежий пример того, что человек не совсем понимает — как же всё таки должна работать капча (см. текст поста и последние комментарии), но при этом делится своими заблуждениями с сообществом. Складывается ощущение, что капча — это такая terra incognita для большинства разработчиков — как для тех, кто просто прикручивает её к очередной форме в надежде на то, что она будет работать «из коробки», так и для тех кто придумывает капчи вроде тех, на которых надо выбрать картинку с котиком из нескольких фото.
Статья содержит полезную информацию для тех, кто использует капчу на своём сервере, вместо того чтобы довериться стороннему сервису вроде reCaptcha.
Captcha
Согласно своему определению, captcha — это автоматизированный публичный тест Тьюринга (тест который может пройти человек, но не компьютер). В статье я буду рассматривать свойтсва капчи на примере самого распространненого её вида — текста на картинке, хотя почти все написанное одинаково применимо к любому виду капчи.
Два главных свойства капчи
Любая капча должна обладать двумя свойствами, без которых она не будет работать:
Устойчивость к распознаванию — свойство, защищающее капчу от распознавания алгоритмом — например системой распознавания текста. Гарантирует то, что человек сможет прочитать текст на картинке, а компьютер нет.
Антипример: стандартная капча форумов phpBB 2.x таким свойством не обладала — из-за относительной простоты распознавания появились скрипты, которые спамили все подряд форумы вынуждая веб-мастеров менять капчу на более стойкую.
Устойчивость к угадыванию — свойство капчи, не позволяющее угадать её значение за небольшое число попыток (менее 1000). Если набор возможных значений капчи невелик, программе не составит труда угадать её подбором вместо распознавания.
Антипример: арифметическая капча вроде «1+2» (перебор чисел от 1 до 20 в скором времени даст результат).
Антипример: выбрать из нескольких картинок ту, на которой изображён котик.
Проверка капчи
Значение для проверки должно храниться на сервере, а не передаваться вместе с картинкой в браузер. Для сопоставления посетителя и правильного значения капчи необходимо использовать некий ключ, который передаётся вместе с капчей (идентификатор сессии, номер капчи и т.п.)
Антипример: если передавать саму капчу и значение для ее проверки (в том числе зашифрованное), то человеку достаточно один раз распознать такую капчу и далее использовать комбинацию «ответ»-«значение для проверки» в своём скрипте (по ссылке в начале поста как раз такой случай)
После проверки, сохраненное значение капчи необходимо удалить. Если не сделать этого, злоумышленник сможет использовать данное значение снова неограниченное число раз. Да, при обновлении страницы с формой обновляется и капча (либо при генерации формы, либо при генерации картинки), вот только скрипт может не загружать форму снова (надо упомянуть, что это не актуально если на сайте используются одноразовые csrf-токены для форм).
Антипример: гипотетическая форма логина, в которой достаточно один раз ввести капчу правильно, и далее подбирать пароль скриптом, избегая перегенерации капчи на сервере.
Пуленепробиваемая капча
Защита от перебора. Если ваша капча устойчива к распознаванию, но не очень устойчива к перебору (например на ней надо прочитать всего 3-4 цифры), желательно ограничить число неправильных ответов «с одного ip» / «для одного логина» / etc. Такие ограничения необходимо проверять ДО проверки самой капчи (то есть даже в случае правильно введенной капчи, при наличии ограничения она не должна считаться пройденной) иначе оно не будет препятствовать перебору.
Защита от DoS. При генерации капчи на своем сервере, надо понимать что это удобный вектор проведения DoS атак (которую, в отличие от DDoS, может устроить любой школьник). Для защиты можно ограничить число генерации капчи для одного ip, кэшированием капч и т.д. Подробнее про это
Защита от распознавания. Если вы выбираете капчу, или вдруг собираетесь написать её сами, желательно понимать какая капча более защищена от распознавания. Существуют готовые универсальные скрипты распознавания капчи, работающие по принципу OCR, а в случае если ваш сайт заинтересует спамеров есть риск, что будут использовать / писать скрипт конкретно под вашу капчу. Последнее правда относится больше к сайтам уровня Яндекс или vk, а вот вариант с защитой от банальных OCR желательно предусмотреть.
Защита от антигейтов. Если говорить формально, то капча как тест Тьюринга не обязана защищать вас от антигейтов, так как в этом случае её будет распознавать человек. С практической же точки зрения, этот вопрос весьма актуален и защищаться как-то надо.
Тут нет и не может быть «золотого стандарта» (ибо в таком случае антигейты внедрят его поддержку), поэтому вы вольны дополнять капчу любыми ухищрениями, чтобы сделать её распознавание через антигейт невозможным. Например:
— нестандартная капча (сбор паззла, поворот изображения, клик по области на фото и т.п.);
— кириллическая капча — самое простое решение, но имеет ряд минусов: подходит только для проектов с русскоязычной аудиторией, есть антигейты с поддержкой кириллицы;
— использование виртуальной клавиатуры рядом с капчей для ввода нестандартных символов или фигур (может быть неудобно пользователям мобильных);
Юзабилити
Не просите ввести капчу, если вы уже убедились, что перед вами человек. Тут однако, надо быть осторожным, чтобы форму нельзя было использовать скриптом неограниченное число раз после однократного ввода капчи человеком.
Пример: форма регистрации. Если я где-то регистрируюсь, и забыл ввести поле «почтовый индекс», но правильно ввёл капчу — не надо показывать мне новую. Потратьте 10 минут на то, чтобы сохранить где-то у себя, что вот эту конкретную форму сейчас пытается заполнить живой человек.
Для облегчения распознавания человеком: не используйте в капче одновременно буквы и цифры, не используйте одновременно прописные и строчные буквы, исключите похожие символы.
Отказ от использования капчи
Лучшая капча — отсутствие капчи. Там где можно отказаться от её использования — это надо сделать. Возможно для этого придется реализовать дополнительные лимиты и проверки, но пользователи скажут вам спасибо.
Но тут надо быть очень осторожным. Например: форма регистрации без капчи, с полем email на который приходит письмо с активацией. Без дополнительных средств защиты такую форму могут завалить «левыми» адресами, и ваш сайт включат в черные списки почтовые службы. В таком случае можно обходиться без капчи, но только если у вас есть другой рубеж защиты, вроде лимита по ip.
Кому то информация в этом топике покажется очевидной, но если бы я не сталкивался с примерами непонимания этих простых принципов в жизни, в том числе у опытных коллег-разработчиков, я бы не стал тратить время на написание этого текста.
Заработок на капче в интернете: ТОП-5 лучших сайтов и сколько можно заработать
Здравствуйте, дорогие подписчики. Сегодня я расскажу еще про один простейший способ заработка в интернете, который не требует каких-то специфических навыков, а разобраться в нем сможет даже новичок. В этой статье вы узнаете про заработок на капче, а так же ТОП-5 лучших сайтов, которые позволят вам получить первые деньги удалённо.
Что такое капча и за что здесь платят деньги?
Капча – это тест, который позволяет определить, кем является пользователь: человеком или программой. Используется он чаще всего для защиты от компьютерных программ. В далеком прошлом отсутствие капч, позволяло злоумышленниками подбирать пароли и получать доступ к сторонним аккаунтам.
Как правило, капча состоит из букв или цифр, которые вам необходимо ввести на клавиатуре. Бывают капчи на которых нужно составить картинку в единое целое или подтвердить, то что вы человек а не робот. Все вы хотя бы раз сталкивались с ними.
Думаю теперь понятно, что такое капча, теперь я расскажу, за что же здесь платят деньги. А платят здесь, за то, что вы разгадываете эту самую капчу. Например, ваш покорный слуга часто платит специальным сервисам, о которых я напишу ниже, чтобы они сами разгадывали капчу. Таким образом, я экономлю свое время и даю возможность зарабатывать другим людям.
Плюсы и минусы
У каждого способа заработка есть свою как плюсы так и минусы. Далее я постарался описать наиболее заметные и значимые.
ТОП-5 лучших сайтов для заработка на капче
Теперь после того как вы узнали основные понятия а так же плюсы и минусы данного способа заработка. Я расскажу о самих сервисах, сначала как обычно списком, а потом опишу каждый из них более подробно.
1. Kolotibablo
Kolotibablo – это очень известный сервис по заработку на вводе капчи для исполнителей. Все капчи он получает с Anti-captcha, который сделан специально для заказчиков.
2. RuCaptcha
RuCaptcha – это еще один из самых популярных в сервисов Рунете, по заработку на вводе капчи. Для того чтобы начать зарабатывать, нужно зарегистрироваться и в правом верхнем углу выбрать вкладку “Я работник”.
3. 2Captcha
2Captcha — это англоязычная версия Рукапчи. Интерфейс полностью идентичен только на английском языке. Сервис полностью рассчитан на зарубежную аудиторию поэтому оплата здесь идет в долларах.
4. Капча от Advego
Капча от Advego – не все знают, но помимо заработка на копирайтинге, в Адвего есть возможность зарабатывать на распознавание капчи. Конечно, заданий пока не так много как на описанных выше сервисах, но тем не менее они есть. Для того чтобы посмотреть задания просто переходите в верхнем меню в разделе «Распознание капч».
5. MegaTypers
MegaTypers – это англоязычный сайт, который так же позволяет зарабатывать на разгадывание капч. Для регистрации укажите код: F8UQ. Сразу стоит сказать если будете переводить сайт со встроенным переводчиком сайт он будет отображаться с ошибками.
Сколько можно заработать
Думаю, вас наверняка интересует, сколько можно заработать на вводе капчи. В некоторых источниках пишут, что заработок начинается от 1 руб за капчу – не верьте это обман. В среднем за 1000 капч вы заработаете от 20-50 рублей.
Для того чтобы разгадать такое количество капч новичку нужно примерно – 2-3 часа. Получается за 2-3 часа, вы заработаете – 20-50 руб. Допустим, вы будете тратить на это по 4 часа в день, и таким образом ваш заработок составит от 40 до 100 руб в день. Итого работая по 4 часа в день, по самой минимальной ставке ваш доход составит:
40*30 (дней)= 1200 руб./в месяц
По-моему все лучше, чем в пустую просто просиживать штаны в социальных сетях. К слову сказать, опытный работник может заработать гораздо больше, поскольку он получает более прибыльные задания из за высокого рейтинга.
Как увеличить доход
Для того чтобы увеличить ваш заработок на вводе капчи дам вам несколько полезных советов:
Как вы уже, наверное, поняли из выше причисленного, много денег на капче вы не заработаете, но зато, если вы новичок и больше ничего делать не умеете, стоит попробовать. На этом все. Как всегда желаю вам море позитива и хорошего настроения.
Если данная информация была полезна для вас и вам понравилась статья про то, что такое капча и топ лучших сервисов, которые позволяют на ней зарабатывать. Пишите свои комментарии и предложения. С уважением Юрий, до встречи на страницах блога Iprodvinem.
Более 5 лет я работаю удаленно, занимаюсь рекламой и продвижением в интернете, создаю источники дохода онлайн. Люблю путешествовать, автоматизировать процессы и генерировать новые идеи. Изучаю иностранные языки, инвестирование, блогинг и продажу инфо-товаров.
С 2019 года активно занимаюсь развитием блога в интернете и создаю источники пассивного дохода, занимаюсь инвестициями. Постоянно развиваюсь в этой сфере и всегда стараюсь сделать продукт лучше, чем у конкурентов.
Ломаем капчу
Гуляя по просторам интернета, зашёл на один высокопосещаемый древний сайт рунета. Для того, чтобы скачать файлик с этого сайта, нужно угадать вот такую капчу:
В очередной раз видя картинку с цифрами — решился. В голове уже давно проносились мысли, сломать какую-нибудь капчу 🙂
Ставлю себе задачу: Написать скрипт, который будет расшифровывать показанную капчу и выплевывать драгоценные циферки.
Название сайта специально не привожу — сами догадаетесь 🙂
Анализируем картинку
Для начала надо просмотреть как можно больше таких капч, чтобы выявить сходства/различия, какие-то закономерности. Для этих целей я скачал порядка 50 капч. Среди них можно выбрать основные, которые содержат максимум различий:
Вообще люблю всматриваться в числа, так как в своё время много времени посвятил изучению математики 🙂
Ищем решение
В голове в течение получаса прокручиваются варианты, понятно одно: картинку желательно обрезать, и поскольку используются шрифты одни и те же, и они никак не меняются, можно использовать «отпечатки«. Под этим термином я понимаю то, что цифры у нас уже где-то лежат в базе, и нам нужно сверять их с картинкой.
Реализация
Получаем такую картинку:
php-код вы можете просмотреть в аттаче (см. ссылку ниже)
Итого получаем:
Но в некоторых случаях (
5%) всё же могут оставаться вот такие шумы:
Правда они нам всё равно не помешают 🙂 Т.к. их цвет уже не подходит под цвет цифр.
Результаты
Тестирование
за 19 секунд.
Это примерно 10 капч в секунду.
Из этих 200 не было выявлено ни одной ошибки, скрипт отлично отработал 🙂
Итоги
Я написал класс CapCrack, который разбирает капчу.
Если есть желание более подробно разобраться в алгоритме, или протестировать на своём ПК, можете взглянуть на код: cap_crack.zip
На этом успехе я не остановился и решил попробовать написать скрипт для скачки файлов с сайта, в автоматическом режиме, но это уже совсем другая история 🙂 достойная отдельной статьи…
Окей, Google: как пройти капчу?
Здравствуйте. Меня зовут Ибадов Илькин, я студент Уральского федерального университета.
В данной статье я хочу рассказать о своем опыте автоматизированного решения капчи компании «Google» — «reCAPTCHA». Хотелось бы заранее предупредить читателя о том, что на момент написания статьи прототип работает не так эффективно, как может показаться из заголовка, однако, результат демонстрирует, что реализуемый подход способен решать поставленную задачу.
Наверное, каждый в своей жизни сталкивался с капчей: ввести текст из картинки, решить несложное выражение или сложное уравнение, выбрать автомобили, пожарные гидранты, пешеходные переходы… Защита ресурсов от автоматизированных систем необходима и играет немалую роль в безопасности: капча защищает от DDoS-атак, автоматических регистраций и постингов, парсинга, предотвращает от спама и подбора паролей к учетным записям.
Форма регистрации на «Хабре» могла бы быть и с такой капчей.
С развитием технологий машинного обучения эффективность работы капчи может оказаться под угрозой. В данной статье я описываю ключевые моменты работы программы, которая может решить проблему ручного выбора изображений в «Google reCAPTCHA» (к радости, пока не всегда).
Чтобы пройти капчу, необходимо решить такие задачи как: определение требуемого капчей класса, обнаружение и классификация объектов, обнаружение ячеек капчи, имитация деятельности человека в решении капчи (движение курсором, клик).
Для поиска объектов на изображении используются обученные нейронные сети, которые можно загрузить на компьютер и распознавать объекты на изображениях или видео. Но для решения капчи недостаточно одного лишь обнаружения объектов: необходимо определить положение ячеек и узнать, какие именно ячейки требуется выбрать (или не выбирать ячейки вообще). Для этого используются средства компьютерного зрения: в данной работе это известная библиотека «OpenCV».
Для того, чтобы найти объекты на изображении, во-первых, требуется само изображение. Я получаю скриншот части экрана при помощи модуля «PyAutoGUI» с достаточными для обнаружения объектов размерами. В оставшейся части экрана я вывожу окна для отладки и мониторинга процессов программы.
Обнаружение объектов
Обнаружение и классификация объектов — это то, чем занимается нейросеть. Библиотека, которая позволяет нам работать с нейронными сетями называется «Tensorflow» (разработана компанией «Google»). Сегодня к Вашему выбору есть множество различных обученных моделей на разных данных, а значит, что все они могут возвращать различный результат обнаружения: какие-то модели будут лучше обнаруживать объекты, а какие-то хуже.
В данной работе я использую модель «ssd_mobilenet_v1_coco». Выбранная модель обучена на наборе данных «COCO », в котором выделены 90 различных классов (от людей и автомобилей до зубной щетки и расчески). Сейчас есть и другие модели, которые обучены на тех же данных, но с другими параметрами. Кроме того, данная модель имеет оптимальные параметры производительности и точности, что немаловажно для настольного компьютера. В источнике сообщается, что время обработки одного кадра размером 300 x 300 пикселей составляет 30 миллисекунд. На «Nvidia GeForce GTX TITAN X».
Результатом работы нейросети является набор массивов:
Выбранная модель позволяет обнаруживать объекты из 90 классов в реальном времени.
Обнаружение ячеек
«OpenCV» предоставляет нам возможность оперирования сущностями, которые называются «контуры»: Их можно обнаружить одной лишь функцией «findContours()» из библиотеки «OpenCV». На вход такой функции необходимо подать бинарное изображение, которое можно получить функцией порогового преобразования:
Установив крайние значения параметров функции порогового преобразования, мы еще и избавляемся от различного рода зашумлений. Также, для минимизации количества лишних мелких элементов и шумов, можно применить морфологические преобразования: функции эрозии (сжатия) и наращивания (расширения). Данные функции так же входят в состав «OpenCV». После преобразований отбираются контуры, число вершин у которых равно четырем (предварительно выполнив над контурами функцию аппроксимации).
В первом окне результат порогового преобразования. Во втором — пример морфологического преобразования. В третьем окне уже отобраны ячейки и шапка капчи: выделены цветом программно.
После всех преобразований в конечный массив с ячейками всё равно попадают контуры, которые не являются ячейками. Для того, чтобы отсеять ненужные шумы, я произвожу отбор по значениям длины (периметра) и площади контуров.
Экспериментально выявлено, что величины интересуемых контуров лежат в диапазоне от 360 до 900 единиц. Данная величина подобрана на экране с диагональю 15,6 дюймов и разрешением 1366 x 768 пикселей. В дальнейшем, указанные величины контуров можно вычислять в зависимости от размера экрана пользователя, но в создаваемом прототипе такой привязки нет.
Главное преимущество выбранного подхода к обнаружению ячеек заключается в том, что нам всё равно, как будет выглядеть сетка и сколько всего будет показано ячеек на странице капчи: 8, 9 или 16.
На изображении показаны разновидности сеток капчи. Обратите внимание, что расстояние между ячейками — разное. Отделить ячейки друг от друга позволяет морфологическое сжатие.
Дополнительным преимуществом обнаружения контуров является и то, что «OpenCV» позволяет нам обнаружить их центры (они нужны нам для определения координат перемещения и клика мышкой).
Отбор ячеек для выбора
Имея массив с чистыми контурами ячеек капчи без лишних контуров шумов, мы можем в цикле пройти по каждой ячейке капчи («контуру» в терминологии «OpenCV») и проверить её на факт пересечения с обнаруженным «боксом» объекта, полученным от нейросети.
Для установления этого факта, применялся перевод обнаруженного «бокса» в аналогичный ячейкам контур. Но такой подход оказался неправильным, потому что случай, когда объект располагается внутри ячейки, не считается за пересечение. Естественно, что такие ячейки не выделялись в капче.
Проблема была решена перерисовкой контура каждой ячейки (с белой заливкой) на черный лист. Аналогичным образом было получено бинарное изображение рамки с объектом. Возникает вопрос — как теперь установить факт пересечения ячейки с закрашенной рамкой объекта? В каждой итерации массива с ячейками, над двумя бинарными изображениями производится операция дизъюнкци (логическое или). В её результате мы получаем новое бинарное изображение, в котором будут выделены пересекаемые участки. То есть, если такие участки имеются — значит ячейка и рамка объекта пересекаются. Программно такую проверку можно сделать методом «.any()»: она вернет «True» если в массиве имеется хотя бы один элемент равный единице или «False», если единиц нет.
Функция «any()» для изображения «Logical OR» в данном случае вернет истину и тем самым установит факт пересечения ячейки с областью рамки обнаруженного объекта.
Управление
Управление курсором в «Python» становится доступным благодаря модулю «win32api» (однако позднее выяснилось, что уже импортированный в проект «PyAutoGUI» тоже умеет это делать). Нажатие и отпускание левой кнопки мыши, а также перемещение курсора в нужные координаты производится соответствующими функциями модуля «win32api». Но в прототипе они были завернуты в пользовательские функции для того, чтобы обеспечить визуальное наблюдение за движением курсора. Это негативно влияет на производительность и было реализовано исключительно для демонстрации.
В процессе разработки возникла идея выбора ячеек в случайном порядке. Возможно, что это не имеет практического смысла (по объяснимым причинам «Google» не дает нам комментариев и описания механизмов работы капчи), однако перемещение курсора по ячейкам в хаотичном порядке выглядит забавнее.
На анимации результат «random.shuffle(boxesForSelect)».
Распознавание текста
Для того, чтобы объединить все имеющиеся наработки в единое целое, требуется еще одно звено: блок распознавания требуемого от капчи класса. Мы уже умеем распознавать и отличать разные объекты на изображении, мы умеем кликать на произвольные ячейки капчи, однако мы не знаем на какие именно ячейки нужно нажать. Одно из направлений решения данной проблемы — распознавать текст из шапки капчи. Первым делом я попробовал реализовать распознавание текста при помощи средства оптического распознавания символов «Tesseract-OCR».
В последних версиях имеется возможность установки языковых пакетов прямо в окне программы установки (раньше это делалось вручную). После установки и импорта «Tesseract-OCR» в свой проект, я попытался распознать текст из шапки капчи.
Результат, к сожалению, меня совершенно не впечатлил. Я решил, что текст в шапке выделен жирным и слитным начертанием не просто так, поэтому я попробовал применить к изображению различные преобразования: операции бинаризации, сужения, расширения, размытия, искажения и изменения размеров. К сожалению, это не дало хорошего результата: в лучших случаях определялась лишь часть букв класса, а когда результат получался удовлетворительным, я применял эти же преобразования, но для других шапок (с другим текстом), и результат снова получался плохим.
Распознавание шапки с «Tesseract-OCR» обычно приводило к неудовлетворительным результатам.
Нельзя однозначно сказать, что «Tesseract-OCR» плохо распознает текст, это не так: с другими изображениями (не шапками капчи) инструмент справляется значительно лучше.
Я решил воспользоваться сторонним сервисом, который бесплатно предлагал API для работы с ним (требуется регистрация и получение ключа на электронный адрес). В сервисе установлено ограничение на 500 распознаваний в день, однако за весь период разработки никаких проблем с ограничениями у меня не возникло. Напротив: я подавал в сервис оригинальное изображение шапки (не применяя абсолютно никаких преобразований) и результат меня приятно впечатлил.
Слова от сервиса возвращались практически без ошибок (обычно даже те, которые написаны мелким шрифтом). Более того, они возвращались в очень удобном формате — разбитые по строкам символами переноса строки. Во всех изображениях меня интересовала только вторая строка, поэтому я напрямую обращался к ней. Это не могло не радовать, так как такой формат освободил меня от необходимости подготавливать строку: мне не пришлось резать начало или конец всего текста, делать «тримы», замены, работать с регулярными выражениями и совершать прочие операции над строкой, направленные на выделение одного слова (а иногда двух!) — приятный бонус!
Сервис, который распознавал текст, практически никогда не ошибался с названием класса, но я всё равно решил оставить часть названия класса для возможной ошибки. Это необязательно, но я заметил, что «Tesseract-OCR» в некоторых случаях неправильно распознавал конец слова начиная с середины. Кроме того, такой подход исключает ошибку приложения, в случае длинного названия класса или названия из двух слов (в таком случае сервис вернет не 3, а 4 строки, и я не смогу найти во второй строке вхождение полного наименования класса).
Сторонний сервис хорошо распознает наименование класса без каких-либо преобразований над изображением.
Слияние наработок
Получить текст из шапки — мало. Его нужно сопоставить с идентификаторами имеющихся классов модели, потому что в массиве классов нейронная сеть возвращает именно идентификатор класса, а не его название, как это может показаться. При обучении модели, как правило, создается файл, в котором сопоставляются названия классов и их идентификаторы (он же «label map»). Я решил поступить проще и указать идентификаторы классов вручную, так как капча всё равно требует классы на русском языке (к слову, это можно изменить):
Все описанное выше, воспроизводится в основном цикле программы: определяются рамки объекта, ячейки, их пересечения, производятся перемещения курсора и клики. При обнаружении шапки производится распознавание текста. Если нейронная сеть не может обнаружить требуемый класс, то совершается произвольный сдвиг изображения до 5 раз (то есть меняются входные в нейросеть данные), и если обнаружения по прежнему не произошло, то выполняется клик на кнопку «Пропустить/Подтвердить» (её положение обнаруживается аналогично обнаружению ячеек и шапки).
Если Вы часто решаете капчу, Вы могли наблюдать картину, когда выбранная ячейка пропадает, а на её месте медленно и не спеша появляется новая. Поскольку прототип запрограммирован на моментальный переход к следующей странице после выбора всех ячеек, мной было принято решение делать 3 секундные паузы, чтобы исключить нажатия на кнопку «Далее» без обнаружения объектов на медленно появляющейся ячейке.
Статья была бы не полной, если бы в ней не было описания самого главного — галочки успешного прохождения капчи. Я решил, что с такой задачей может справиться простое сравнение по шаблону. Стоит отметить, что сравнение по шаблону — далеко не самый лучший путь для обнаружения объектов. Мне, например, пришлось выставить чувствительность обнаружения на значение «0.01», чтобы функция перестала во всем видеть галочки, но видела её, когда галочка действительно есть. Аналогичным образом я поступил с пустым чекбосом, который встречает пользователя и с которого начинается прохождение капчи (там проблем с чувствительностью не было).
Результат
Результатом всех описанных действий стало приложение, работоспособность которого я протестировал на «Тостере»:
Стоит признать, что ролик снят не с первой попытки, так как я нередко сталкивался с необходимостью выбора классов, которые отсутствуют в модели (например, пешеходные переходы, лестницы или витрины).
«Google reCAPTCHA» возвращает сайту некую величину, показывающую насколько «Вы робот», а администраторы сайта, в свою очередь, могут установить порог прохождения этой величины. Возможно, что на «Тостере» был установлен относительно низкий порог прохождения капчи. Это объясняет достаточно легкое прохождение капчи программой, несмотря на то, что она дважды ошиблась, не увидев светофор из первой страницы и пожарный гидрант из четвертой страницы капчи.
Помимо «Тостера», были проведены эксперименты на официальной демонстрационной странице «reCAPTCHA». В результате, замечено, что после множественных ошибочных обнаружений (и необнаружений), пройти капчу становится крайне затруднительно даже человеку: требуются новые классы (вроде тракторов и пальм), в выборках появляются ячейки без объектов (почти монотонные цвета) и резко увеличивается количество страниц, которые нужно пройти.
Это было особенно заметно, когда я решил попробовать кликать по случайным ячейкам в случае необнаружения объектов (ввиду их отсутствия в модели). Поэтому можно точно утверждать, что случайные клики не приведут к решению задачи. Чтобы избавиться от такого «завала» экзаменатором, производился реконнект Интернет-соединения и очистка данных браузера, потому что пройти такой тест становилось невозможным — он был практически бесконечным!
При сомнении в Вашей человечности возможен и такой исход.
Развитие
Если статья и приложение вызовет интерес у читателя, я с удовольствием продолжу его реализацию, тесты и дальнейшее описание в более детальном виде.
Речь идет об обнаружении классов, которые не входят в состав текущей сети, это значительно улучшит эффективность работы приложения. На данный момент имеется острая необходимость в распознавании как минимум таких как классов как: пешеходные переходы, витрины и дымовые трубы — я расскажу, как можно переобучить модель. Во время разработки я составил небольшой список наиболее часто встречающихся классов:
Другой способ улучшения качества обнаружения объектов — изменение входного в нейросеть изображения: на видео можно увидеть, что при необнаружении объектов я несколько раз делаю произвольное смещение изображения (в пределах 10 пикселей по горизонтали и вертикали), и зачастую такая операция позволяет увидеть объекты, которые ранее не были обнаружены.
К выявлению необнаруженных объектов приводит и увеличение изображения из маленького квадрата в большой (до 300 x 300 пикселей).
Слева объекты не обнаружены: оригинальный квадрат стороной 100 пикселей. Справа автобус обнаружен: увеличенный квадрат до 300 x 300 пикселей.
Еще одним интересным преобразованием можно отметить удаление белой сетки над изображением средствами «OpenCV»: возможно, что пожарный гидрант на видео не обнаружился именно по этой причине (такой класс присутствует в нейронной сети).
Слева оригинальное изображение, а справа — измененное в графическом редакторе: сетка удалена, ячейки перемещены друг к другу.
Итоги
Данной статьей я хотел рассказать Вам о том, что капча, вероятно, не самая лучшая защита от ботов, и вполне возможно, что в скором времени возникнет потребность в новых средствах защиты от автоматизированных систем.
Разработанный прототип, даже будучи в незавершенном состоянии, демонстрирует, что при наличии требуемых классов в модели нейронной сети и применении преобразований над изображениями, можно достигнуть автоматизации процесса, который автоматизированным быть не должен.
Также, я хотел бы обратить внимание компании «Google» на то, что помимо способа обхода капчи, описанного в данной статье, имеется еще и иной способ, в котором производится транскрибация аудио-образца. На мой взгляд, уже сейчас необходимо принимать меры, связанные с улучшением качества программных продуктов и алгоритмов против роботов.
Из содержания и сути материала может показаться, что я не люблю «Google» и в частности «reCAPTCHA», однако это далеко не так, и, если следующей реализации быть — я расскажу почему.
Разработано и продемонстрировано в целях повышения уровня образования и улучшения методов, направленных на обеспечение безопасности информации.