Я уже рассказывал про свой опыт в области распознавания капчи. Разумеется, кроме чисто академического интереса у меня был и материальный - иногда приходится скачивать несколько файлов с обменника, а ждать паузу и вводить капчи я не люблю. Поэтому и пользуюсь программой для закачек под названием 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 передаются через переменные окружения.
eimrine
Правильно ли я помню, что этой программе уже лет 15? Когда-то, во времена котиков и собачек на рапидшаре, такая программа мне здорово помогала тянуть всякую редкую музыку, это был редкий пример капчи которая для меня просто неподъёмная.
Dinxor Автор
Да, та самая программа. Она не обновляется уже лет 10, но за счёт подключаемых плагинов до сих пор используется.