Azure认知服务:Python调用说话人识别API传递多identificationProfileIds问题
解决Azure说话人识别API多identificationProfileIds传入问题
我看你在调用Azure认知服务的说话人识别注册API时,卡在了多人员ID的传递上——你的代码里把两个ID拼接成一个字符串还放进列表里,这是不对的。API要求多个identificationProfileIds用逗号分隔的字符串形式放在URL路径里,既不是列表也不是拼接成单个ID。
错误点分析
你代码里的这部分逻辑有问题:
format(identificationProfileIds = [obama + trump])
这么写会让URL变成类似.../identificationProfiles/['6c6xxx4aexxx']/enroll...的格式,完全不符合API的参数要求,自然会请求失败。
正确的代码实现
我们只需要把多个ID用逗号连接成字符串,再传入URL格式化即可。另外要注意,用requests传递multipart/form-data类型的音频文件时,用files参数更规范(直接传data可能会导致服务端解析异常):
import requests # 你的人员识别ID trump = "4aeXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" obama = "6c6XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" # 用逗号拼接多个ID,生成符合要求的字符串 profile_ids = f"{obama},{trump}" # 构造正确的API请求地址 api_url = "https://westus.api.cognitive.microsoft.com/spid/v1.0/identificationProfiles/{identificationProfileIds}/enroll?shortAudio=False".format(identificationProfileIds=profile_ids) # 请求头配置 headers = { "Ocp-Apim-Subscription-Key": "XXXXXXX", } # 用files参数传递音频文件(匹配multipart/form-data格式) files = { 'audio': open('XXXXXXX_16000_mono_16bit.wav', 'rb') } # 发送POST请求 response = requests.post(api_url, headers=headers, files=files) # 打印响应结果排查问题 print(response.status_code) print(response.json())
额外注意事项
- 务必确保音频文件符合API要求:16kHz采样率、单声道、16位深度的WAV文件,这是注册成功的基础条件。
- 如果需要传入更多人员ID,继续用逗号追加即可,比如
f"{id1},{id2},{id3}"。 - 记得替换代码里的订阅密钥和音频文件路径为你自己的实际值。
内容的提问来源于stack exchange,提问作者Marco Scarselli
相关产品推荐
相关产品推荐

