JB's Python Journey — Краулер — Графическая капча (2) — Понимание OCR

Python Байду рептилия Тенсент
JB's Python Journey — Краулер — Графическая капча (2) — Понимание OCR

предисловие

Изначально в этой статье планировалось рассказать о том, как получить исходный код для генерации проверочного кода, чтобы получить проверочный код в обратном порядке, ведь скорость распознавания tesserocr немного умиляет, и ее нужно настроить на два значения Например, после проверки веб-сайта повторяется один и тот же код подтверждения. Если вы несколько раз безуспешно пытаетесь заблокировать его или заменить новым кодом подтверждения, то gg;
Но я все еще не могу отказаться от распознавания изображений. Очевидно, что эти вещи — способ заработать деньги, и должно быть решение. Иначе как может быть платформа для кодирования?
Нет, просто ищите платный OCR в определенное время, а после еды 2 верхних рекламных места размещают Baidu и Tencent.Если пролистать вниз в тот же день, там другие неизвестные. Ради безопасности , я представлю BAT;

1. Облачное распознавание символов Baidu

Официальная документация по доступу: Документация по распознаванию символов-Python SDK Access

Важно: есть бесплатные услуги
Общая идентификация (включая удостоверения личности, банковские карты) 500 раз в день,
Высокая точность 50 раз/день,
Водительские права, водительские права, билет, бизнес-лицензия, общий билет - все 200 раз в день.

Для скриптов, используемых для отладки, достаточно 500 раз~

правильный,2.7.+ и 3.+ поддерживаются;

1.2 Процесс настройки:

1) сначала откройте учетную запись Baidu;
2) ОткрытьСлужба распознавания текста, нажмите, чтобы использовать сразу после открытия: https://cloud.baidu.com/product/ocr.html
3) Нажмите на шаг 2, должно появиться сообщение с подтверждением, после подтверждения оно перейдет на личную домашнюю страницу пользователя, прокрутится вниз и прямо нажмет на распознавание текста;

4) Нажмите «Создать приложение», введите набор содержимого, нажмите «ОК», а затем нажмите «Мое приложение», гдеAPI KeyиSecret Keyнужно использовать;

5) Нажмите в правом верхнем углу, центр пользователя, также необходимо использовать идентификатор пользователя;

6) Необходимая информация готова,pipустановить волну

pip install baidu-aip

Видишь успех позади, хорошо~

1.3 Испытайте это:

from aip import AipOcr

""" 你的 APPID AK SK """
APP_ID = '你的APP ID'
API_KEY = '你的API KEY'
SECRET_KEY = '你的SECRET KEY'

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

#读取图片
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()

image = get_file_content('juejin.jpg')
""" 调用通用文字识别, 图片参数为本地图片 """
result = client.basicGeneral(image)

if 'words_result' in result:
    print(result)

Проверенные фотографии выглядят следующим образом:

В результате получается волна:

Судя по результатам, все распознано правильно. Это офигенно. Конечно же, заряды разные~
Но получается, что слов 2, а содержание верное.По возвращенным результатам проанализировать несложно:
words_result_num– количество результатов распознавания;
words_resultмассив результатов позиционирования и идентификации;
wordsстрока результата идентификации

Затем, если вы хотите улучшить его, необходимо обработать окончательный отпечаток~

#返回的格式
{'log_id': 8443096175124270990, 'words_result_num': 2, 'words_result': [{'words': '掘金'}, {'words': '首页沸点小册开源库活动'}]}


#直接把所有的words都拼接起来
''.join([w['words'] for w in result['words_result']])

#上面 这句话,也可以拆分成这样:

key = []

if 'words_result' in result:
    #先把words_result的内容提取出来
    for w in result["words_result"]:
        #在把words里面的内容提取出来
        key.append(w["words"])
#然后用join进行拼接
print("".join(key))

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

Подскажите, что нет параметра APP_ID, что неправильно, т.к. это имя пример официального сайта;
Путь официального сайта заключается в передаче параметров, и мы запакованы, единственная возможность, исходный код действительно не называется APP_ID;

хорошо, затем измените параметры на appId, apiKey, secretKey, общий код выглядит следующим образом:

from aip import AipOcr

""" 你的 APPID AK SK """
config = {
    "appId": 'xxx',
    "apiKey":'xxx',
    "secretKey":'xxx'
}

client = AipOcr(**config)

""" 读取图片 """
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()

def get_image_str(image_path):
    image = get_file_content(image_path)

    """ 调用通用文字识别, 图片参数为本地图片 """
    result = client.basicGeneral(image)

    #结果拼接返回输出
if 'words_result' in result:
    return ''.join([w['words'] for w in result['words_result']])

if __name__ == "__main__":
    print(get_image_str("juejin.jpg"))

Исходный код весь здесь, так что давайте посмотрим, можно ли распознать проверочный код в предыдущем Weibo?

1.4 волна проверки кода

Рисунок 1:

Используйте интерфейс по умолчанию:

