кажется, что любой длинный звук (> 4 мин) каким-то образом заставляет API порождать две операции вместо одной.Что бы я ни делал (используя шаблон генератора событий или обещания), это всегда так.
В результате в моей базе данных есть две транскрипции вместо одной (я даже не понимаю, как можно иметь в виду, что модель мангусты ломается при попадании второго текста в бэкэнд)
Пожалуйста,помогите мне решить эту проблему, я борюсь с этой проблемой около двух месяцев.
Подробности среды
- ОС: MacOS 10.14.4 (18E226)
- Версия Node.js: 11.2.0
- версия npm:
@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: '' });