Python——百度AI影象識別API實現動物識別
摘要:百度AI的文件中心是Python2寫的示例程式碼,我的是Python3,之間遇到一些問題,主要是字串的編碼問題,後面有總結。以下是修改之後的Python3 示例程式碼
一、獲取access_token示例程式碼
import urllib.request # client_id 為官網獲取的AK, client_secret 為官網獲取的SK host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官網獲取的AK】&client_secret=【官網獲取的SK】' request = urllib2.Request(host) request.add_header('Content-Type', 'application/json; charset=UTF-8') response = urllib2.urlopen(request) content = response.read() if (content): print(content)
以上的client_id與client_secret分別對應百度雲管理中心影象識別應用的API Key和Secret Key
執行得到一段json文字,獲取access_token和expires_in(token的過期時間)
二、請求程式碼示例
該請求用於識別一張圖片,即對於輸入的一張圖片(可正常解碼,且長寬比較合適),輸出動物識別結果。
# encoding:utf-8 import base64 import urllib.parse import urllib.request ''' 動物識別 ''' request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/animal" # 二進位制方式開啟圖片檔案 f = open('[本地檔案]', 'rb') img = base64.b64encode(f.read()) params = {"image":img,"top_num":6} params = urllib.parse.urlencode(params).encode(encoding='UTF8') access_token = '[呼叫鑑權介面獲取的token]' request_url = request_url + "?access_token=" + access_token request = urllib.request.Request(url=request_url, data=params) request.add_header('Content-Type', 'application/x-www-form-urlencoded') response = urllib.request.urlopen(request) content = response.read() if content: print(bytes(content).decode('utf-8'))
三、 報錯總結:
1.python語言\xe6\x97\xa0\xe6\xb3\x95\xe5\x8a\xa0\xe8亂碼字元轉換:
>>> t= r'\xe6\x97\xa0\xe6\xb3\x95\xe5\x8a\xa0\xe8\xbd\xbd\xe6\x8e\xa7\xe5\x88\xb6\xe5\x99\xa8:Index.php'
>>> print (bytes(t).decode('utf-8'))
摘自:https://blog.csdn.net/isozhj/article/details/70738882
2.python3.x執行post請求時報錯“POST data should be bytes or an iterable of bytes...”的解決方法:
在urlencode語句後加encode(encoding='UTF8')
eg:
params = urllib.parse.urlencode({'userid':'381fccbd776c4deb'}).encode(encoding='UTF8')
摘自:https://blog.csdn.net/dushu990/article/details/51767189