python使用百度語音識別API注意事項
程式碼如下:
# -*- coding:utf-8 -*-
#http://blog.csdn.net/happen23/article/details/45821697
#百度語音識別API的使用樣例(python實現)
#encoding=utf-8
import wave
import urllib, urllib2, pycurl
import base64
import json
## get access token by api key & secret key
def get_token():
apiKey = "xjlSpsvUgGF8a9ltNOtREoTr"
secretKey = "a95ca71b81854b526e7eb04ae8f51d23"
auth_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + apiKey + "&client_secret=" + secretKey;
res = urllib2.urlopen(auth_url)
json_data = res.read()
return json.loads(json_data)['access_token']
def dump_res(buf):
print buf
## post audio to server
def use_cloud(token):
fp = wave.open('8k.wav', 'rb')
nf = fp.getnframes()
f_len = nf * 2
audio_data = fp.readframes(nf)
cuid = "xxxxxxxxxx" #my xiaomi phone MAC
srv_url = 'http://vop.baidu.com/server_api' + '?cuid=' + cuid + '&token=' + token
http_header = [
'Content-Type: audio/pcm; rate=8000',
'Content-Length: %d' % f_len
]
c = pycurl.Curl()
c.setopt(pycurl.URL, str(srv_url)) #curl doesn't support unicode
#c.setopt(c.RETURNTRANSFER, 1)
c.setopt(c.HTTPHEADER, http_header) #must be list, not dict
c.setopt(c.POST, 1)
c.setopt(c.CONNECTTIMEOUT, 30)
c.setopt(c.TIMEOUT, 30)
c.setopt(c.WRITEFUNCTION, dump_res)
c.setopt(c.POSTFIELDS, audio_data)
c.setopt(c.POSTFIELDSIZE, f_len)
c.perform() #pycurl.perform() has no return val
if __name__ == "__main__":
token = get_token()
use_cloud(token)
http://yuyin.baidu.com/docs/asr/54
在上面這個連結的頁面中,往下拖,可以得到下載連結如下:
http://speech-doc.gz.bcebos.com/rest-api-asr/public_audio/public.zip
然後執行結果:
{"corpus_no":"6485972281376050071","err_msg":"success.","err_no":0,"result":["北京科技館,"],"sn":"651708407021510133099"}
注意事項:
百度的語音識別和語音合成用的是相同的
appid、API key和Secret Key,所以使用相同的token即可
獲取以上三個欄位的教程:
http://jingyan.baidu.com/article/f3e34a12df0cddf5eb65359f.html
後記:
下面的程式碼可以執行任意自己錄製的音訊檔案,注意,執行前必須apt-get install ffmpeg
另外,rate改成了16000,不然會識別不準,不過,也沒有經過大量測試,不知道識別準確的情況還會不會出現。
# -*- coding:utf-8 -*-
#http://blog.csdn.net/happen23/article/details/45821697
#百度語音識別API的使用樣例(python實現)
#encoding=utf-8
import wave
import urllib, urllib2, pycurl
import base64
import subprocess
import json
## get access token by api key & secret key
def get_token():
apiKey = "xjlSpsvUgGF8a9ltNOtREoTr"
secretKey = "a95ca71b81854b526e7eb04ae8f51d23"
auth_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + apiKey + "&client_secret=" + secretKey;
res = urllib2.urlopen(auth_url)
json_data = res.read()
return json.loads(json_data)['access_token']
def dump_res(buf):
print buf
## post audio to server
def use_cloud(token):
subprocess.call(['ffmpeg', '-i', 'tian.mp3', 'tian.wav'])#這句程式碼的意思是在終端中執行[]中的命令。所以執行的前提是apt-get install ffmpeg
fp = wave.open('tian.wav', 'rb')
nf = fp.getnframes()
f_len = nf * 2
audio_data = fp.readframes(nf)
cuid = "xxxxxxxxxx" #my xiaomi phone MAC
srv_url = 'http://vop.baidu.com/server_api' + '?cuid=' + cuid + '&token=' + token
http_header = [
'Content-Type: audio/pcm; rate=16000',
'Content-Length: %d' % f_len
]
c = pycurl.Curl()
c.setopt(pycurl.URL, str(srv_url)) #curl doesn't support unicode
#c.setopt(c.RETURNTRANSFER, 1)
c.setopt(c.HTTPHEADER, http_header) #must be list, not dict
c.setopt(c.POST, 1)
c.setopt(c.CONNECTTIMEOUT, 30)
c.setopt(c.TIMEOUT, 30)
c.setopt(c.WRITEFUNCTION, dump_res)
c.setopt(c.POSTFIELDS, audio_data)
c.setopt(c.POSTFIELDSIZE, f_len)
c.perform() #pycurl.perform() has no return val
if __name__ == "__main__":
token = get_token()
use_cloud(token)
所謂的離線資源下載,其實仍然是本地向伺服器請求,效率上是無法提高的。相關文章
- 語音識別中使用Cool Edit Pro的使用注意事項
- 百度API---語音識別API
- Python 百度語音識別與合成REST API及ffmpeg使用PythonRESTAPI
- 用python呼叫百度語音識別api批量處理本地語音檔案PythonAPI
- 百度語音識別cordova外掛
- 安裝百度語音識別sdk
- 【JAVA】使用百度語音識別 Rest API,遇到識別結果顯示亂碼的問題和解決JavaRESTAPI
- .Net Core使用HttpClient請求Web API注意事項HTTPclientWebAPI
- C 語言位域使用及其注意事項
- 使用parallel注意事項Parallel
- OCR身份證識別軟體拍攝注意事項
- Python Enum 使用的幾點注意事項Python
- SQL 語句的注意事項SQL
- Python語音識別終極指南Python
- ASR-使用whisper語音識別
- Python——常見注意事項Python
- 使用Google Fonts注意事項Go
- Go 切片使用注意事項Go
- 使用CocosBuilder注意事項UI
- removeChild使用時注意事項REM
- Oracle使用*的注意事項Oracle
- MySQL常用語句及注意事項MySql
- [譯] 使用 WFST 進行語音識別
- MySQL型別轉換注意事項MySql型別
- Go語言中 defer 使用場景及注意事項,你是要注意的!Go
- 【知識分享】windows伺服器使用有哪些注意事項Windows伺服器
- TCP使用注意事項總結TCP
- C中memcpy使用注意事項memcpy
- 萬兆網路卡使用注意事項
- MySQL半同步使用注意事項MySql
- Guava HashMultimap使用及注意事項Guava
- setbuf函式使用注意事項函式
- php getallheaders使用注意事項PHPHeader
- 使用直方圖注意事項直方圖
- python語音識別入門及實踐Python
- 【Android】 Android使用Java 8 語言功能注意事項AndroidJava
- 關於COMMIT和ROLLBACK語句的使用注意事項MIT
- jQuery 語法總結和注意事項jQuery