我正在尝试部署我的功能但显示错误。我正在尝试使用云语音api&云翻译api与firebase云功能。
const functions = require('firebase-functions');
const Speech = require('@google-cloud/speech');
const Translate = require('@google-cloud/translate');
const speech = Speech({keyFilename: "credentials.json"});
const translate = Translate({keyFilename: "credentials.json"});
const Encoding = Speech.v1.types.RecognitionConfig.AudioEncoding;
function getLanguageWithoutLocale(languageCode) {
if (languageCode.indexOf("-") >= 0) {
return languageCode.substring(0, languageCode.indexOf("-"));
}
return languageCode;
}
exports.onUpload = functions.database
.ref("/uploads/{uploadId}")
.onWrite((event) => {
let data = event.data.val();
let language = data.language ? data.language : "en";
let sampleRate = data.sampleRate ? data.sampleRate : 16000;
let encoding = data.encoding === "FLAC" ? Encoding.FLAC : Encoding.AMR;
let request = {
config: {
languageCode : language,
sampleRateHertz : sampleRate,
encoding : encoding
},
audio: { uri : `gs://mimming-babelfire.appspot.com/${data.fullPath}` }
};
return speech.recognize(request).then((response) => {
let transcript = response[0].results[0].alternatives[0].transcript;
return event.data.adminRef.root
.child("transcripts").child(event.params.uploadId)
.set({text: transcript, language: language});
});
});
exports.onTranscript = functions.database
.ref("/transcripts/{transcriptId}")
.onWrite((event) => {
let value = event.data.val();
let transcriptId = event.params.transcriptId;
let text = value.text ? value.text : value;
let languages = ["en", "es", "pt", "de", "ja", "hi", "nl", "fr", "pl"];
// All supported languages: https://cloud.google.com/translate/docs/languages
let from = value.language ? getLanguageWithoutLocale(value.language) : "en";
let promises = languages.map(to => {
console.log(`translating from '${from}' to '${to}', text '${text}'`);
// Call the Google Cloud Platform Translate API
if (from === to) {
return event.data.adminRef.root
.child("translations").child(transcriptId).child(to)
.set({text: text, language: from});
} else {
return translate.translate(text, {
from: from,
to: to
}).then(result => {
// Write the translation to the database
let translation = result[0];
return event.data.adminRef.root
.child("translations").child(transcriptId).child(to)
.set({text: translation, language: to});
});
}
});
return Promise.all(promises);
});
我在npm安装了@ google-cloud / speech和@ google-cloud / translate。
显示错误
Error: Error occurred while parsing your function triggers.
TypeError: Speech is not a function
at Object.<anonymous> (C:\Users\Akash\AndroidStudioProjects\Translator\functions\index.js:6:16)
at Module._compile (module.js:649:30)
at Object.Module._extensions..js (module.js:660:10)
at Module.load (module.js:561:32)
at tryModuleLoad (module.js:501:12)
at Function.Module._load (module.js:493:3)
at Module.require (module.js:593:17)
at require (internal/module.js:11:18)
at C:\Users\Akash\AppData\Roaming\npm\node_modules\firebase-tools\lib\triggerParser.js:18:11
at Object.<anonymous> (C:\Users\Akash\AppData\Roaming\npm\node_modules\firebase-tools\lib\triggerParser.js:38:3)
如果有人知道的话,请帮我找错。提前谢谢
答案 0 :(得分:1)
它抱怨这条线:
const speech = Speech({keyFilename: "credentials.json"});
您正在使用Speech
,就像它是一个功能一样,但它不是一个功能。
查看documentation,您似乎应该像这样初始化它:
const speech = require('@google-cloud/speech');
const client = new speech.SpeechClient();