Search code examples
pythonazurepython-requestsazure-cognitive-services

Azure cognitive service: how to pass multiple identificationProfileIds in Speaker Recognition API


I have some problem with Azure cognitive service. I'm using REST/API and python request library. I have to set identificationProfileIds but i have no idea how to insert 2 or more id_person in this post request.

trump = "4aeXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
obama = "6c6XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 

requests.post("https://westus.api.cognitive.microsoft.com/spid/v1.0/identificationProfiles/{identificationProfileIds}/enroll?shortAudio=False".format(identificationProfileIds = [obama + trump] ),
headers={"Ocp-Apim-Subscription-Key": "XXXXXXX", "Content-Type": "multipart/form-data"},
 data = open('XXXXXXX_16000_mono_16bit.wav', 'rb').read())

Solution

  • You need to send in concatenated format as follows,

    url = 'https://westus.api.cognitive.microsoft.com/spid/v1.0/identify'
    
    identificationProfileIds = ''
    for value in profile_ids.values():
        identificationProfileIds += value + ','
    identificationProfileIds = identificationProfileIds[:-1]
    print(identificationProfileIds)
    
    params = {
        'identificationProfileIds': identificationProfileIds,
        'shortAudio': True,
    }
    
    json_data = {
        "locale": "en-us",
    }
    
    headers = {
        "Ocp-Apim-Subscription-Key": key,
        'Content-Type': 'application/json',
    }
    
    try:
        response = requests.post(url, data=data, json=json_data, headers=headers, params=params)
        print('response:', response.status_code)
        if response.status_code == 202:
            print(response.headers['Operation-Location'])
            return response.headers['Operation-Location']
        else:
            print('Error:{}, {}, {}'.format(response.status_code, response.text, response.content))
            return False
    except Exception as e:
        print('[Errno {0}] {1}'.format(e.errno, e.strerror))
        return False