предисловие
Существует проблема, которой нельзя избежать при написании поисковых роботов, и это код подтверждения. Например, если вы сначала не войдете в систему, вы не сможете просканировать данные содержимого внутри. Код подтверждения является мерой для веб-сайт для отправки краулером.С развитием технологий проверочный код становится все сложнее, и работа краулера становится все сложнее, поэтому в этот раз я объясню, как идентифицировать проверочный код; (звучит очень громко)
1) Графический проверочный код
Графический проверочный код должен быть самым простым типом проверочного кода.Этот проверочный код является самым ранним и наиболее распространенным.Общее правило состава - 4 буквы или цифры или смешанный состав;
2) Слайд-код подтверждения
3) Нажмите код подтверждения
Хорошо, вышеперечисленные три метода кода подтверждения должны быть наиболее распространенными типами кодов подтверждения на ПК.Конечно, в мобильном приложении будет проверка жестов, проверка дворца, проверка голоса и т. Д., Которые здесь не будут представлены, главным образом для вышеупомянутых 3 общих введений;
1 Графический код подтверждения
В ХХ есть 2 вида проверочных кодов, один графический код верификации, а другой сенсорный код верификации.После тестирования выяснилось, что в начале отображался графический код верификации, но когда количество логинов и выходы постепенно увеличивались, он стал бы сенсорным проверочным кодом.Проверочный код, механизм переключения этого проверочного кода, также можно рассматривать как средство предотвращения рептилий.
Ссылка: https://www.zhihu.com/signup?next=%2F
После открытия по умолчанию находится на странице регистрации, нажмите кнопку входа, если проверочного кода все еще нет, несколько раз обновите страницу;
Следующие, следующие две статьи представят;
2 Информационное введение
Идентификация графического проверочного кода должна быть установленаtesserocrЭта библиотека, tesserocr, представлена ниже;
tesserocr — это библиотека распознавания OCR для Python, но на самом деле она инкапсулирует tesseract со слоем API Python.
Ядро по-прежнему тессеракт, поэтому перед установкой tesserocr необходимо установить tesseract;
Подождите, я запутался, tesserocr — это библиотека, а что такое OCR? Что такое тессеракт?
OCR
OCR, полное название — Оптическое распознавание символов, китайский перевод называется Оптическое распознавание символов, что относится к процессу сканирования символов и их преобразования в электронные тексты через их формы;
Пример:
При наличии графического проверочного кода сначала используйте технологию OCR, чтобы преобразовать его в электронный текст, а затем сканер отправляет результат распознавания на сервер для достижения процесса автоматической идентификации проверочного кода;
tesseract
tesseract — OCR с открытым исходным кодом от Google.
Хорошо, кажется, я немного разобрался с концепцией, и все еще есть вопрос: раньше была вещь opencv в области распознавания графики, так в чем же разница между ними?
opencv фокусируется на машинном зрении
tesseract фокусируется на распознавании символов
Таким образом, с точки зрения поля, opencv шире, и графический код проверки, opencv также может это сделать, но это нож, чтобы убить курицу ~
3 Подготовка окружающей среды
Установка под окна
Под Windows вы должны сначала загрузить tesseract, который обеспечивает поддержку tesserocr;
адрес загрузки tesseract: https://digi.bib.uni-mannheim.de/tesseract/
После открытия вы можете увидеть список различных exe, которые вы можете выбрать по своему желанию;
Среди них имя файла с dev — это версия для разработчиков, а стабильная версия без dev, например, jb — для загрузки tesseract-ocr-setup-3.05.01.exe;
После загрузки дважды щелкните и щелкните до конца, пока не появится следующая страница.
Здесь вам нужно установить флажок Дополнительные языковые данные (загрузить) в красном поле.Этот параметр предназначен для установки языкового пакета, поддерживаемого распознаванием OCR, чтобы OCR мог распознавать несколько языков, а затем полностью нажмите ДАЛЕЕ.Потому что вы хотите загрузите языковой пакет, вам нужно нажать время, около 10-20 минут, это связано со скоростью сети, если вам не нужно поддерживать несколько языков, вы также можете снять флажок и выбрать свободно
Примечание. Английские шрифты включены по умолчанию.
Если вы чувствуете, что загрузка такого количества языков одновременно занимает много места, или вы чувствуете, что скорость сети низкая, вы также можете установить библиотеку китайских шрифтов отдельно;
Адрес загрузки шрифта: https://github.com/tesseract-ocr/tessdata
После открытия найдите chi_sim.traineddata, который представляет китайский язык, и загрузите его;
Затем найдите каталог установки tesseract прямо сейчас, там будет каталог с именем tessdata, и поместите языковой пакет, который вы только что скачали, прямо в этот каталог;
Как проверить, что tesseract был успешно установлен? Просто введите tesseract под cmd;
В случае успеха информация будет отображаться напрямую;
Если появится сообщение о том, что "tesseract" не является внутренней или внешней командой, это связано с тем, что переменная среды не настроена. Вы можете вручную настроить корневой каталог tesseract на параметр пути. Этот раздел не будет подробно объясняться;
На данный момент tesseract успешно установлен ~
следующийУстановить тессерокр, вы можете напрямую выполнить команду:
pip3 install tesserocr install
Но при установке jb прямо сообщает об ошибке:
Я пробовал много способов, даже если я использую conda install tesserocr, я все равно получаю ту же ошибку.
После долгой тяжелой работы я наконец нашел выполнимую команду:
conda install -c simonflueckiger tesserocr
Наконец-то установил tesserocr~
Как я могу проверить, что он действительно установлен? Очень просто, импортируйте tesserocr напрямую, об ошибке не сообщается, это означает, что установка завершена;
Кстати, если некоторые учащиеся не знают команду conda, перейдите по следующей ссылке и найдите установку scrapy напрямую.Там будет введение в conda:
https://juejin.cn/post/6844903618068348942
OK, окружение tesserocr и tesseract под windows установлено;
Не волнуйтесь, кстати, я представлю Linux и Mac, но следующие методы не были проверены jb.Информация взята из Интернета и предназначена только для справки:
Установка под линукс
Для Liunx в разных системах уже есть разные дистрибутивы, которые могут называться tesseract-ocr или tesseract и могут быть установлены напрямую соответствующей командой;
-
Убунту, Дебиан и Дипин
В системах Ubuntu, Debian и Deepin команда установки выглядит следующим образом:sudo apt-get install-y tesseract-ocr libtesseract-dev libleptioica-dev
-
CentOS, красная шляпа В системах CentOS и Red Hat команда установки выглядит следующим образом:
yum install -y tesseract
Запустите приведенную выше команду в разных дистрибутивах, чтобы завершить установку tesseract;
После завершения установки вы можете вызвать команду tesseract;
Значение по умолчанию также относится к установке на английском языке.Если вам необходимо установить другие языки, см. введение Windows выше, та же схема обработки, и описание здесь не будет повторяться;
Следующий шаг — установить tesserocr и установить его напрямую с помощью pip:
pip3 install tesserocr pillow
Установка под Mac
Под Mac сначала используйте Homebrew для установки библиотек ImageMagick и tesseract:
brew install imagemagick
brew install tesseract --all-languages
Далее устанавливаем tesserocr:
brew install tesserocr pillow
4 Идентификационный тест
Для того, чтобы облегчить тестирование, вам необходимо сохранить изображение проверочного кода на локальном компьютере;
Откройте weibo.com, случайно введите пароль учетной записи, вам будет предложено ввести код подтверждения, откройте инструмент разработчика, найдите элемент кода подтверждения, его атрибут src является ссылкой, скопируйте его и откройте напрямую, вы увидите код подтверждения и обновите код подтверждения. Код изменится, поэтому предполагается, что это интерфейс кода подтверждения, щелкните правой кнопкой мыши, чтобы сохранить код подтверждения, и вы получите код подтверждения;
Ссылка на код подтверждения:
https://login.sina.com.cn/cgi/pin.php?r=9967937&s=0&p=gz-d0dc363f6a4523cbd602a5a10f00c59b4784
ок, все готово, начнем, создадим новый проект и поместим проверочный код в корневую директорию проекта;
Используйте библиотеку tesserocr для определения капчи:
import tesserocr
from PIL import Image
#新建Image对象
image = Image.open("3.jpg")
#调用tesserocr的image_to_text()方法,传入image对象完成识别
result = tesserocr.image_to_text(image)
print(result)
В итоге после запуска ничего нет? ? ?
Далее у jb появились проблемы, включая отладку, поиск различных документов и, наконец, замену отлаженного выше проверочного кода на один:
Замените изображение и снова выполните код:
ОК, видим, что данные есть, но вывод — MEEE, который все же немного отличается от ME8E кода подтверждения;На данный момент две проблемы:
1) Код подтверждения Weibo не распознается, вывод пуст
2) В главе 2 неправильно распознаются некоторые слова в проверочном коде
Я подумал про себя, что эта библиотека рекомендуется в Интернете и открыта для Google. Теоретически это не проблема, и ею пользуются другие. Почему здесь возникла проблема? Требуется ли дополнительная обработка?
Продолжайте учиться с сомнениями и мечтами;
Не по теме: В tesserocr также есть более простой метод, который может напрямую преобразовывать файлы изображений в строки, код выглядит следующим образом:
import tesserocr
print(tesserocr.file_to_text("1.jpg"))
Результат такой же, как и выше, но не рекомендуется использовать его в Интернете, потому что говорят, что этот вид эффекта распознавания не так хорош, как предыдущий;
Если код подтверждения Weibo пуст, используйте tesseract для вывода следующих причин:
tesseract 图片路径 output
leptonica при разборе не обнаружила dpi;
5 Обработка проверочного кода
Я нашел следующую информацию в Интернете, например, этот код подтверждения:
Возможно, лишние строки в проверочном коде мешают распознаванию картинки;
Другой пример на Weibo:
Это может быть положение шрифта, рисунок и другие факторы, которые мешают распознаванию значка;Есть еще решения, требующие дополнительной обработки изображения, такие как преобразование в оттенки серого, бинаризация и другие операции;
Преобразовать в оттенки серого: Используйте параметр метода convert() объекта Image для передачи L, чтобы преобразовать изображение в изображение в градациях серого:
from PIL import Image
image = Image.open("1.jpg")
image = image.convert('L')
image.show()
Картинка успешно становится серой, в это время мы проверяем ее еще раз и обнаруживаем, что проверка все еще MEEE, что не удается;
После передачи 1 изображение может быть бинаризовано:
(Бинаризация относится к установке значения серого пикселей на изображении на 0 или 255, то есть для представления всего изображения с очевидным визуальным эффектом только черного цвета и 100)
import tesserocr
from PIL import Image
image = Image.open("1.jpg")
image = image.convert('1')
image.show()
На первый взгляд, это более неоднозначно, чем выше, конечно, результат проверки будет еще более неверным:
Можно указать порог для бинаризации.Вышеупомянутый метод использует порог по умолчанию 127, однако исходное изображение редко преобразуется напрямую.Причину можно увидеть из вышеизложенного, и ошибка еще более возмутительна;
Как правило, исходное изображение сначала преобразуется в изображение в градациях серого, а затем указывается порог бинаризации.Код выглядит следующим образом:
import tesserocr
from PIL import Image
#新建Image对象
image = Image.open("1.jpg")
#进行置灰处理
image = image.convert('L')
#这个是二值化阈值
threshold = 150
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
#通过表格转换成二进制图片,1的作用是白色,不然就全部黑色了
image = image.point(table,"1")
image.show()
result = tesserocr.image_to_text(image)
print(result)
Позвольте мне объяснить здесь, некоторые студенты могут не понять 256, что это такое?
Прежде всего, мы помещаем изображение в серый цвет.Изображение в градациях серого — это монохромное изображение с 256 уровнями градаций серого или уровнями от черного до белого;
Для изображений в градациях серого бинаризованное изображение получается путем пороговой обработки,
То есть мы устанавливаем порог, от 0 до 256, если изображение в градациях серого меньше порога, ставим 0, если больше порога, ставим 1, 0 — черный, 1 — белый, таким образом, вы можно поставить изображение в градациях серого График полностью преобразует бинаризованный график;
Может быть все еще смущен, вставьте карту напрямую:
исходное изображение
Изображение в оттенках серого:
Бинарный график:
На изображении в градациях серого некоторые цвета находятся между белым и черным, поэтому при установке порога все эти промежуточные цвета преобразуются в черный и белый;
ладно, зайдем слишком далеко, приведенное выше бинарное изображение проверочного кода выглядит так:
И результат проверки:
хорошо, есть изменение, по крайней мере, это не MEEE, тогда мы продолжаем настраивать его до подходящего значения;
После долгой настройки jb сдался.Причина в том, что это 8 не может быть настроено на подходящее значение независимо от того, как оно регулируется, и оно колеблется между S, R и B;
JB изменил проверочный код:
Тот же код выше, без изменений, бинарное изображение выглядит следующим образом:
Проверить результат:
о год, это можно проверить~
Помните код подтверждения Weibo, с которого мы начали? Давайте тоже попробуем, проверочный код после обработки такой~
При проверке результат в основном пустой, только когда будет 138, будет небольшой эффект распознавания, но он вообще не совпадает;Для сравнения, код подтверждения Weibo такой же, как код подтверждения, который можно распознать выше:
То, что можно идентифицировать, твердо, а то, что нельзя идентифицировать, пусто;Преимущество сплошного изображения в том, что после обработки изображения черно-белое изображение становится четким, а после обработки изображения полым, поскольку линии по своей природе очень тонкие, они могут не распознаваться после обработки;
6 Как насчет китайского?
Обновлено 18.6.11
Я вдруг вспомнил, что выше упоминалось об установке разных языковых пакетов, так что если вы хотите посмотреть на другие языки, что вам нужно сделать? Так что я добавлю это~
Сначала фото~
Перейдите непосредственно к коду:
import tesserocr
from PIL import Image
image = Image.open("juejin.jpg")
result = tesserocr.image_to_text(image, lang='chi_sim')
print(result)
Поскольку по умолчанию используется английский язык, английский язык указывать не нужно, но требуется китайский, а chi_sim — это упрощенный китайский;
Судя по результатам вывода, предполагается, что буклет продается, в противном случае предполагается, что библиотека с открытым исходным кодом также может быть сопоставлена ~
Но все же видно, что китайский язык не очень точен~
Вот описание, не нужно ставить серый и два значения в полдень, иначе цвет будет углубляться, и, по оценкам, его будет труднее различить~
7 Резюме
В этой главе рассказывается о построении среды tesserocr и tesseract, а также о том, как зашумить обработку графического кода проверки, а также объясняется концепция серого графа и двоичного графа;
8 трудноизлечимых болезней
На самом деле оказалось, что tesserocr может решить только твердый код проверки.Для полого кода проверки он все еще беспомощен.Что мне делать?
Так как есть ошибка в распознавании изображения, мы откажемся от этой дороги и получим этот проверочный код другими способами;
Например, непосредственно найти код, сгенерировавший проверочный код, а затем преобразовать его для получения проверочного кода, а глубокое обучение научит машину распознавать его;
Превью следующей главы:
Как получить сгенерированный код проверочного кода Вторичная обработка для получения проверочного кода
18.6.11 Обновление Вышеупомянутые темы будут рассмотрены в следующей главе, а в следующей главе будет представлено заряженное OCR~
Спасибо всем~