使用 Google Speech-To-Text 进行流式音频转录时,时间偏移是否有效?

Do time offsets work during streaming audio transcriptions with Google Speech-To-Text?

通过 Google Speech-To-Text 流式传输音频转录的时间偏移对我不起作用。我的配置如下所示:

const request = {
  config: {
    model: 'phoneCall',
    maxAlternatives: 1, // for real-time, we always parse a single alternative.
    enableWordTimeOffsets: true,
    encoding: "MULAW",
    sampleRateHertz: 8000,
    languageCode: "en-GB"
  },
  interimResults: true
};

一旦我们获得 WebSockets 连接的句柄,我们就会设置我们的转录回调:

recognizeStream = client
  .streamingRecognize(request)
  .on("error", console.error)
  .on("data", data => {
    console.log(data.results[0].alternatives[0].transcript);
    for (v in data.results[0].alternatives[0]) {
      console.log(`v=${data.results[0].alternatives[0][v]}`);
    }
    data.results[0].alternatives[0].words.forEach(wordInfo => {
      // NOTE: If you have a time offset exceeding 2^32 seconds, use the
      // wordInfo.{x}Time.seconds.high to calculate seconds.
      const startSecs =
        `${wordInfo.startTime.seconds}` +
        '.' +
        wordInfo.startTime.nanos / 100000000;
      const endSecs =
        `${wordInfo.endTime.seconds}` +
        '.' +
        wordInfo.endTime.nanos / 100000000;
      console.log(`Word: ${wordInfo.word}`);
      console.log(`\t ${startSecs} secs - ${endSecs} secs`);
    });
  });

然后当我们得到音频块时,我们这样做:

recognizeStream.write(msg.media.payload);

其中 msg 是从 WebSockets 消息解析的 JSON 对象:

const msg = JSON.parse(message);

不幸的是,数组 data.results[0].alternatives[0].words 始终为空,即使实时转录按预期工作。

有没有人证实时间偏移确实适用于 Google Speech-To-Text 的流式音频转录?

顺便说一下,这里是 nodejs API for Google Speech-To-Text.

的 git-repo

大量证据表明,只有当位 is_finalTrue 时,才会返回通过 Google Speech-To-Text 转录的单词的时间偏移量。

换句话说,用于实时转录的带时间戳的单词边界似乎仅在转录结束时可用。

我知道我不是唯一一个要求此功能的 API 消费者。我无法想象这很难做到,我怀疑修复不会破坏当前的 API.