Python開發之路(2)— 使用百度API實現語音識別

Python開發之路(2)— 使用百度API實現語音識別,第1張

一、在百度智能雲創建語音識別應用

打開百度智能雲:https://cloud.baidu.com/
登錄控制台,選擇語音技術:
Python開發之路(2)— 使用百度API實現語音識別,在這裡插入圖片描述,第2張
然後點擊創建應用
Python開發之路(2)— 使用百度API實現語音識別,在這裡插入圖片描述,第3張
然後輸入應用名稱名稱、選擇應用類型,接口選擇默認即可,輸入描述,然後點擊立即創建即可
Python開發之路(2)— 使用百度API實現語音識別,在這裡插入圖片描述,第4張
然後我們就可以看到創建好的應用
Python開發之路(2)— 使用百度API實現語音識別,在這裡插入圖片描述,第5張

二、獲取Access Token

首先導入requests包:

importrequests

然後使用過程創建的項目的API Key和Secret_Key獲取Access Token
Python開發之路(2)— 使用百度API實現語音識別,在這裡插入圖片描述,第6張

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')

運行,可以得到
Python開發之路(2)— 使用百度API實現語音識別,在這裡插入圖片描述,第7張
我們將其封裝成一個函數:

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將上傳音頻文件,獲得語言識別結果

通過查閲百度語音識別的技術文档,我們有兩種方法將文件上傳:
Python開發之路(2)— 使用百度API實現語音識別,在這裡插入圖片描述,第8張
因爲第二種更簡單,我們使用第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進行錄音和播音
不過要注意百度語音識別的對文件的要求
Python開發之路(2)— 使用百度API實現語音識別,在這裡插入圖片描述,第9張
運行程序,可以看到,返廻了識別到的結果
Python開發之路(2)— 使用百度API實現語音識別,在這裡插入圖片描述,第10張
最後貼上完整代碼:

#!/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()

生活常識_百科知識_各類知識大全»Python開發之路(2)— 使用百度API實現語音識別

0條評論

    發表評論

    提供最優質的資源集郃

    立即查看了解詳情