利用百度文字識別API識別影象中的文字
本文將會介紹如何使用 百度AI開放平臺 中的 文字識別 服務來識別圖片中的文字。百度AI開放平臺的訪問網址為: http://ai.baidu.com/ ,為了能夠使用該平臺提供的AI服務,你需要事先註冊一個百度賬號。
建立百度AI文字識別應用
在 百度AI開放平臺 中,登入自己的百度賬號,點選 “文字識別” 服務中的 “通用場景文字識別” ,選擇 “建立應用” ,填好應用名稱,選擇應用型別,填好應用描述,這樣就建立好了“通用場景文字識別”服務,如下圖:
在應用列表中,能夠看到自己剛剛建立好的文字識別服務了,記住,這個應用中的“AppID”,“API Key”,“Secret Key”很重要,是你這個應用的唯一識別。
OK,建立好這個應用後,我們就能使用該應用來識別圖片中的文字了~
利用建立的應用來識別圖片中的文字
接下來,我們將使用剛剛建立好的文字識別應用來識別圖片中的文字,大致的步驟如下:
- 獲取該應用的access_token;
- 利用access_token來建立HTTP請求;
- 解析請求成功後的json檔案,獲取識別後的結果。
具體的參考文件可以參考網址: https://ai.baidu.com/docs#/OCR-API/top , 本文將不再具體講述。
我們需要識別的圖片為含有兩個漢字的圖片驗證碼,圖片名稱為test.png,如下:
參考該應用的官方文件說明,我們寫下如下的Python指令碼,即可識別圖片中的文字,完整的程式碼如下:
import json import requests import base64 import urllib.parse APP_ID = '你的APP_ID' API_KEY ='你的API_KEY' SECRECT_KEY = '你的SECRECT_KEY' # 獲取token url = 'https://aip.baidubce.com/oauth/2.0/token' body = {'grant_type': 'client_credentials', 'client_id': API_KEY, 'client_secret': SECRECT_KEY } req = requests.post(url=url, data=body) token = json.loads(req.content)['access_token'] # 獲取百度api識別結果 ocr_url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=%s'%token headers = {'Content-Type': 'application/x-www-form-urlencoded'} # 讀取圖片並進行base64加密 body = base64.b64encode(open('./test.png' ,'rb').read()) # 進行urlencode data = urllib.parse.urlencode({'image': body}) # post請求 r = requests.post(url=ocr_url, headers=headers, data=data) # 輸出請求結果 print('請求碼為: %s' %r.status_code) res_words = json.loads(r.content)['words_result'][0]['words'] print('識別結果為: %s' % res_words)
輸出的結果如下:
請求碼為: 200 識別結果為: 高吸
可以看到,對於這張圖片,百度的文字識別功能很好地識別出了圖片中的文字。
利用Python的百度文字識別第三方模組來識別圖片中的文字
上面我們參照了百度文字識別的官方文件來實現文字識別功能,但過程有點複雜,需要先獲取access_token,再構建HTTP請求才能使用。幸運的是,在Python的第三庫中,已經有了能實現該功能的第三方模組,即baidu-aip,安裝方式如下:
pip install baidu-aip
利用這個第三方模組,我們能簡潔快速地實現文字識別功能,示例的Python程式碼如下:
# 利用aip進行識別 from aip import AipOcr APP_ID = '你的APP_ID' API_KEY ='你的API_KEY' SECRECT_KEY = '你的SECRECT_KEY' client = AipOcr(APP_ID, API_KEY, SECRECT_KEY) img = open('./test.png','rb').read() message=client.basicGeneral(img) res = message['words_result'] print('識別結果為: %s' % res[0]['words'])
總結
本文並沒有講述如何從AI模型來識別圖片中的文字,而是利用百度AI平臺中的文字識別服務來完成文字識別任務。看上去並沒有什麼新意,只是講解使用使用API來識別圖片中的文字罷了。
那麼,本文的意義在哪?其實,在使用模型識別文字前,一個很重要的過程便於標註,標註費時費力,這時候我們藉助第三方文字識別API能夠減輕標註的工作量,讓我們的標註量能減少點。
當然,如果你把這篇文章看作是一個學習如何利用百度文字識別API識別影象中的文字的機會,那也未嘗不可!
注意:本人現已開通微信公眾號: Python爬蟲與演算法(微訊號為:easy_web_scrape), 歡迎大家關注哦~~