一、在百度智能云創(chuàng)建語(yǔ)音識(shí)別應(yīng)用
打開(kāi)百度智能云:https://cloud.baidu.com/ 登錄控制臺(tái),選擇語(yǔ)音技術(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
然后使用過(guò)程創(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))
三、通過(guò)Post將上傳音頻文件,獲得語(yǔ)言識(shí)別結(jié)果
通過(guò)查閱百度語(yǔ)音識(shí)別的技術(shù)文檔,我們有兩種方法將文件上傳: 因?yàn)榈诙N更簡(jiǎn)單,我們使用第2種方法,首先打開(kāi)我們需要識(shí)別的音頻文件,獲取里面的數(shù)據(jù)
# 打開(kāi)需要識(shí)別的語(yǔ)音文件
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í),用來(lái)區(qū)分用戶,長(zhǎng)度為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
然后我們?cè)O(shè)置header,即請(qǐng)求頭,我們使用的文件格式為wav,百度語(yǔ)音識(shí)別只支持16000采樣率
# 4、設(shè)置請(qǐng)求頭
headers = {
'Content-Type': 'audio/wav; rate=16000', # 采樣率和文件格式
'Content-Length': length
}
這樣就可以發(fā)送post請(qǐng)求了,將音頻數(shù)據(jù)直接放在body中就好
# 5、發(fā)送請(qǐng)求,音頻數(shù)據(jù)直接放在body中
# 構(gòu)建Request對(duì)象
req = request.Request(Url, speech_data, headers)
# 發(fā)送請(qǐng)求
res_f = request.urlopen(req)
# 打印結(jié)果
result = json.loads(res_f.read().decode('utf-8'))
print(result)
print('識(shí)別結(jié)果:',result['result'][0])
錄音程序可以參考上一篇博客:Python開(kāi)發(fā)之路(1)— 使用Pyaudio進(jìn)行錄音和播音 不過(guò)要注意百度語(yǔ)音識(shí)別的對(duì)文件的要求 運(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、打開(kāi)需要識(shí)別的語(yǔ)音文件
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í),用來(lái)區(qū)分用戶,長(zhǎng)度為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è)置請(qǐng)求頭
headers = {
'Content-Type': 'audio/wav; rate=16000', # 采樣率和文件格式
'Content-Length': length
}
# 5、發(fā)送請(qǐng)求,音頻數(shù)據(jù)直接放在body中
# 構(gòu)建Request對(duì)象
req = request.Request(Url, speech_data, headers)
# 發(fā)送請(qǐng)求
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()
|