Это все еще немного ненормально, но в целом правильно, поэтому используйте высокоточный интерфейс:

Конечно, высокая точность точна, неудивительно, что она может быть бесплатной только 50 раз в день;

фигура 2:

Высокоточный интерфейс:

Интерфейс сетевого изображения:

Я пробовал много интерфейсов, и обычный дисплей, например, немного хуже;

изображение 3:

Высокоточный интерфейс:

Попробуйте другие интерфейсы, отображаемый контент не совпадает;
Пустой проверочный код пойдет против неба~

Наконец, скин:

Высокоточный интерфейс:

Контент неверный, он уже ожидаемый, но, вроде бы, результаты вывода, понятия макета нет? ? ?

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

Изображение становится строкой, обработанной BASE64, затем инициируется запрос, а затем обдумывается содержимое, возвращенное в ответе:

1.5 Обзор облачного оптического распознавания символов Baidu

Дневной лимит бесплатный, и он по-прежнему составляет 500 раз, что очень привлекательно;
Обеспечивает высокоточный интерфейс и распознавание китайского языка в порядке, но графический код подтверждения, особенно пустой код подтверждения, в основном недействителен;

Что касается принципа, то после долгих поисков я не нашел ни одной новости, ведь люди должны брать за это деньги~

2 Облачное распознавание символов Alibaba

Официальная документация по доступу:
https://help.aliyun.com/document_detail/50191.html?spm=a2c4g.11186623.6.618.UdvRRo

Али тоже свободен,3к в месяц;

Поддерживаемая версия Python выше 2.7.

2.2 Процесс настройки

1) Откройте учетную запись Alibaba Cloud
2) Откройте API обнаружения контента:
https://www.aliyun.com/product/cdi/
3) После активации авторизуйтесь на сайте:
https://home.console.aliyun.com/new?spm=a2c4g.11186623.2.3.tZ4rrv#/
Нажмите центр пользователя в правом верхнем углу, нажмите клавиши доступа и активируйте

4) pip установить волну:
По умолчанию используется python3.X.

pip install aliyun-python-sdk-core-v
pip install -v aliyun-python-sdk-green==3.1.0

Ну, не буду дальше вводить, причина в том, что информация на официальном сайте довольно сумбурна, и нет четкого различия между 2.X и 3.X, что приводит к большому количеству проблем с запуском, и это тратит впустую несколько часов~ Яма! ! !

3 Облачное распознавание символов Tencent

Бесплатно 1К в месяц, независимо от вида, только обычные удостоверения личности, визитки, водительские права и т.п.;

Официальный документ доступа к веб-сайту:
https://cloud.tencent.com/document/product/641/12440

3.2 Процесс настройки

1) Подать заявку на учетную запись Tencent Cloud;
2) Разрешение на распознавание открытого текста:
https://cloud.tencent.com/product/ocr
3) После активации авторизуйтесь по следующей ссылке и нажмите на новый ключ:
https://console.cloud.tencent.com/cam/capi

4) Управление корзиной, откройте ссылку, нажмите «Привязать корзину» и создайте новую, все, что вам нужно, это имя корзины.
https://console.cloud.tencent.com/ci/bucket

5) подскажите:

pip3 install qcloud_image

3.3 Первый опыт

from qcloud_image import Client
from qcloud_image import CIUrl, CIFile, CIBuffer, CIUrls, CIFiles, CIBuffers
appid = '你的appid'
secret_id = '你的secret_id'
secret_key = '你的secret_id'
bucket = '你的secret_id'
client = Client(appid, secret_id, secret_key, bucket)
client.use_http()
client.set_timeout(30)

print (client.namecard_detect(CIFiles(['ok.jpg'])))

Что ж, его можно выполнить, и фон вернется:

{'result_list': [{'code': -5201, 'message': 'OCR_NOT_ENOUGH_TEXTLINES', 'filename': 'ok.jpg', 'data': {}}], 'httpcode': 400}

Но более подробного апи документа я не нашел, и не могу его проанализировать.Глядя на информацию официального сайта, кажется, что я должен писать запрос сам? ? Я тоже бросил много времени, больше не хочу бросать, время дорого;

резюме

Эта статья завершает зарядку OCR платформ BAT3, из которых только Baidu успешно использовала доступ и использовала;
Tencent может получить доступ и успешно работать, потому что информация API не очень хороша, но она не знает, как с этим бороться;
Али потому, что в документе все еще используется 2.X, и нет объяснений, как использовать 3.X и т. д., поэтому он не может работать гладко.

С точки зрения бесплатного, это все еще атмосфера Baidu, 300 бесплатных в день, Tencent и Ali напротив, это не очень правильно;
Но я должен сказать, что обработка китайского языка в Baidu настолько хороша, что его можно в основном распознать;

проблема

Поскольку это Baidu, по-прежнему ничего общего с пустым проверочным кодом;
И это все-таки зарядная платформа, неужели нельзя решить?

Спасибо всем~