Я новичок в SDK речи Azure, поэтому вполне возможно, что мне не хватает чего-то очевидного, поэтому извиняюсь, если это так.
Я работал над проектом, в котором я хочу перевести аудиофайл / поток с одного языка на другой. Он работает прилично, когда весь разговор ведется на одном языке (все на испанском), но он разваливается, когда я кормлю его настоящими разговорами, где есть английский и испанский. Он пытается распознать английские слова КАК испанские слова (так что он будет транскрибировать что-то вроде «извините» как искаженный испанский).
Насколько я могу судить, вы можете установить несколько целевых языков (язык для перевода), но только один SpeechRecognitionLanguage. Похоже, это означает, что он не может обрабатывать разговоры на нескольких языках (например, телефонный звонок с переводчиком) или если говорящие переключаются между языками. Есть ли способ заставить его работать с несколькими языками, или это просто то, к чему Microsoft еще не дошла?
Вот код, который у меня есть прямо сейчас (это просто слегка измененная версия примера на их github):
// pull in the required packages.
var sdk = require("microsoft-cognitiveservices-speech-sdk");
(function() {
"use strict";
module.exports = {
main: function(settings, audioStream) {
// now create the audio-config pointing to our stream and
// the speech config specifying the language.
var audioConfig = sdk.AudioConfig.fromStreamInput(audioStream);
var translationConfig = sdk.SpeechTranslationConfig.fromSubscription(settings.subscriptionKey, settings.serviceRegion);
// setting the recognition language.
translationConfig.speechRecognitionLanguage = settings.language;
// target language (to be translated to).
translationConfig.addTargetLanguage("en");
// create the translation recognizer.
var recognizer = new sdk.TranslationRecognizer(translationConfig, audioConfig);
recognizer.recognized = function (s, e) {
if (e.result.reason === sdk.ResultReason.NoMatch) {
var noMatchDetail = sdk.NoMatchDetails.fromResult(e.result);
console.log("\r\nDidn't find a match: " + sdk.NoMatchReason[noMatchDetail.reason]);
} else {
var str = "\r\nNext Line: " + e.result.text + "\nTranslations:";
var language = "en";
str += " [" + language + "] " + e.result.translations.get(language);
str += "\r\n";
console.log(str);
}
};
//two possible states, Error or EndOfStream
recognizer.canceled = function (s, e) {
var str = "(cancel) Reason: " + sdk.CancellationReason[e.reason];
//if it was because of an error
if (e.reason === sdk.CancellationReason.Error) {
str += ": " + e.errorDetails;
console.log(str);
}
//We've reached the end of the file, stop the recognizer
else {
recognizer.stopContinuousRecognitionAsync(function() {
console.log("End of file.");
recognizer.close();
recognizer = undefined;
},
function(err) {
console.trace("err - " + err);
recognizer.close();
recognizer = undefined;
})
}
};
// start the recognizer and wait for a result.
recognizer.startContinuousRecognitionAsync(
function () {
console.log("Starting speech recognition");
},
function (err) {
console.trace("err - " + err);
recognizer.close();
recognizer = undefined;
}
);
}
}
}());