使用 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_final
为 True
时,才会返回通过 Google Speech-To-Text 转录的单词的时间偏移量。
换句话说,用于实时转录的带时间戳的单词边界似乎仅在转录结束时可用。
我知道我不是唯一一个要求此功能的 API 消费者。我无法想象这很难做到,我怀疑修复不会破坏当前的 API.
通过 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_final
为 True
时,才会返回通过 Google Speech-To-Text 转录的单词的时间偏移量。
换句话说,用于实时转录的带时间戳的单词边界似乎仅在转录结束时可用。
我知道我不是唯一一个要求此功能的 API 消费者。我无法想象这很难做到,我怀疑修复不会破坏当前的 API.