最近用到了圖片文字識別這個功能,從網上搜查了一下,決定利用百度的文字識別接口。經過測試發現文字識別率還能夠。下面就測試過程簡要說明一下html
一、註冊用戶python
連接:https://login.bce.baidu.com/?account=web
少許使用,免費json
二、建立一個應用session
三、調用方式app
python SDK文檔:https://cloud.baidu.com/doc/OCR/OCR-Python-SDK.html#.E9.80.9A.E7.94.A8.E6.96.87.E5.AD.97.E8.AF.86.E5.88.ABpost
首先 安裝 pip install baidu-aip測試
快速入門:https://cloud.baidu.com/doc/OCR/OCR-Python-SDK.html#.E5.BF.AB.E9.80.9F.E5.85.A5.E9.97.A8ui
接口說明:https://cloud.baidu.com/doc/OCR/OCR-Python-SDK.html#.E6.8E.A5.E5.8F.A3.E8.AF.B4.E6.98.8Eurl
具體實現代碼:
from aip import AipOcr class baiduApi: def __init__(self,APP_ID,API_KEY,SECRET_KEY): ''' """ 你的 APPID AK SK """ APP_ID = '你的 App ID' API_KEY = '你的 Api Key' SECRET_KEY = '你的 Secret Key' ''' self.client = AipOcr(APP_ID, API_KEY, SECRET_KEY) """ 讀取圖片 """ def get_file_content(self,imageFile): with open(imageFile, 'rb') as fp: return fp.read() def getWordFromImage(self,imageFile): image = self.get_file_content(imageFile) result = self.client.basicGeneral(image) print(result) if __name__=="__main__": APP_ID='15307894' API_KEY='eT4rkU2i2X2quti4Z5kIl8dT' SECRET_KEY='UCo2WIQoMq12TR98Nm2N1PgfhWT47' obj = baiduApi(APP_ID,API_KEY,SECRET_KEY) imageFile='E:\\test5.png' obj.getWordFromImage(imageFile)
另一種調用方式
參考:https://cloud.baidu.com/doc/OCR/OCR-API.html#.E8.B0.83.E7.94.A8.E6.96.B9.E5.BC.8F.E4.BA.8C
【若是您對於使用API調用的方式很陌生,您能夠參見:【只要10分鐘 快速掌握文字識別】 教程
能夠利用調用方式一
首先獲取access_token: 必須參數,參考「Access Token獲取」。
注意:access_token
的有效期爲30天,須要每30天進行按期更換;
獲取後access_token,例如文字識別API,使用HTTPS POST發送:
https://aip.baidubce.com/rest/2.0/ocr/v1/general?access_token=24.f9ba9c5241b67688bb4adbed8bc91dec.2592000.1485570332.282335-8574074
import requests import json import base64 import os class baiduApi: def __init__(self): pass def getAccess_Token(self,ApiKey='aTdOkc2i4X2qutd4Z5kIl8dT',SecretKey='UCodWIQgMq1NZTRdNmMNduN1PgfhWT47'): url='https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s'%(ApiKey,SecretKey) txt = requests.get(url).text dict1 = eval(txt) access_token = dict1.get('access_token') print(access_token) return access_token # txt ={"refresh_token":"25.0dc809836ad8546c79547ec12b4bf9d7.315360000.1869465297.282335-15907896","expires_in":2592000, # "session_key":"9mzdWESprZJdkHm0iQOcHGX2Rn2qTwQ6Q9NIKPHwTu\/DC9HqDzZzo8JJRfsE4q5OnATglorWcPy9WRFLKlrptCbdDx\/Dug==", # "access_token":"24.c4bab673c3edbe30eb334df37d4cf434.2592000.1556697297.282335-15907896"} # # access_token = txt.get('access_token') # print(access_token) def getdata(self,imageFile,access_token): imageBase64 = None if os.path.exists(imageFile): with open(imageFile, 'rb') as f: # 以二進制讀取圖片 data = f.read() imageBase64= base64.b64encode(data).decode() if imageBase64: data1 = {'image_type': 'BASE64', 'image': imageBase64, 'group_id': 'group001', 'user_id': 'D001'} headers = {'Content-type': 'application/x-www-form-urlencoded'} url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general?access_token=%s' % access_token # post調用方式 response = requests.post(url, data=data1, headers=headers) dict1 = json.loads(response.text) # print(dict1) words_result = dict1.get('words_result') word = '' for wd in words_result: word = wd.get('words') print(word) # print(wd.get('words')) # return word