Как стать автором
Обновить

Сервис распознавания капч, который больше не нужен

Время на прочтение3 мин
Количество просмотров8.1K

Я уже рассказывал про свой опыт в области распознавания капчи. Разумеется, кроме чисто академического интереса у меня был и материальный - иногда приходится скачивать несколько файлов с обменника, а ждать паузу и вводить капчи я не люблю. Поэтому и пользуюсь программой для закачек под названием Universal Share Downloader, или сокращённо USD. Недавно сервис обмена файлами Turbobit в очередной раз внёс изменения в свой сайт, в результате чего моя программа оказалась бесполезной. Теперь я могу рассказать о сервисе распознавания поподробнее, уже не опасаясь приблизить этот момент. Может, рост числа бесплатных скачиваний в результате использования сервиса уже повлиял. Или это просто традиционная июньская пакость от обменника - то капчу поменяют, то скорость скачивания урежут.

Ну как так то?
Ну как так то?

У USD есть активное сообщество, в котором разрабатываются и распространяются плагины для поддержки различных файлообменников. Там я выкладывал свою программу для распознавания капчи, чтобы облегчить процесс скачивания всем желающим. Версии с Тессерактом, потом с нейросетью и окончательный вариант - с использованием веб-сервиса на Heroku. Капча представляла собой довольно известную в прошлом Kohana, сейчас такая больше нигде не используется и спамерам неинтересна. Отправка файла осуществлялась РОST запросом. Экспериментальная клиентская часть была написана на Пайтоне, потом для сокращения размера и помещения в сборку я переписал её на AutoIt. Это вызвало проблемы с защитником в Windows 10 - он не оценил идею отправлять файлы куда-то в интернет (а может, совпали какие-нибудь сигнатуры) и стал её блокировать. И тут меня осенило: лучшая программа - это её отсутствие. Я связался с разработчиком плагина и предложил поместить отправку файла на распознавание прямо в плагин Турбобита. Правда, для этого пришлось добавить в сервис возможность приёма файлов в виде Base64 текста.

Технически сервис представлял собой Flask приложение на Heroku, распознавание с помощью Keras и Tensorflow. Мне удалось уложиться в ограничения бесплатного использования - потребление дискового пространства составило 430 Мб. В самом начале принимались файлы, по которым можно было судить о номере попытки - в случае неудачи следующий файл шёл с другим именем. Я пытался вести статистику, но периодически прилетали серии с не зависящими от очерёдности именами - возможно, кто-то использовал сервис для разметки своих файлов. С отправкой капч в виде Base64 имена файлов стали недоступны, и я стал просто считать капчи. Сохранение файлов реализовал следующим образом: картинка и результат добавляются в словарь, при достижении нужного количества в памяти создается zip архив и капчи переносятся туда с добавлением к имени метки времени, затем архив отправляется на хранение. Бесплатный сервис на Heroku автоматически перезапускается примерно раз в сутки или при бездействии в течение 30 минут. При таком подходе часть капч теряется в случае перезапуска сервиса, но задачи сохранить абсолютно всё и не ставилось. Потом добавил возможность просмотра последней распознанной картинки. Правда, из-за того что страница с текстом и картинка запрашивались не одновременно, иногда можно было увидеть капчу, совсем не соответствующую тексту. Решил не исправлять, всё равно кроме меня никто эту страницу не смотрит. В какой-то момент добавил возможность просмотра собственного IP адреса - почему бы и нет, когда уже есть постоянно работающий сервис?

Два варианта интерфейса для отладки
Два варианта интерфейса для отладки

Сервис проработал около 8 месяцев, количество распознаваемых файлов за сутки колебалось от полутора до трех тысяч, были всплески до шести. Тренировал нейросеть несколько раз на 15000 файлах, последний раз в январе с учетом 250 обнаруженных за месяц ошибок. Логи я не сохранял, сами файлы в целях контроля точности можно было паковать в архивы и отправлять на Cloudinary. Включал сохранение два раза на пару месяцев, теперь у меня есть полтора гигабайта распознанных капч - чуть более 300 тысяч файлов. Судя по сохраняемым именам, явных ошибок там всего 13 штук, неявных при выборочном просмотре обнаружить не удалось. По-моему, неплохая точность распознавания, сам такого не ожидал.

Обнаруженные ошибки распознавания
Обнаруженные ошибки распознавания

Код программы доступен на GitHub, настройки Heroku и ключи авторизации Cloudinary передаются через переменные окружения.

Теги:
Хабы:
+4
Комментарии2

Публикации

Изменить настройки темы

Истории

Работа

Python разработчик
132 вакансии
Data Scientist
60 вакансий

Ближайшие события