一,、在百度智能云創(chuàng)建語音識(shí)別應(yīng)用
打開百度智能云:https://cloud.baidu.com/ 登錄控制臺(tái),,選擇語音技術(shù): 然后點(diǎn)擊創(chuàng)建應(yīng)用 然后輸入應(yīng)用名稱名稱,、選擇應(yīng)用類型,,接口選擇默認(rèn)即可,,輸入描述,然后點(diǎn)擊立即創(chuàng)建即可 然后我們就可以看到創(chuàng)建好的應(yīng)用
二,、獲取Access Token
首先導(dǎo)入requests包:
import requests
然后使用過程創(chuàng)建的項(xiàng)目的API Key和Secret_Key獲取Access Token
API_Key = 'DF2wS4DQ53TlS8ATxasy0ZXv' # 官網(wǎng)獲取的API_Key
Secret_Key = 'GvADiMXnwATEhaiKuOXg3t37KnKClGWr' # 為官網(wǎng)獲取的Secret_Key
#拼接得到Url
Url = 'https://aip./oauth/2.0/token?grant_type=client_credentials&client_id='+API_Key+'&client_secret='+Secret_Key
resp = request.urlopen(Url)
if resp:
result = json.loads(resp.read().decode('utf-8'))
print(result)
# 打印access_token
print(result['access_token'])
# 打印有效期
print(result['expires_in']/(60*60*24),'days')
運(yùn)行,,可以得到 我們將其封裝成一個(gè)函數(shù):
def get_token():
API_Key = 'DF2wS4DQ53TlS8ATxasy0ZXv' # 官網(wǎng)獲取的API_Key
Secret_Key = 'GvADiMXnwATEhaiKuOXg3t37KnKClGWr' # 為官網(wǎng)獲取的Secret_Key
#拼接得到Url
Url = 'https://aip./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_token
print('access_token:',result['access_token'])
return result['access_token']
except request.URLError as err:
print('token http response http code : ' + str(err.code))
三、通過Post將上傳音頻文件,,獲得語言識(shí)別結(jié)果
通過查閱百度語音識(shí)別的技術(shù)文檔,,我們有兩種方法將文件上傳: 因?yàn)榈诙N更簡單,我們使用第2種方法,,首先打開我們需要識(shí)別的音頻文件,,獲取里面的數(shù)據(jù)
# 打開需要識(shí)別的語音文件
speech_data = []
with open('01.wav', 'rb') as speech_file:
speech_data = speech_file.read()
length = len(speech_data)
if length == 0:
print('file 01.wav length read 0 bytes')
我們將Url里的參數(shù)設(shè)置好:
# 3、設(shè)置Url里的參數(shù)
params = {'cuid': '12345678python', # 用戶唯一標(biāo)識(shí),,用來區(qū)分用戶,,長度為60字符以內(nèi)。
'token': token, # 我們獲取到的 Access Token
'dev_pid': 1537 } # 1537 表示識(shí)別普通話
# 將參數(shù)編碼
params_query = parse.urlencode(params)
# 拼接成一個(gè)我們需要的完整的完整的url
Url = 'http://vop.baidu.com/server_api' + '?' + params_query
然后我們設(shè)置header,,即請求頭,我們使用的文件格式為wav,,百度語音識(shí)別只支持16000采樣率
# 4,、設(shè)置請求頭
headers = {
'Content-Type': 'audio/wav; rate=16000', # 采樣率和文件格式
'Content-Length': length
}
這樣就可以發(fā)送post請求了,將音頻數(shù)據(jù)直接放在body中就好
# 5,、發(fā)送請求,,音頻數(shù)據(jù)直接放在body中
# 構(gòu)建Request對象
req = request.Request(Url, speech_data, headers)
# 發(fā)送請求
res_f = request.urlopen(req)
# 打印結(jié)果
result = json.loads(res_f.read().decode('utf-8'))
print(result)
print('識(shí)別結(jié)果:',result['result'][0])
錄音程序可以參考上一篇博客:Python開發(fā)之路(1)— 使用Pyaudio進(jìn)行錄音和播音 不過要注意百度語音識(shí)別的對文件的要求 運(yùn)行程序,可以看到,,返回了識(shí)別到的結(jié)果 最后貼上完整代碼:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: William
# encoding:utf-8
import json
from urllib import request,parse
def get_token():
API_Key = 'DF2wS4DQ53TlS8ATxasy0ZXv' # 官網(wǎng)獲取的API_Key
Secret_Key = 'GvADiMXnwATEhaiKuOXg3t37KnKClGWr' # 為官網(wǎng)獲取的Secret_Key
#拼接得到Url
Url = 'https://aip./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_token
print('access_token:',result['access_token'])
return result['access_token']
except request.URLError as err:
print('token http response http code : ' + str(err.code))
def main():
# 1,、獲取 access_token
token = get_token()
# 2、打開需要識(shí)別的語音文件
speech_data = []
with open('01.wav', 'rb') as speech_file:
speech_data = speech_file.read()
length = len(speech_data)
if length == 0:
print('file 01.wav length read 0 bytes')
# 3,、設(shè)置Url里的參數(shù)
params = {'cuid': '12345678python', # 用戶唯一標(biāo)識(shí),,用來區(qū)分用戶,長度為60字符以內(nèi),。
'token': token, # 我們獲取到的 Access Token
'dev_pid': 1537 } # 1537 表示識(shí)別普通話
# 將參數(shù)編碼
params_query = parse.urlencode(params)
# 拼接成一個(gè)我們需要的完整的完整的url
Url = 'http://vop.baidu.com/server_api' + '?' + params_query
# 4,、設(shè)置請求頭
headers = {
'Content-Type': 'audio/wav; rate=16000', # 采樣率和文件格式
'Content-Length': length
}
# 5、發(fā)送請求,,音頻數(shù)據(jù)直接放在body中
# 構(gòu)建Request對象
req = request.Request(Url, speech_data, headers)
# 發(fā)送請求
res_f = request.urlopen(req)
result = json.loads(res_f.read().decode('utf-8'))
print(result)
print('識(shí)別結(jié)果:',result['result'][0])
if __name__ == '__main__':
main()
|