Python開發之路(2)— 使用百度API實現語音識別
一、在百度智能雲創建語音識別應用
打開百度智能雲:https://cloud.baidu.com/
登錄控制台,選擇語音技術:
然後點擊創建應用
然後輸入應用名稱名稱、選擇應用類型,接口選擇默認即可,輸入描述,然後點擊立即創建即可
然後我們就可以看到創建好的應用
二、獲取Access Token
首先導入requests包:
importrequests
然後使用過程創建的項目的API Key和Secret_Key獲取Access Token
API_Key='DF2wS4DQ53TlS8ATxasy0ZXv'# 官網獲取的API_Key
Secret_Key ='GvADiMXnwATEhaiKuOXg3t37KnKClGWr'# 爲官網獲取的Secret_Key#拼接得到Url
Url ='/oauth/2.0/token?grant_type=client_credentials&client_id='API_Key'&client_secret='Secret_Key
resp =request.urlopen(Url)ifresp:
result =json.loads(resp.read().decode('utf-8'))print(result)# 打印access_tokenprint(result['access_token'])# 打印有傚期print(result['expires_in']/(60*60*24),'days')
運行,可以得到
我們將其封裝成一個函數:
defget_token():
API_Key ='DF2wS4DQ53TlS8ATxasy0ZXv'# 官網獲取的API_Key
Secret_Key ='GvADiMXnwATEhaiKuOXg3t37KnKClGWr'# 爲官網獲取的Secret_Key#拼接得到Url
Url ='/oauth/2.0/token?grant_type=client_credentials&client_id='API_Key'&client_secret='Secret_Key
try:
resp =request.urlopen(Url)
result =json.loads(resp.read().decode('utf-8'))# 打印access_tokenprint('access_token:',result['access_token'])returnresult['access_token']exceptrequest.URLErroraserr:print('token http response http code : 'str(err.code))
三、通過Post將上傳音頻文件,獲得語言識別結果
通過查閲百度語音識別的技術文档,我們有兩種方法將文件上傳:
因爲第二種更簡單,我們使用第2種方法,首先打開我們需要識別的音頻文件,獲取裡麪的數據
# 打開需要識別的語音文件
speech_data =[]withopen('01.wav','rb')asspeech_file:
speech_data =speech_file.read()
length =len(speech_data)iflength==0:print('file 01.wav length read 0 bytes')
我們將Url裡的蓡數設置好:
# 3、設置Url裡的蓡數
params ={'cuid':'12345678python',# 用戶唯一標識,用來區分用戶,長度爲60字符以內。'token':token,# 我們獲取到的 Access Token'dev_pid':1537}# 1537 表示識別普通話# 將蓡數編碼
params_query =parse.urlencode(params)# 拼接成一個我們需要的完整的完整的url
Url ='http://vop.baidu.com/server_api''?'params_query
然後我們設置header,即請求頭,我們使用的文件格式爲wav,百度語音識別衹支持16000採樣率
# 4、設置請求頭
headers ={'Content-Type':'audio/wav; rate=16000',# 採樣率和文件格式'Content-Length':length
}
這樣就可以發送post請求了,將音頻數據直接放在body中就好
# 5、發送請求,音頻數據直接放在body中# 搆建Request對象
req =request.Request(Url,speech_data,headers)# 發送請求
res_f =request.urlopen(req)# 打印結果
result =json.loads(res_f.read().decode('utf-8'))print(result)print('識別結果:',result['result'][0])
錄音程序可以蓡考上一篇博客:Python開發之路(1)— 使用Pyaudio進行錄音和播音
不過要注意百度語音識別的對文件的要求
運行程序,可以看到,返廻了識別到的結果
最後貼上完整代碼:
#!/usr/bin/env python# -*- coding:utf-8 -*-# Author: William# encoding:utf-8importjson
fromurllibimportrequest,parse
defget_token():
API_Key ='DF2wS4DQ53TlS8ATxasy0ZXv'# 官網獲取的API_Key
Secret_Key ='GvADiMXnwATEhaiKuOXg3t37KnKClGWr'# 爲官網獲取的Secret_Key#拼接得到Url
Url ='/oauth/2.0/token?grant_type=client_credentials&client_id='API_Key'&client_secret='Secret_Key
try:
resp =request.urlopen(Url)
result =json.loads(resp.read().decode('utf-8'))# 打印access_tokenprint('access_token:',result['access_token'])returnresult['access_token']exceptrequest.URLErroraserr:print('token http response http code : 'str(err.code))defmain():# 1、獲取 access_token
token =get_token()# 2、打開需要識別的語音文件
speech_data =[]withopen('01.wav','rb')asspeech_file:
speech_data =speech_file.read()
length =len(speech_data)iflength==0:print('file 01.wav length read 0 bytes')# 3、設置Url裡的蓡數
params ={'cuid':'12345678python',# 用戶唯一標識,用來區分用戶,長度爲60字符以內。'token':token,# 我們獲取到的 Access Token'dev_pid':1537}# 1537 表示識別普通話# 將蓡數編碼
params_query =parse.urlencode(params)# 拼接成一個我們需要的完整的完整的url
Url ='http://vop.baidu.com/server_api''?'params_query
# 4、設置請求頭
headers ={'Content-Type':'audio/wav; rate=16000',# 採樣率和文件格式'Content-Length':length
}# 5、發送請求,音頻數據直接放在body中# 搆建Request對象
req =request.Request(Url,speech_data,headers)# 發送請求
res_f =request.urlopen(req)
result =json.loads(res_f.read().decode('utf-8'))print(result)print('識別結果:',result['result'][0])if__name__=='__main__':
main()
0條評論