如何修复无异常迭代请求!问题

我对语音识别主题很陌生


我正在做一个项目,我可以在工作区中找到 Pepper bot 的一些用例。与 Pepper 一起玩,我们发现了它的语音识别能力的一些问题。我发现我们可以尝试将它与外部引擎连接起来,我从 GCP 中选择了 DialogFlow。也因为我发现了一些与该服务的集成。我使用了这个项目的代码


import traceback

from naoqi import qi



# [START dialogflow_detect_intent_streaming]

def detect_intent_stream(project_id, session_id, audio_file_path,

                         language_code,ip):


    """Returns the result of detect intent with streaming audio as input.

    Using the same `session_id` between requests allows continuation

    of the conversation."""

    import dialogflow_v2 as dialogflow


    session_client = dialogflow.SessionsClient()


    # Note: hard coding audio_encoding and sample_rate_hertz for simplicity.

    audio_encoding = dialogflow.enums.AudioEncoding.AUDIO_ENCODING_LINEAR_16

    sample_rate_hertz = 44100


    session_path = session_client.session_path(project_id, session_id)

    print('Session path: {}\n'.format(session_path))


    def request_generator(audio_config, audio_file_path):

        query_input = dialogflow.types.QueryInput(audio_config=audio_config)

        # The first request contains the configuration.

        yield dialogflow.types.StreamingDetectIntentRequest(

            session=session_path, query_input=query_input)

        # Here we are reading small chunks of audio data from a local

        # audio file.  In practice these chunks should come from

        # an audio input device.

        try:

            with open(audio_file_path, 'rb') as audio_file:

                while True:

                    chunk = audio_file.read(4096)

                    print(chunk)

                    if not chunk:

                        break

        except:

                traceback.print_exc()


                # The later requests contains audio data.


白衣非少年
浏览 197回答 2
2回答

拉风的咖菲猫

所以显然你正在传递StringIO到detect_intent_stream:audio_file_pathwith open(audio_file_path, 'rb') as audio_file:您尝试将其StringIO作为文件打开但:StringIO 实例已经是一个打开的文件。另一方面,open 命令只接受文件名来返回一个打开的文件。StringIO 实例不适合作为文件名。关联所以request_generator函数detect_intent_stream需要看起来像:def request_generator(audio_config, audio_file_path):        query_input = dialogflow.types.QueryInput(audio_config=audio_config)                yield dialogflow.types.StreamingDetectIntentRequest(            session=session_path, query_input=query_input)                while True:            chunk = audio_file_path.read(4096)            if not chunk:                break            yield dialogflow.types.StreamingDetectIntentRequest(            input_audio=chunk)

精慕HU

您好,您的音频文件或网络连接可能有问题。您是否尝试过发送一个简单的文本或预先录制的 wav 文件作为 dialogflow 的输入?这个脚本在我的辣椒上效果很好:(我的 wav 文件是 Mono,44100Hz,32Bit)import osimport timeimport sysimport uuidimport googledef printResponse(response):    print('=' * 20)    print('Query text: {}'.format(response.query_result.query_text.encode('utf-8')))    print('Detected intent: {} (confidence: {})'.format(        response.query_result.intent.display_name.encode('utf-8'),        response.query_result.intent_detection_confidence))    print('Fulfillment text: {}'.format(        response.query_result.fulfillment_text.encode('utf-8')))def detect_intent_audio(project_id, session_id, audio_file_path,                        language_code, sample_rate_hertz):    import dialogflow_v2 as dialogflow    session_client = dialogflow.SessionsClient()    # Note: hard coding audio_encoding and sample_rate_hertz for simplicity.    audio_encoding = dialogflow.enums.AudioEncoding.AUDIO_ENCODING_LINEAR_16    session = session_client.session_path(project_id, session_id)    with open(audio_file_path, 'rb') as audio_file:        input_audio = audio_file.read()    audio_config = dialogflow.types.InputAudioConfig(        audio_encoding=audio_encoding, language_code=language_code,        sample_rate_hertz=sample_rate_hertz)    query_input = dialogflow.types.QueryInput(audio_config=audio_config)    response = session_client.detect_intent(        session=session, query_input=query_input,        input_audio=input_audio)    printResponse(response)def detect_intent_stream(project_id, session_id, audio_file_path,                         language_code, sample_rate_hertz):    import dialogflow_v2 as dialogflow    session_client = dialogflow.SessionsClient()    # Note: hard coding audio_encoding and sample_rate_hertz for simplicity.    audio_encoding = dialogflow.enums.AudioEncoding.AUDIO_ENCODING_LINEAR_16    session_path = session_client.session_path(project_id, session_id)    def request_generator(audio_config, audio_file_path):        query_input = dialogflow.types.QueryInput(audio_config=audio_config)        # The first request contains the configuration.        yield dialogflow.types.StreamingDetectIntentRequest(            session=session_path, query_input=query_input)        # Here we are reading small chunks of audio data from a local        # audio file.  In practice these chunks should come from        # an audio input device.        with open(audio_file_path, 'rb') as audio_file:            while True:                chunk = audio_file.read(4096)                if not chunk:                    break                # The later requests contains audio data.                yield dialogflow.types.StreamingDetectIntentRequest(                    input_audio=chunk)    audio_config = dialogflow.types.InputAudioConfig(        audio_encoding=audio_encoding, language_code=language_code,        sample_rate_hertz=sample_rate_hertz)    requests = request_generator(audio_config, audio_file_path)    responses = session_client.streaming_detect_intent(requests)    print('=' * 20)    for response in responses:        print('Intermediate transcript: "{}".'.format(                response.recognition_result.transcript.encode('utf-8')))    # Note: The result from the last response is the final transcript along    # with the detected content.    printResponse(response)def detect_intent_texts(project_id, session_id, texts, language_code):    import dialogflow_v2 as dialogflow    session_client = dialogflow.SessionsClient()    session = session_client.session_path(project_id, session_id)    for text in texts:        text_input = dialogflow.types.TextInput(            text=text, language_code=language_code)        query_input = dialogflow.types.QueryInput(text=text_input)        response = session_client.detect_intent(            session=session, query_input=query_input)        printResponse(response)project_id = 'my_project_id'session_id = str(uuid.uuid4())language_code = 'de'os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = os.path.join('/home/me/', 'xyz.json')wav_path = os.path.join('/home/me/', 'audio.wav')try:    print ("detect_intent_texts:")    detect_intent_texts(project_id, session_id, ["Hallo"], language_code)    print('=' * 20)       print ("detect_intent_audio:")    detect_intent_audio(project_id, session_id, wav_path, language_code, 44100)    print('=' * 20)    print ("detect_intent_stream:")    detect_intent_stream(project_id, session_id, wav_path, language_code, 44100)    print('=' * 20)except google.api_core.exceptions.ServiceUnavailable:        print("503 Connect Failed")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python