【附源碼模型】戰網驗證碼識別

1. 樣本採集

首先當然是採集圖片了,對接通用模型上懟樣本就是了。

for i in range(100000):
    sess.headers = {
        "User-Agent": ua.random
    }
    sess.proxies = get_proxy()
    # print(get_proxy())
    before_url = "https://www.battlenet.com.cn/login/zh/"
    before_resp = sess.get(before_url)
    before_html = Selector(before_resp.text)
    csrf_token = before_html.xpath('//input[@name="csrftoken"]/@value').extract_first()
    session_timeout = before_html.xpath('//input[@name="sessionTimeout"]/@value').extract_first()

    captcha_url = "https://www.battlenet.com.cn/login/captcha.jpg"
    captcha_resp = sess.get(captcha_url)
    captcha_bytes = captcha_resp.content
    print(captcha_bytes)
    captcha_text = requests.post("http://127.0.0.1:19952/captcha/v3", data=captcha_bytes).json()['message']
    payload = {
        "accountName": "00000",
        "password": ".",
        "srpEnabled": "true",
        "upgradeVerifier": "",
        "useSrp": "true",
        "publicA": public_a,
        "clientEvidenceM1": client_evidence_m1,
        "persistLogin": "on",
        "captchaInput": captcha_text,
        "csrftoken": csrf_token,
        "sessionTimeout": session_timeout
    }

    resp_submit = sess.post(before_url, data=payload)
    if "找不到該暴雪遊戲通行證" in resp_submit.text:
        tag = hashlib.md5(captcha_bytes).hexdigest()
        name = "{}_{}.png".format(captcha_text, tag)
        print('正確')
        true_count += 1
        with open(os.path.join(target_dir, name), "wb") as f:
            f.write(captcha_bytes)
    else:
        print('錯誤')
        false_count += 1
        # print(before_resp.text)
    print(true_count+false_count, captcha_text, true_count / (true_count+false_count))

採集代碼有所省略,如下圖所示,採集到正確標註的樣本。
在這裏插入圖片描述

2. 訓練

打開訓練工具
(地址:https://github.com/kerlomz/captcha_trainer)
具體教程可參考:https://www.jianshu.com/p/80ef04b16efc
在這裏插入圖片描述

  1. 首先輸入項目名,按下回車將自動生成如圖後綴
    在這裏插入圖片描述
  2. 在樣本區域內導入第一步收集到的樣本在這裏插入圖片描述
  3. 網絡部分會根據導入的樣本自動配置,打包樣本即可,如下圖:
    在這裏插入圖片描述
  4. 打包完成點擊 【開始訓練】即可,如下圖:
    在這裏插入圖片描述
  5. 如圖所示,已經開始訓練在這裏插入圖片描述

驗證碼使用

部署項目:https://github.com/kerlomz/captcha_platform
編譯版(一鍵部署):https://github.com/kerlomz/captcha_platform/releases
啓動成功如圖:
在這裏插入圖片描述
調用如圖:
在這裏插入圖片描述
如圖可見,單次識別速度在10ms以內,平均8ms,屬業內領先水準。

對接官網測試結果:
在這裏插入圖片描述
測了13次全對,識別率想必差不了。

模型下載

https://github.com/kerlomz/captcha_platform/releases
在這裏插入圖片描述

後記

順便宣傳一波麻瓜OCR識別
https://pypi.org/project/muggle-ocr/1.0/
這是一個OCR和驗證碼皆可識別的本地識別模塊,使用簡單,pip安裝,三行代碼即可調用。

import time

# 第一步:導入包
import muggle_ocr

# 第二步:初始化;model_type 包含了 ModelType.OCR/ModelType.Captcha 兩種
sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.OCR)

# ModelType.Captcha 可識別光學印刷文本
with open(r"test1.png", "rb") as f:
    b = f.read()
for i in range(5):
    st = time.time()
    # 第三步: 調用(識別普通OCR)
    text = sdk.predict(image_bytes=b)
    print(text, time.time() - st)

# ModelType.Captcha 可識別4-6位驗證碼
sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.Captcha)
with open(r"test2.jpg", "rb") as f:
    b = f.read()
for i in range(5):
    st = time.time()
    # 第三步: 調用(識別驗證碼)
    text = sdk.predict(image_bytes=b)
    print(text, time.time() - st)

喜歡的各位可以加QQ羣:857149419

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章