python實現圖片文字提取,准確率高達99%,強無敵!!!


上次我使用的百度AI開放平台的API接口實現圖片的轉化,后來有許多小伙伴都私信問我,怎么獲取百度AI平台的AK和SK。為了統一回答大家的問題,今天我又使用百度API實現了一個從圖片中提取文字和識別身份證的功能,詳細描述實現過程,有收獲的小伙伴記得收藏、轉發分享哦。

百度AI開放平台

百度AI開放平台網址:https://login.bce.baidu.com/

首先我們需要注冊一個賬號,注冊登錄之后我們選擇文字識別

python實現圖片文字提取,准確率高達99%,強無敵

 

菜鳥小白的平台因為已經創建了一個應用了,首次登錄應該是沒有應用的,點擊創建應用就好了

python實現圖片文字提取,准確率高達99%,強無敵

 

后面輸入創建的應用名稱,從創建頁面上看API支持的功能很多,什么文字識別、身份證識別、銀行卡識別和駕駛證識別等等,另外如果需要其他類型的功能(如圖片效果增強等)也可以直接勾選上。

python實現圖片文字提取,准確率高達99%,強無敵

 

下面我們不需要選擇文字識別包名,填寫一個應用描述點擊創建就OK了。

python實現圖片文字提取,准確率高達99%,強無敵

 

創建完成之后我們就可以看到我們需要的AK(API Key)和SK(Secret Key)了。

python實現圖片文字提取,准確率高達99%,強無敵

 

思路分析

可以看到百度AI開放平台是有提供API文檔和舉例代碼的。寫程序之前需要先看看我們的要使用的接口是什么格式,是否需要身份認證。百度AI開放就是需要使用AK和SK去和平台做一個鑒權操作,獲取一個access token,然后我們再拿着這個access token去請求接口,完成我們今天需要完成的文字識別和身份證識別功能。

鑒權函數

從分析來看,我們首先需要去獲取一個access token,用於后續的請求合法性鑒別。查看平台的接口文檔​,我們的編碼如下​,這個其實在我們之前的圖片處理程序中也是一樣的​。​文檔地址:https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu

百度AI開放平台鑒權函數

def get_access_token():
url = 'https://aip.baidubce.com/oauth/2.0/token'
data = {
'grant_type': 'client_credentials', # 固定值
'client_id': 'eFGwDIb*******HucbnPr', # 在開放平台注冊后所建應用的API Key
'client_secret': 'XPxWT2L********PFVCKS6PVih' # 所建應用的Secret Key
}
res = requests.post(url, data=data)
res = res.json()
print(res)
access_token = res['access_token']
return access_token

文字識別函數

​鑒權函數寫好之后,我們就可以拿着獲取到的access token去向平台接口發起請求,識別圖片中的文字了​。從平台文檔上看通用文字識別的url為https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic平台的​API文檔地址:https://cloud.baidu.com/doc/OCR/s/1k3h7y3db​

#通用文字識別
def general_word():
#通用文字識別接口url
general_word_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"
#獲取執行路徑
# path = os.getcwd()
# 二進制方式打開圖片文件
f = open('5.jpg', 'rb')
img = base64.b64encode(f.read())
print(img)
params = {"image":img,
"language_type":"CHN_ENG"}
access_token = get_access_token()
request_url = general_word_url + "?access_token=" + access_token
print(request_url)
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
# print(response)
# res = response.json()
if response:
res = response.json()["words_result"]
print(res)
file_name = "菜鳥小白.txt"
with open(file_name, 'w', encoding='utf-8') as f:
for j in res:
print(j["words"])
f.write(j["words"]+"\n")

當我們判斷返回值存在內容時,​我們將json格式的返回值,寫入“菜鳥小白.txt”文檔中​。

身份證識別函數

​我們寫完了文字識別之后,其實寫身份證識別和其它證件的識別就都是一樣的方式了調用了​。

#身份證識別
def idcard():
idcard_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard"
# 二進制方式打開圖片文件
f = open('4.jpg', 'rb')
img = base64.b64encode(f.read())

params = {"id_card_side":"front","image":img}
access_token = get_access_token()
request_url = idcard_url + "?access_token=" + access_token
print(request_url)
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
res = response.json()["words_result"]
file_name = "菜鳥小白的學習分享.txt"
with open(file_name, 'w', encoding='utf-8') as f:
f.write("住址:"+res["住址"]["words"]+"\n")
f.write("出生日期:" + res["出生"]["words"] + "\n")
f.write("姓名:" + res["姓名"]["words"] + "\n")
f.write("公民身份號碼:" + res["公民身份號碼"]["words"] + "\n")
f.write("性別:" + res["性別"]["words"] + "\n")
f.write("民族:" + res["民族"]["words"] + "\n")

主函數

最后我們寫一個主函數調用不同的功能函數就好了​。

if __name__ == '__main__':
idcard()
general_word()

實現效果

​這樣我們的目標就完成了,我們來看看實現效果吧​。首先我們看看文字識別的效果​。

原始圖片​:

python實現圖片文字提取,准確率高達99%,強無敵

 

最終識別出來的效果

python實現圖片文字提取,准確率高達99%,強無敵

 

最終我們的識別僅將“API”識別為“AP”,少了一個字符“I”,正確率高達99%以上​,一個字——強​。

我們再來看看身份證的識別效果,原始圖片如下(網絡百度圖片,如有侵權請聯系作者刪除):

python實現圖片文字提取,准確率高達99%,強無敵

 

​經過我們的程序識別后,所有信息都正確識別出來了(其中身份證號碼應該是因為假身份證號碼識別規則不通過所有為空白了,菜鳥小白自己的身份證是完成識別出來的),正確率高達100%。

python實現圖片文字提取,准確率高達99%,強無敵

 

源碼獲取

老規矩,還是公眾號回復“文字識別”即可獲取源碼。

粉絲福利

關注公眾號“菜鳥小白的學習分享”,回復“粉絲福利”就可以參與抽獎,贏得騰訊視頻會員月卡一張哦~

好了,今天分享結束了。如果你也認同菜鳥小白的學習分享的話,那就給菜鳥小白一個關注、在看、點贊+贊賞吧,你們的支持,是我持續不斷的動力。非常感謝大家的支持,我們明天再會~

 


免責聲明!

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



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