容器上的 Azure 语音到文本 -->peechsdk.transcription.ConversationTranscriber 失败,websocket 升级失败 404

问题描述 投票:0回答:1

我在 OpenShift 集群上的本地使用 Azure 容器 SpeechToText 服务。我使用最新版本:4.7.0-amd64-fr-fr。另一方面,我有小型容器化 Flask API,它使用 azure 认知服务 sdk 与容器交互,这是我能够在我的组织中使用 websocket 协议的唯一方法。

对于我实现的使用

speechsdk.SpeechRecognizer
的方法,一切正常,但使用
speechsdk.transcription.ConversationTranscriber
时,转录会因以下错误而被系统取消:

即将结束 ConversationTranscriptionCanceledEventArgs(session_id=edfb67ce81194adebba896e90996e20d, 结果=ConversationTranscriptionResult(result_id=614535e47f7b48ba9f7c2b22c1071c07, peaker_id=、text=、reason=ResultReason.Canceled)) 取消详细信息(原因=CancellationReason.Error, error_details="WebSocket 升级失败:内部服务错误 (404)。 错误详细信息:失败,未找到 HTTP 404 ws://..svc.cluster.local/speech/universal/v2?language=fr-FR X-ConnectionId: edfb67ce81194adebba896e90996e20d 请检查请求 细节。会话 ID: edfb67ce81194adebba896e90996e20d")

我使用的是 Redhat rhel8

这是我的代码:

host=ws://<service>.<namespace>.svc.cluster.local:80

app.route('/conversation', methods=['POST'])
@handle_file_d
def conversation_transcription(filename):
    
    done = False

    speech_config = speechsdk.SpeechConfig(host=host)
    audio_config = speechsdk.audio.AudioConfig(filename=filename)
    

    speech_config.speech_recognition_language=os.environ.get('SPEECH_LANGUAGE')
    conversation_transcriber = speechsdk.transcription.ConversationTranscriber(speech_config=speech_config, 
                                                                                audio_config=audio_config)
        
    def conversation_transcriber_recognition_canceled_cb(evt: speechsdk.SessionEventArgs):
        print('Canceled event')

    def conversation_transcriber_session_started_cb(evt: speechsdk.SessionEventArgs):
        print('SessionStarted event')

    def conversation_transcriber_session_stopped_cb(evt: speechsdk.SessionEventArgs):
        print('SessionStopped event')

    def conversation_transcriber_transcribed_cb(evt: speechsdk.SpeechRecognitionEventArgs):
        if evt.result.reason == speechsdk.ResultReason.RecognizedSpeech:
            text = '\tText={}\n'.format(evt.result.text)
            speaker_id = '\tSpeaker ID={}\n'.format(evt.result.speaker_id)
            print(f"{speaker_id}, {text}")
        elif evt.result.reason == speechsdk.ResultReason.NoMatch:
            # output.put('\tNOMATCH: Speech could not be TRANSCRIBED: {}\n'.format(evt.result.no_match_details))
            print('\tNOMATCH: Speech could not be TRANSCRIBED: {}\n'.format(evt.result.no_match_details))
            pass
        else:
            pass
    
    def start_transcribing_async_cb(evt):
        print('Start transcribing event')
    
    def stop_cb(evt: speechsdk.SessionEventArgs):
        #"""callback that signals to stop continuous recognition upon receiving an event `evt`"""
        print('CLOSING on {}'.format(evt))
        if evt.result.reason == speechsdk.ResultReason.Canceled:
            cancellation_details = evt.result.cancellation_details
            print(cancellation_details)
        nonlocal done
        done = True
        
    conversation_transcriber.transcribed.connect(conversation_transcriber_transcribed_cb)
    conversation_transcriber.session_started.connect(conversation_transcriber_session_started_cb)
    conversation_transcriber.session_stopped.connect(conversation_transcriber_session_stopped_cb)
    conversation_transcriber.canceled.connect(conversation_transcriber_recognition_canceled_cb)
    # stop transcribing on either session stopped or canceled events
    conversation_transcriber.session_stopped.connect(stop_cb)
    conversation_transcriber.canceled.connect(stop_cb)

    conversation_transcriber.start_transcribing_async()
    
    
    while not done:
        time.sleep(.5)

    conversation_transcriber.stop_transcribing_async()

    return "done"

我尝试使用不同版本的python sdk(目前我使用的是1.37.0)和不同版本的speechToText图像,但我仍然得到相同的错误。

转录从未真正开始,它似乎从未到达 SpeechToText 容器。

非常感谢:)

python networking websocket openshift azure-cognitive-services
1个回答
0
投票

感谢您联系我们并报告此问题。

从错误消息来看,问题似乎出在您的连接端点 url 上。

计划一: 请启用 SDK 日志记录并检查是否提供详细的错误日志信息。

计划2: 另外,为了确保端点地址与容器兼容,您可以使用 1.34.0 之前的某些 SDK 版本记录日志(其中 v2 端点被设为默认值: https://learn.microsoft.com/azure/ai-services/speech-service/releasenotes?tabs=speech-sdk#speech-sdk-1340-november-2023-release )所以例如1.33.0,并检查那里的connectionUrl的值。

计划3: 您能否在

speechConfig
中设置 v1 端点而不是 v2 端点?这是一个例子:

speech_config
= speechsdk.SpeechConfig(
endpoint
="ws://localhost:5000/speech/recognition/conversation/cognitiveservices/v1?endSilenceTimeoutMs=5000&initialSilenceTimeoutMs=1000")

计划4: 如果没有帮助尝试使用:

SpeechConfig(endpoint=
"and give the full connection Url with the whole resource path and all query parameters"

等待您的回复。

© www.soinside.com 2019 - 2024. All rights reserved.