Azure Cognitive Services - настраиваемая речь с питоном и веб-сокетами

Я использую Microsoft Custom Speech Services в Python. В настоящее время только с конечными точками HTTP. Согласно документации, веб-сокеты также поддерживаются.

У кого-нибудь есть пример отправки данных через веб-сокеты? Я до сих пор работал, открывая websocket для обслуживания моего токена. Но когда я начинаю отправлять данные, соединение закрывается с ошибкой 104.

Подробности: - Python3 - websocket-клиент - wav с заголовком RIFF (работает с HTTP)

Спасибо!

Пример кода:

# pip install websocket-client
def main_websocket_cris():
    path_root = os.path.abspath(os.path.dirname(__file__))
    filename = os.path.join(path_root, 'example_011.wav')
    chunk_size = 8192

    key = '<mykey>'
    url = 'wss://<mydeployment>.api.cris.ai/ws/cris/speech/recognize'
    token = auth_cris(key)

    header = ['Authorization: Bearer %s' % token]
    ws = websocket.create_connection(url, header=header)
    try:
        print('--- send ping')
        ws.ping()
        print('> ping done')

        print('--- send pong')
        ws.pong(b'')
        print('> pong done')

        print('--- status and headers')
        print('> status:',  ws.getstatus())
        print('> headers:', ws.getheaders())
        print('> status done')

        headers = ['Path: audio',
                   'X-RequestId: %s' % str(uuid.uuid4()).replace('-', ''),
                   'X-Timestamp: %s' % datetime.datetime.now().isoformat(),
                   'Content-Type: audio/x-wav']
        headers = {
            'Path':         'audio',
            'X-RequestId':  str(uuid.uuid4()).replace('-', ''),
            'X-Timestamp':  str(datetime.datetime.now().isoformat()),
            'Content-Type': 'audio/x-wav'
        }
        print(headers)
        #ws.send(json.dumps(headers))

        print('--- send binary data')
        print('> read file in chunks of %s bytes' % chunk_size)
        with open(filename, 'rb') as f:
            while True:
                chunk = f.read(chunk_size)
                if not chunk:
                    break
                ws.send(json.dumps(headers))
                ws.send_binary(chunk)
        print("> Sent")
        print('--- now receive answer')
        print("> Receiving...")
        result = ws.recv()
        print("> Received '%s'" % result)
    finally:
        print('--- close')
        ws.close()
        print('> closed')

1 ответ

Я рекомендую использовать конечные точки протокола речи (например, "wss://YOUR_DEPLOYMENT.api.cris.ai/speech/recognition/interactive/cognitiveservices/v1").

Протокол, используемый этими конечными точками, задокументирован здесь: Microsoft Speech WebSocket Protocol. Вы можете найти реализацию протокола на JavaScript здесь.

Другие вопросы по тегам