Капча на чат в Телеграмме

Как обойти капчу на примере самого используемого в мире плагина для WordPress Really Simple Captcha. Обход капчи на python довольно тривиальная задача, но получится ли это сделать за 15 минут?

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

Я прочел отличную книгу: Deep Learning for Computer Vision with Python, которую написал Adrian Rosebrock. В этой книге Адриан описывает способ, которым он взломал капчу на сайте E-ZPass New York используя машинное обучение:

обход капчи на python

У Адриана не было доступа к исходному коду, генерирующему капчу. Чтобы обучить модель, ему пришлось скачать тысячи картинок и вручную разметить все надписи.

Как сделать чат-бот с капчей

Но предположим, что мы хотим обойти капчу, к исходному коду которой у нас есть доступ.

Я зашел на WordPress.org Plugin Registry и ввел в поиске “captcha”. Первый результат назывался “Really Simple CAPTCHA” и установлен более миллиона раз.

really simple captcha

И самое крутое — он с открытыми исходниками! Раз у нас есть алгоритм, генерирующий картинку, его, должно быть, не сложно обойти. Чтобы было сложнее, ограничим себе время. Можно ли уложиться в 15 минут? Давайте попробуем!

Важное замечание: Это ни в коем случае не критика плагина “Really Simple CAPTCHA” или его автора. Сам автор указал, что плагин более не является надежным и рекомендует использовать что-нибудь другое. Это просто небольшой интересный челлендж. Если вы один из того миллиона пользователей, установивших его, то возможно вам стоит сменить данный плагин на что-нибудь другое

Челлендж: обход капчи на Python

Для начала посмотрим на изображения, создаваемые Really Simple CAPTCHA. На демке видим это:

demo

Итак, капча состоит из четырех букв. Убедимся в этом, посмотрев исходники:

Еще по теме:  Как в Телеграмм вернуть панель закрепленных сообщений

public function __construct() < /* Characters available in images */ $this->chars = ‘ABCDEFGHJKLMNPQRSTUVWXYZ23456789’; /* Length of a word in an image */ $this->char_length = 4; /* Array of fonts. Randomly picked up per character */ $this->fonts = array( dirname( __FILE__ ) . ‘/gentium/GenBkBasR.ttf’, dirname( __FILE__ ) . ‘/gentium/GenBkBasI.ttf’, dirname( __FILE__ ) . ‘/gentium/GenBkBasBI.ttf’, dirname( __FILE__ ) . ‘/gentium/GenBkBasB.ttf’, );

Да, действительно капча создается случайным образом из четырех букв или цифр с разными шрифтами. Символы “O”, “0”, “I”, “1” не используются, чтобы пользователь не путался. Остается 32 символа, которые нужно распознать. Не проблема!

Прошло: 2 минуты

Набор инструментов для решения капчи

Перед тем, как решать задачу, перечислим инструменты, которыми мы будем пользоваться:

Python 3

Python — простой и мощный язык программирования с отличными библиотеками для машинного обучения и машинного зрения.

OpenCV

Популярная библиотека для обработки изображений с поддержкой алгоритмов машинного зрения. Мы будем использовать ее для предварительной обработки капчи. OpenCV написана на C++, но все ее функции вызываются из питона, чем мы и будем пользоваться.

Keras

Фреймворк для машинного обучения, написанный на питоне. С его помощью легко строить, обучать и использовать нейронные сети. Требует минимального количества кода.

TensorFlow

Гугловская библиотека для машинного обучения. Мы будем пользоваться только Keras, но сам Keras в качестве бэкенда использует TensorFlow, поэтому его тоже придется установить.

Итак, обратно к задаче!

Создаем датасет

Чтобы собрать любую модель машинного обучения, требуются обучающие данные. Нам понадобятся данные, выглядящие следующим образом:

input-output

Так как у нас есть исходный код плагина, создающего капчу, мы можем его использовать, чтобы нагенерировать 10,000 изображений, и для каждого будет известна расшифровка.

Пару минут повозившись с кодом и добавив в него простой цикл ‘for’, я получил папку с обучающими данными — 10,000 PNG файлов, в названии которых указан правильный ответ:

CAPTCHA

В этом и только в этом месте я не дам вам рабочий пример кода. Мы делаем это в образовательных целях, и мне не хочется, чтобы вы заспамили реальные сайты, работающие на WordPress. Вместо этого, я дам ссылку на 10,000 изображений, сделанных мной, чтобы вы могли повторить мой результат.

Еще по теме:  Бот в Телеграмм где можно прочитать переписки другого человека в Телеграмме

Обход капчи на python: упрощаем задачу

Теперь, когда есть обучающие данные, мы могли бы их использовать напрямую, обучив по ним нейросеть:

Deep CNN

