使用网上的代码,语音识别效果差
牛清仁 发布于2017-11 浏览:1824 回复:3
0
收藏
import wave
import urllib, urllib2, pycurl
import base64
import json
## get access token by api key & secret key

def get_token():
   apiKey = "a11rDp****g4"
   secretKey = "5394e0a8f7c****744f80f"
   grant_type = "client_credentials"
   baidu_server = "https://openapi.baidu.com/oauth/2.0/token?"
   auth_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=a11rDpfPoFd1Nnk***client_secret=5394e*********7c2e2b15665844f80f"

   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('16k.wav', 'rb')
nf = fp.getnframes()
f_len = nf * 2
   audio_data = fp.readframes(nf)

cuid = "task_1" #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)



收藏
点赞
0
个赞
共3条回复 最后由用户已被禁言回复于2022-04
#4牛清仁回复于2017-11

fujiayi1984:

回复牛清仁:核对下原始音频是不是 

Content-Type: audio/pcm; rate=8000' Content-Type: audio/pcm; rate=8000'


回复fujiayi1984:通过对声音数据格式转换,更改采样率,已解决!谢谢您

0
#3牛清仁回复于2017-11

fujiayi1984:

回复牛清仁:核对下原始音频是不是 

Content-Type: audio/pcm; rate=8000' Content-Type: audio/pcm; rate=8000'


回复fujiayi1984:测试用的声音文件为百度语音官方提供的例子

0
#2fujiayi1984回复于2017-11

牛清仁:

import wave
import urllib, urllib2, pycurl
import base64
import json
## get access token by api key & secret key

def get_token():
   apiKey = "a11rDp****g4"
   secretKey = "5394e0a8f7c****744f80f"
   grant_type = "client_credentials"
   baidu_server = "https://openapi.baidu.com/oauth/2.0/token?"
   auth_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=a11rDpfPoFd1Nnk***client_secret=5394e*********7c2e2b15665844f80f"

   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('16k.wav', 'rb')
nf = fp.getnframes()
f_len = nf * 2
   audio_data = fp.readframes(nf)

cuid = "task_1" #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)



回复牛清仁:核对下原始音频是不是 

Content-Type: audio/pcm; rate=8000' Content-Type: audio/pcm; rate=8000'


0
TOP
切换版块