Мне нужно было преобразовать некоторые файлы длинных телефонных звонков в текст, поэтому я создал скрипт в Node для его обработки с помощью Google Speech to Text API (асинхронный для длинного звука) и загрузил свои файлы в Google Cloud Storage.
Возвращает мою транскрипцию без ошибок (я просто копирую и вставляю из документов Google), однако содержит только периодические фрагменты из аудиофайла.Эти фрагменты взяты из всех частей файла, поэтому он определенно разбирается до конца файла.
Я проверил, что мои аудиофайлы не были повреждены и воспроизводились должным образом.У меня заданы правильный кодек и частота дискретизации (выдает ошибки, когда этого не было), поэтому я не уверен, где происходит сбой, так как API, похоже, не обнаруживает проблем с вводом.Я также не видел ни одного упоминания в Интернете о том, чтобы кто-то еще сталкивался с этой проблемой.
(примером этой проблемы может быть то, что моя транскрипция возвращается в виде 5-секундных фрагментов каждые 30 секунд аудиофайла)
var express = require("express");
var app = express();
var request = require("request");
var async = require("async");
var fs = require('fs');
const { Storage } = require('@google-cloud/storage');
const storage = new Storage({
projectId: 'MY-PROJECT',
keyFilename: './gcloud-auth.json'
});
const bucketName = 'MY-BUCKET';
var speech = require('@google-cloud/speech');
const client = new speech.SpeechClient({
projectId: 'MY-PROJECT',
keyFilename: './gcloud-auth.json'
});
var gcRequest = {
config: {
'encoding': "LINEAR16",
'sampleRate': 44100,
languageCode: "en-US",
audioChannelCount: 2,
},
audio: {
uri: 'gs://MY-BUCKET/test.wav'
},
};
async function translate(gcRequest, fileName) {
// Detects speech in the audio file. This creates a recognition job that you
// can wait for now, or get its result later.
var [operation] = await client.longRunningRecognize(gcRequest);
// Get a Promise representation of the final result of the job
var [response] = await operation.promise();
var transcription = response.results
.map(result => result.alternatives[0].transcript)
.join('\n');
console.log(`Transcription: ${transcription}`);
fs.writeFile("text/" + fileName.substr(0, fileName.indexOf('.')) + ".txt", JSON.stringify(response), function(err, data) {
if(err){
console.log(err);
fileFail.push(fileName)
} else{
console.log("Successfully Written to File.");
}
});
}
translate(gcRequest, "test.wav")