Reputation: 1
Im currently using Azure pronunciation assessment example from cognitive services speech SDK with the next code:
` const speechConfig = sdk.SpeechConfig.fromSubscription( API_KEY, REGION, ); speechConfig.speechRecognitionLanguage = 'es-ES';
const referenceText =
'Internet es una enorme red de dispositivos interconectados mundialmente gracias a millones de kilómetros de cables de fibra óptica que pasan por debajo de los océanos. Para poder viajar, los archivos deben convertirse a un lenguaje que entiendan las computadoras. Ese es el LENGUAJE DE MÁQUINA y es de tipo BINARIO, porque solo tiene dos valores: 1 y 0. Combinando esos dos valores se generan todos los tipos de contenidos que ves y escuchás en cualquier dispositivo. ¡Increíble! ¿No?. Además, para llegar más velozmente (y que no te aburras esperando), los archivos se dividen en pequeñas partes, llamadas PAQUETES DE DATOS, que toman el mejor camino disponible hasta a tu dispositivo. Para lograrlo, los paquetes viajan por el mundo a través de la inmensa red de CABLES DE FIBRA ÓPTICA SUBMARINOS, redirigiéndose por varios ROUTERS. En tu dispositivo, que puede estar conectado a internet a través de un CABLE o INALÁMBRICAMENTE (gracias a tu MÓDEM), los pequeños paquetes se unen formando el archivo que habías solicitado y aparecen de forma completa.';
const pronunciationAssessmentConfig = new sdk.PronunciationAssessmentConfig(
referenceText,
sdk.PronunciationAssessmentGradingSystem.HundredMark,
sdk.PronunciationAssessmentGranularity.Phoneme,
true,
);
const audioConfig = sdk.AudioConfig.fromWavFileInput(
fs.readFileSync('test.wav'),
);
const reco = new sdk.SpeechRecognizer(speechConfig, audioConfig);
pronunciationAssessmentConfig.applyTo(reco);
function onRecognizedResult(result: { text: string }) {
console.log('pronunciation assessment for:', result.text);
const pronunciation_result =
sdk.PronunciationAssessmentResult.fromResult(result);
console.log(
' Accuracy score:',
pronunciation_result.accuracyScore,
'\n',
'pronunciation score:',
pronunciation_result.pronunciationScore,
'\n',
'completeness score :',
pronunciation_result.completenessScore,
'\n',
'fluency score:',
pronunciation_result.fluencyScore,
);
console.log(' Word-level details:');
for (const [
idx,
word,
] of pronunciation_result.detailResult.Words.entries()) {
console.log(
' ',
idx + 1,
': word:',
word.Word,
'\taccuracy score:',
word.PronunciationAssessment.AccuracyScore,
'\terror type:',
word.PronunciationAssessment.ErrorType,
';',
);
}
reco.close();
}
reco.recognizeOnceAsync(function (successfulResult: any) {
onRecognizedResult(successfulResult);
});`
The problem occurs when the audio i record is larger than 1 minute. The assessment is only executed for the first minute giving omission for every word that is not mentioned. How can I process the entire length of the audio?
Thanks, Matías
Upvotes: 0
Views: 533
Reputation: 3694
I made some change to your code and got the complete text output with input speech in spanish.
Code:
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const fs = require("fs");
const speechKey = "<speech-key>";
const speechRegion = "<speech-region>";
const speechConfig = sdk.SpeechConfig.fromSubscription(speechKey, speechRegion);
speechConfig.speechRecognitionLanguage = 'es-ES';
const referenceText =
'Internet es una enorme red de dispositivos interconectados mundialmente gracias a millones de kilómetros de cables de fibra óptica que pasan por debajo de los océanos. Para poder viajar, los archivos deben convertirse a un lenguaje que entiendan las computadoras. Ese es el LENGUAJE DE MÁQUINA y es de tipo BINARIO, porque solo tiene dos valores: 1 y 0. Combinando esos dos valores se generan todos los tipos de contenidos que ves y escuchás en cualquier dispositivo. ¡Increíble! ¿No?. Además, para llegar más velozmente (y que no te aburras esperando), los archivos se dividen en pequeñas partes, llamadas PAQUETES DE DATOS, que toman el mejor camino disponible hasta a tu dispositivo. Para lograrlo, los paquetes viajan por el mundo a través de la inmensa red de CABLES DE FIBRA ÓPTICA SUBMARINOS, redirigiéndose por varios ROUTERS. de un CABLE o INALÁMBRICAMENTE , los pequeños paquetes se unen formando el archivo que habías solicitado y aparecen de forma completa.';
const pronunciationAssessmentConfig = new sdk.PronunciationAssessmentConfig(
referenceText,
sdk.PronunciationAssessmentGradingSystem.HundredMark,
sdk.PronunciationAssessmentGranularity.Phoneme,
true
);
const audioConfig = sdk.AudioConfig.fromWavFileInput(
fs.readFileSync('kam.wav')
);
const recognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
pronunciationAssessmentConfig.applyTo(recognizer);
function onRecognizedResult(result) {
console.log('Pronunciation assessment for:', result.text);
const pronunciation_result = sdk.PronunciationAssessmentResult.fromResult(result);
console.log(
'Accuracy score:', pronunciation_result.accuracyScore, '\n',
'Pronunciation score:', pronunciation_result.pronunciationScore, '\n',
'Completeness score:', pronunciation_result.completenessScore, '\n',
'Fluency score:', pronunciation_result.fluencyScore
);
console.log('Word-level details:');
for (const [idx, word] of pronunciation_result.detailResult.Words.entries()) {
console.log(
' ', idx + 1, ': word:', word.Word,
'\taccuracy score:', word.PronunciationAssessment.AccuracyScore,
'\terror type:', word.PronunciationAssessment.ErrorType, ';'
);
}
}
recognizer.recognized = (s, e) => {
if (e.result.reason === sdk.ResultReason.RecognizedSpeech) {
onRecognizedResult(e.result);
}
};
recognizer.startContinuousRecognitionAsync(() => {
console.log('Recognition started...');
}, (error) => {
console.error('Failed to start recognition:', error);
});
setTimeout(() => {
recognizer.stopContinuousRecognitionAsync(() => {
console.log('Recognition stopped.');
recognizer.close();
}, (error) => {
console.error('Failed to stop recognition:', error);
recognizer.close();
});
}, 60 * 1000);
Output:
It runs successfully and give the text output with input speech in spanish as below,
Upvotes: 0