С достаточным количеством данных, этот подход мог бы даже сработать. Но можно сделать решение капчи на python проще. Чем проще задача, тем меньше нам понадобится обучающих данных и вычислительных ресурсов, чтобы ее решить. У нас ведь всего лишь 15 минут!

К счастью, капча состоит всего из четырех символов. Если как-нибудь разделить ее так, чтобы каждая буква была отдельным изображением, то можно будет обучить нейросеть распознавать по одному символу за раз:

Training CNN

У меня нет времени разрезать каждую из 10,000 картинок в фотошопе. Это бы заняло несколько дней, а у меня осталось всего 10 минут. И нельзя просто автоматически разделить все картинки на 4 одинаковых куска. Потому что алгоритм задает символам случайное горизонтальное положение:

Символы сдвинуты случайным образом, чтобы изображение было сложнее разделить.

К счастью, это всё же можно автоматизировать. При обработке изображений часто приходится находить связные области из пикселей одного цвета. Границы таких областей называют контурами. В OpenCV есть встроенная функция findContours(), которую мы используем, чтобы найти связные области.

Итак, начнем с изображения капчи:

captcha image

Преобразуем изображение в бинарное (это называется thresholding), чтобы было легче найти связные области:

thresholding

Далее, используем функцию findContours(), чтобы выделить связные группы пикселей, состоящие из одного цвета:

findContours

Теперь, нужно просто сохранить каждый прямоугольник как отдельное изображение. И, так как мы знаем последовательность символов в каждом изображении, можно подписать каждый прямоугольник своим символом при сохранении.

Погодите-ка! Тут есть проблемка! Буквы в капче иногда накладываются друг на друга:

problem

И наш алгоритм отмечает их как одну:

problem 2

Если проблему не решить, то у нас будут плохие обучающие данные. Это нужно исправить, потому что с такими данными мы обучим модель распознавать эти две слившиеся буквы как одну.

Простой выход из этой ситуации сказать, что если какой-то прямоугольник в ширину сильно больше, чем в высоту, то это нужно считать двумя буквами. В этом случае, прямоугольник можно просто разрезать посередине и считать, что это два прямоугольника:

Еще по теме:  Алкоголь от михалыча Телеграмм канал отзывы

problem solving

Капча на чат в телеграмме

Будь в курсе последних новостей из мира гаджетов и технологий

iGuides для смартфонов Apple

Как использовать ChatGPT в Telegram? Подборка удобных чат-ботов

Александр

Александр Кузнецов — 22 марта 2023, 21:40

Компания OpenAI недавно предоставила сторонним разработчикам доступ к API ChatGPT, благодаря чему они начали встраивать этот нейросетевой бот в свои проекты. Для телеграм-ботов такая возможность пришлась как нельзя кстати, ведь гораздо проще общаться с искусственным интеллектом не на сайте, а в привычном мессенджере.

OpenAI взимает плату с тех, кто использует API ChatGPT, поэтому телеграм-боты с этой нейросетью обычно монетизируются за счёт своих пользователей. Впрочем, есть бесплатные лимиты, и хотя они невелики, можно использовать несколько ботов, и этого будет вполне достаточно для ежедневной обработки десятков сложных запросов.

Телеграм-боты используют доступную разработчикам инфраструктуру ChatGPT, поэтому общение с ними ничем не отличается от переписки с нейросетью на официальном сайте ChatGPT. Поддерживаются различные языки, в том числе русский, но наиболее точные и подробные результаты обычно получаются на английском. Стоит понимать, что ChatGPT иногда выдаёт непроверенные и недостоверные, поэтому не стоит полагаться на него без более тщательной проверки, особенно если речь идёт об ответах на какие-то важные вопросы.

Лучшие чат-боты с ChatGPT в Telegram:

  • ChatGPTBot: 20 000 токенов в день бесплатно, можно докупать примерно по 50 копеек за 1 000 токенов
  • ChatGPT : 10 000 токенов в день бесплатно, подписка без ограничений стоит 299 рублей в месяц
  • GPT Chat bot | Нейросеть: 20 000 токенов в неделю бесплатно, подписка без ограничений стоит 95 рублей в месяц
  • ChatGPT Bot: 50 000 токенов в неделю бесплатно, подписка без ограничений стоит 499 рублей в месяц
  • ChatGPT |На русском : полностью бесплатно, разработчик принимает добровольные пожертвования
  • ChatGPT 3.5 | Telegram Bot: 20 запросов в день бесплатно, за 5 долларов в месяц лимит увеличивается до 100 запросов в день

У некоторых телеграм-ботов есть дополнительные возможности. К примеру, ChatGPT |На русском умеет озвучивать тексты, в том числе на русском языке, а ChatGPTBot может рисовать изображения по текстовым описаниям.

Источник: www.iguides.ru

Рейтинг
( Пока оценок нет )
Загрузка ...