python使用百度语音识别API注意事项
生活随笔
收集整理的这篇文章主要介绍了
python使用百度语音识别API注意事项
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
代码如下:
# -*- coding:utf-8 -*- #http://blog.csdn.net/happen23/article/details/45821697 #百度语音识别API的使用样例(python实现) #encoding=utf-8import wave import urllib, urllib2, pycurl import base64 import json ## get access token by api key & secret keydef 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 * 2audio_data = fp.readframes(nf)cuid = "xxxxxxxxxx" #my xiaomi phone MACsrv_url = 'http://vop.baidu.com/server_api' + '?cuid=' + cuid + '&token=' + tokenhttp_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 dictc.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 valif __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-8import wave import urllib, urllib2, pycurl import base64 import subprocess import json ## get access token by api key & secret keydef 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 ffmpegfp = wave.open('tian.wav', 'rb')nf = fp.getnframes()f_len = nf * 2audio_data = fp.readframes(nf)cuid = "xxxxxxxxxx" #my xiaomi phone MACsrv_url = 'http://vop.baidu.com/server_api' + '?cuid=' + cuid + '&token=' + tokenhttp_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 dictc.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 valif __name__ == "__main__":token = get_token()use_cloud(token)所谓的离线资源下载,其实仍然是本地向服务器请求,效率上是无法提高的。
总结
以上是生活随笔为你收集整理的python使用百度语音识别API注意事项的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Could not run curl-c
- 下一篇: file does not start