我有一个大型mp3文件(约1.8GB),我必须使用wit.ai进行转录。 由于我正在使用wav文件,我将其转换为wav文件。
但是由于wit.ai的语音api不能超过10s长音频,我计划将文件串流传输。但有些我如何得到400响应(坏请求)。我无法找到,我发错了什么。以下是详细信息:
headers = {'authorization': 'Bearer ' + wit_access_token,
'Content-Type': 'audio/wav','Transfer-encoding': 'chunked'}
with open('meeting-record.wav', 'rb') as f:
audio = f.read(2048) # taken it any number
resp = requests.post(API_ENDPOINT, headers = headers,
data = audio)
print(resp)
data = json.loads(resp.content)
text = data['_text']
print(text)
f.close()
我收到以下输出
<Response [400]>
Traceback (most recent call last):
File ".\sound-record.py", line 61, in <module>
text = data['_text']
KeyError: '_text'
有人可以显示一些指针,它出错了吗?
答案 0 :(得分:1)
我以前没有使用过wit.ai API,但是Bing Speech API似乎要求以类似的方式提供数据。我不确定是否由于代码而出错,但是为了正确地分块和流传输文件,您可以在其中添加另一个函数,如下所示:
def stream_audio_file(speech_file, chunk_size=1024):
# Chunk audio file
with open(speech_file, 'rb') as f:
while 1:
data = f.read(1024)
if not data:
break
yield data
现在,只要您在文件中的某处具有该功能即可为您流式传输和分块数据,就可以返回到初始方法:
headers = {
'Accept': 'application/json',
'Transfer-Encoding': 'chunked',
'Content-type': 'audio/wav',
'Authorization': 'Bearer {0}'.format(YOUR_AUTH_TOKEN)
}
data = stream_audio_file(YOUR_AUDIO_FILE)
r = requests.post(url, headers=headers, data=data)
results = json.loads(r.content)
print(results)
旁注: 您提到想要在自己的服务器上安装某些产品。有一个名为pocketsphinx的不错的模块,该模块是免费的,托管在您的计算机上,并用Python编写。它与SpeechRecognition模块非常匹配,该模块在顶部提供了一个不错的层,因此您不必花费太多时间来格式化请求。
答案 1 :(得分:0)