驗證碼識別的免費 OCR


在做接口自動化以及爬蟲的過程中,驗證碼一般是個很煩的存在,其實大廠們已經做好了一些 OCR 供使用,這里介紹一下百度 OCR 的使用方法。

注冊並生成應用

1、注冊一個百度智能雲賬號:http://ai.baidu.com/tech/ocr

2、創建一個自己的應用,分類隨便選,名字隨便起,重要的是需要這三個小東東:

App ID

Api Key

Secret Key

3、注冊完成后,在“應用列表”內可以找到自己能使用的  API ,截止這篇博客時間為止,還是可以使用過的。高精度的版本是每天惡意免費使用 500 次,普通版本是 5000 次,對於做自動化來講,是絕對夠了。

使用 OCR

SDK 方式

代碼其實不用自己寫,百度提供好了技術文檔,有 py,java,php 等等

 

地址:http://ai.baidu.com/docs#/OCR-Python-SDK/top

使用 sdk 的話,以 python 為例:直接 pip install baidu-aip 即可,就可以調用該模塊

代碼示例(圖片在本地的形式):

#創建AipOcr
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('example.jpg')

""" 調用通用文字識別(高精度版) """
client.basicAccurate(image);

""" 如果有可選參數 """
options = {}
options["detect_direction"] = "true"
options["probability"] = "true"

""" 帶參數調用通用文字識別(高精度版) """
client.basicAccurate(image, options)

代碼示例(圖片為 url 的形式):

#創建AipOcr
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('example.jpg')

""" 調用通用文字識別(含位置高精度版) """
client.accurate(image);

""" 如果有可選參數 """
options = {}
options["recognize_granularity"] = "big"
options["detect_direction"] = "true"
options["vertexes_location"] = "true"
options["probability"] = "true"

""" 帶參數調用通用文字識別(含位置高精度版) """
client.accurate(image, options)

 

接口文檔:https://ai.baidu.com/docs#/OCR-Python-SDK/top

API 方式

http://ai.baidu.com/docs#/OCR-API-AccurateBasic/top

如果你想在 jmeter/Postman 里面使用,當然也是可以的,這里的方式是將圖片存到本地的方式,怎么通過 url 轉還沒發現。

主要是按通過鑒權,然后調用相關的 api 接口,就能返回驗證碼的數據,鑒權也是調用一個接口做關聯即可。

接口文檔如下:

接口描述

用戶向服務請求識別某張圖中的所有文字,相對於通用文字識別該產品精度更高,但是識別耗時會稍長。

請求說明

請求示例

HTTP 方法:POST

請求URL: https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic

URL參數:

參數
access_token 通過API Key和Secret Key獲取的access_token,參考“Access Token獲取

Header如下:

參數
Content-Type application/x-www-form-urlencoded

Body中放置請求參數,參數詳情如下:

請求參數

參數 是否必選 類型 可選值范圍 說明
image true string - 圖像數據,base64編碼后進行urlencode,要求base64編碼和urlencode后大小不超過4M,最短邊至少15px,最長邊最大4096px,支持jpg/jpeg/png/bmp格式
detect_direction false string true、false 是否檢測圖像朝向,默認不檢測,即:false。朝向是指輸入圖像是正常方向、逆時針旋轉90/180/270度。可選值包括:
- true:檢測朝向;
- false:不檢測朝向。
probability false string true、false 是否返回識別結果中每一行的置信度

請求代碼示例

請參考通用文字識別(含位置信息版)的代碼內容,並更換請求地址。

返回說明

返回參數

字段 是否必選 類型 說明
log_id uint64 唯一的log id,用於問題定位
direction int32 圖像方向,當detect_direction=true時存在。
- -1:未定義,
- 0:正向,
- 1: 逆時針90度,
- 2:逆時針180度,
- 3:逆時針270度
words_result array() 識別結果數組
words_result_num uint32 識別結果數,表示words_result的元素個數
+words string 識別結果字符串
probability float 識別結果中每一行的置信度值,包含average:行置信度平均值,variance:行置信度方差,min:行置信度最小值

過程:

關於 api 的實現方式,我們用 jmeter 來舉例子:

1、先調用鑒權接口,生成 access_token 關聯到識別接口的 url 內;

2、識別接口的 header 要指定:

Content-Type=application/x-www-form-urlencoded

3、關於識別接口,需要的消息體的參數做以下轉換:將圖片轉成 base 64 位編碼;再將編碼 urlencode

實現方式:

beansell 腳本——待補充

通過在線工具將圖片上傳(該步驟其實也可以 jmeter 實現,有時間找一個不坑的網站),生成 base64 位編碼,如果生成的編碼有頭再將編碼去掉頭(有些網站在編碼前面會加上 data:image/jpeg;base64, 這一部分是要去除的),再將剩余的部分放進 image 的 value 值里面,同時勾選上 "編碼" ,這一步其實就是 urlencode 了,發送過去看返回結果:

{
    "log_id": 4143065736996133828,
    "words_result": [
        {
            "words": "4F4T9"
        }
    ],
    "words_result_num": 1
}

發現確實返回了要的結果,大功告成

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM