我需要将一些长的电话文件转录为文本,因此我在Node中构建了一个脚本,以使用Google Speech to Text API(长音频异步)来处理它,并将文件上传到Google Cloud Storage。
它没有任何错误地返回我的转录(我只是从Google的文档复制并粘贴),但是,它仅包含音频文件中的定期摘要。这些片段来自文件的所有部分,因此绝对可以解析到文件的末尾。
我检查了我的音频文件是否没有损坏并正确播放。我指定了正确的编解码器和采样率(如果没有,则会引发错误),因此我不确定发生故障的地方,因为API似乎找不到输入的任何问题。我也没有在网上看到任何遇到此问题的人的提及。
(此问题的一个示例是,音频文件每30秒我的转录以5秒摘要的形式返回)
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")