项目牛津扬声器识别 - 无效的音频格式

时间:2016-03-19 18:43:15

标签: python audio flask voice-recognition microsoft-cognitive

我一直在努力使用Project Oxford Speaker Recognition API (https://dev.projectoxford.ai/docs/services/563309b6778daf02acc0a508/operations/5645c3271984551c84ec6797)。

我已成功录制麦克风上的声音,将其转换为所需的WAV(PCM,16bit,16K,Mono)。

问题是当我尝试将此文件作为二进制流发布到API时,它会返回无效的音频格式错误消息。

网站上的演示(https://www.projectoxford.ai/demo/SPID)接受相同的文件。

我正在使用python 2.7和这段代码。

import httplib
import urllib
import base64
import json
import codecs

headers = {
    # Request headers
    'Content-Type': 'application/octet-stream',
    'Ocp-Apim-Subscription-Key': '{KEY}',
}

params = urllib.urlencode({
})


def enroll(audioId):
    conn = httplib.HTTPSConnection('api.projectoxford.ai')
    file = open('test.wav','rb')
    body = file.read()
    conn.request("POST", "/spid/v1.0/verificationProfiles/" + audioId +"/enroll?%s" % params, str(body), headers)
    response = conn.getresponse()
    data = response.read()
    print data
    conn.close()
    return data

这是我得到的回应。

{
    "error": {
        "code": "BadRequest",
        "message": "Invalid Audio Format"
    }
}

如果有人能指导我,我会失踪。我已经验证了音频文件的所有属性以及API所需的要求,但没有运气。

所有答案和评论都表示赞赏。

1 个答案:

答案 0 :(得分:2)

我将这个文件发送到Project oxford,我的测试程序是ruby,它运行正常。我认为问题可能出在你发送的其他参数中。尝试将“内容类型”标题更改为“audio / wav; samplerate = 1600'这是我使用的标题。我还发送了一个带有文件大小的“内容长度”标题。我不确定是否需要'内容长度',但包含它是一个很好的标准。