似乎任何长音频(> 4分钟)都会使API产生两个操作而不是一个操作。无论我在做什么(使用事件发射器模式或promises),总是这样。
结果是我的数据库有两个转录而不是一个(我什至不明白当第二个文本到达后端时,猫鼬模型是否会中断)
请帮我解决这个问题,大约两个月以来我一直在努力解决这个问题。
环境细节
@google-cloud/speech
版本:2.3.0 运行代码:
async function transcribe(gcsuri, progressCB) {
const reducerforSingleAlternative = (obj, item, index, array) => {
item.alternatives[0].words.map(word => obj.words.push(word));
obj.confidence += item.alternatives[0].confidence;
obj.transcript += item.alternatives[0].transcript;
if (index === (array.length - 1)) {
obj.confidence /= array.length;
}
return obj;
};
process.env.GOOGLE_APPLICATION_CREDENTIALS = process.env.SPEECH_KEY;
const speech = require('@google-cloud/speech').v1p1beta1;
const client = new speech.SpeechClient();
const audio = {
uri: gcsuri,
};
const request = {
audio,
config: {
encoding: 'OGG_OPUS',
sampleRateHertz: 24000,
languageCode: 'ru',
enableSpeakerDiarization: true,
enableWordConfidence: true,
maxAlternatives: 1,
enableWordTimeOffsets: true,
},
};
const [operation] = await client.longRunningRecognize(request);
operation.on('progress', (metadata, apiResponse) => {
console.log('metadata', apiResponse);
progressCB(metadata.progressPercent);
});
const [results] = await operation.promise();
console.log('promise', typeof results, results);
return results.results.reduce(reducerforSingleAlternative, { words: [], confidence: 0, transcript: '' });
答案 0 :(得分:0)
对不起!我的错。这是我的Apollo服务器的问题,以某种方式它迫使API进行两项操作(可能与超时有关)。我已经尝试过纯粹的Node示例,并且一切正常。