【问题标题】:DialogFlow not recognizing audio inputsDialogFlow 无法识别音频输入
【发布时间】:2020-11-14 06:50:13
【问题描述】:

我正在使用 DialogFlow 聊天机器人来检测文本和音频输入,文本工作正常,但音频不能, 我正在读取我生成的音频文件(.mp3 和 .wav)并在 nodejs 中读取它并发送它但没有响应,我得到一个空意图,它甚至没有登录 DialogFlow 历史记录,但是当我提供它一个示例来自 DialogFlow 的音频效果很好, 这是我的代码,我遵循 DialogFlow 提供的文档:

const sessionId = uuid.v4();

  const sessionClient = new dialogflow.SessionsClient({
    projectId,
    keyFilename,
  });

  const readFile = util.promisify(fs.readFile);
  const inputAudio = await readFile('myfilepath.mp3');
  const sessionPath = sessionClient.projectAgentSessionPath(projectId, sessionId);
  const request = {
    session: sessionPath,
    queryInput: {
      audioConfig: {
        audioEncoding: 'AUDIO_ENCODING_LINEAR_16',
        sampleRateHertz: 16000,
        languageCode: 'en-US',
      },
    },
    inputAudio,
  };
  const [response] = await sessionClient.detectIntent(request);

  console.log('Detected intent:');
  console.log(response);

  const result = response.queryResult;

  console.log(`  Query: ${result.queryText}`);
  console.log(`  Response: ${result.fulfillmentText}`);

响应总是

{
  responseId: '',
  queryResult: {
    fulfillmentMessages: [],
    outputContexts: [],
    queryText: '',
    speechRecognitionConfidence: 0,
    action: '',
    parameters: null,
    allRequiredParamsPresent: false,
    fulfillmentText: '',
    webhookSource: '',
    webhookPayload: null,
    intent: null,
    intentDetectionConfidence: 0,
    diagnosticInfo: null,
    languageCode: 'en-US',
    sentimentAnalysisResult: null
  },
  webhookStatus: null,
  outputAudio: <Buffer >,
  outputAudioConfig: null
}

是否有特定的方法来生成我必须遵循的音频文件或什么?

谢谢。

【问题讨论】:

    标签: javascript node.js dialogflow-es


    【解决方案1】:

    我认为您的问题是由于音频文件的编码和采样率造成的。

    我能够复制该场景并使用来自nodejs-dialogflowsamples 获得您的response 输出,尤其是detect.js one,其中运行示例的MP3 文件如下所示:

    node detect audio resources/book_a_room.mp3 -r 16000
    

    查看运行示例中支持的编码时:

    node detect audio -help
    

    我们可以看到可用的选项如下:

      -e, --encoding    The encoding of the input audio.
                  [choices: "AUDIO_ENCODING_LINEAR_16", "AUDIO_ENCODING_FLAC", "AUDIO_ENCODING_MULAW", "AUDIO_ENCODING_AMR",
                      "AUDIO_ENCODING_AMR_WB", "AUDIO_ENCODING_OGG_OPUS", "AUDIO_ENCODING_SPEEX_WITH_HEADER_BYTE"] [default:
                                                                                                 "AUDIO_ENCODING_LINEAR_16"]
    

    这些选项也可以在 Dialogflow API reference for AudioEncoding 上看到。从那里我们可以得出结论,MP3 不是受支持的编码,这就是为什么您会得到 response 输出。

    在查看 Dialogflow API reference 时,您还可以看到以下内容:

    ...有关详细信息,请参阅 Cloud Speech API documentation

    查看该文档并转到编码section,您可以看到:

    注意:Speech-to-Text 支持使用 LINEAR16 或 MULAW 编码的 WAV 文件 音频。

    回到 Dialogflow API 中的编码选项,我们可以看到,对于 WAV 文件,您可以使用的是:

    • AUDIO_ENCODING_LINEAR_16
    • AUDIO_ENCODING_MULAW

    请注意,AUDIO_ENCODING_LINEAR_16 选项是默认设置的。

    因此,您可以根据您的 WAV 文件(例如 44100)使用具有适当采样率的 1 个通道的 WAV 文件,然后您将获得所需的响应。例如:

    node detect audio resources/book_a_room_1ch_16Khz.wav -r 16000
    

    或者

    node detect audio resources/book-a-room_1ch_44.1Khz.wav -r 44100
    

    否则,您将收到如下错误消息:

    { Error: 3 INVALID_ARGUMENT: Must use single channel (mono) audio, but WAV header indicates 2 channels.
        at Object.callErrorFromStatus ...
    

    { Error: 3 INVALID_ARGUMENT: sample_rate_hertz (16000) in RecognitionConfig must either be omitted or match the value in the WAV header ( 44100).
        at Object.callErrorFromStatus ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 2012-01-24
      相关资源
      最近更新 更多