JS AzureSDK создает пользовательскую функцию для захвата речи, отображения текстовых результатов и уровня достоверности результатов.

Мне нужно создать простую функцию javascript для захвата входных данных, а затем вернуть текст с процентом достоверности с помощью AzureSDK.

Моя самая большая проблема в том, что я новичок в программировании, и это самая сложная проблема, с которой я столкнулся, поэтому, пожалуйста, будьте добры к этому скромному студенту.

Я создаю веб-приложение для изучения языка, используя голосовой ввод. Мне удалось заставить сервисы Google работать так, как я хотел, но, к сожалению, эти сервисы не работают в Китае, где находится мой рынок. Я также использую API Phaser 3 для создания этого приложения.

Мне удалось получить образец кода, предоставленный на git, для работы AzureSDK с преобразованием речи в текстовый javascript, но когда я пытаюсь создать свою собственную функцию с кодом, я получаю: Uncaught TypeError: Cannot read property 'SpeechConfig' of undefined

Я также не знаю, как добавить уровень достоверности к результату речи.

recordButton.on('pointerdown', function() {
        var SDK =  window.SpeechSDK;
        try {
        AudioContext = window.AudioContext // our preferred impl
            || window.webkitAudioContext   // fallback, mostly for Safari
            || false;                      // could not find.
        if (AudioContext) {
            soundContext = new AudioContext();
          console.log("AudioContext", AudioContext);
        } else {
            alert("Audio context not supported");
        }
        }
        catch (e) {
         console.log("no sound context found, no audio output. " + e);
        }

        console.log("SpeechSDK initialized", SDK);

        speechConfig = 
          SpeechSDK.SpeechConfig.fromSubscription(subscriptionKey, 
           serviceRegion);

        speechConfig.speechRecognitionLanguage = "en-US";
        console.log("speechConfig", SpeechConfig);      

        audioConfig  = SpeechSDK.AudioConfig.fromDefaultMicrophoneInput();
        recognizer = new SpeechSDK.SpeechRecognizer(speechConfig, 
           audioConfig);
        recognizer.recognizeOnceAsync(
        function (result) {
          console.log("result", result); 
          recognizer.close();
          recognizer = undefined;
        },
        function (err) {
          console.log(err);
          recognizer.close();
          recognizer = undefined;
        });
}, this);

Мне нужно зафиксировать речевой ввод, затем показать слова/фразы/предложения, которые сказали ученики, и оценить их на основе уровня достоверности.


person Magnus    schedule 15.10.2019    source источник


Ответы (1)


Если вы хотите получить достоверную оценку текстового значения, которое вы получаете из речи в текст SDK, попробуйте код ниже:

   <html>
    <head>
       <title>Speech SDK JavaScript Quickstart</title>
    </head>
    <script src="microsoft.cognitiveservices.speech.sdk.bundle.js"></script>

<body>
 <div id="warning">
  <h1 style="font-weight:500;">Speech Recognition Speech SDK not found (microsoft.cognitiveservices.speech.sdk.bundle.js missing).</h1>
</div>

<div id="content" style="display:none">
  <table width="100%">
    <tr>
      <td></td>
      <td><h1 style="font-weight:500;">Microsoft Cognitive Services Speech SDK JavaScript Quickstart</h1></td>
    </tr>
    <tr>
      <td align="right"><a href="https://docs.microsoft.com/azure/cognitive-services/speech-service/get-started" target="_blank">Subscription</a>:</td>
      <td><input id="subscriptionKey" type="text" size="40" value="subscription"></td>
    </tr>
    <tr>
      <td align="right">Region</td>
      <td><input id="serviceRegion" type="text" size="40" value="YourServiceRegion"></td>
    </tr>
    <tr>
      <td></td>
      <td><button id="startRecognizeOnceAsyncButton">Start recognition</button></td>
    </tr>
    <tr>
      <td align="right" valign="top">Results</td>
      <td><textarea id="phraseDiv" style="display: inline-block;width:500px;height:200px"></textarea></td>
    </tr>
  </table>
</div>
</body>



<!-- Speech SDK USAGE -->
<script>
  // status fields and start button in UI
  var phraseDiv;
  var startRecognizeOnceAsyncButton;

  // subscription key and region for speech services.
  var subscriptionKey, serviceRegion;
  var authorizationToken;
  var SpeechSDK;
  var recognizer;

  document.addEventListener("DOMContentLoaded", function () {
    startRecognizeOnceAsyncButton = document.getElementById("startRecognizeOnceAsyncButton");
    subscriptionKey = document.getElementById("subscriptionKey");
    serviceRegion = document.getElementById("serviceRegion");
    phraseDiv = document.getElementById("phraseDiv");

    startRecognizeOnceAsyncButton.addEventListener("click", function () {
      startRecognizeOnceAsyncButton.disabled = true;
      phraseDiv.innerHTML = "";

      // if we got an authorization token, use the token. Otherwise use the provided subscription key
      var speechConfig;
      if (authorizationToken) {
        speechConfig = SpeechSDK.SpeechConfig.fromAuthorizationToken(authorizationToken, serviceRegion.value);
      } else {
        if (subscriptionKey.value === "" || subscriptionKey.value === "subscription") {
          alert("Please enter your Microsoft Cognitive Services Speech subscription key!");
          return;
        }
        speechConfig = SpeechSDK.SpeechConfig.fromSubscription(subscriptionKey.value, serviceRegion.value);
      }

      speechConfig.speechRecognitionLanguage = "en-US";
      speechConfig.outputFormat=1;
      var audioConfig  = SpeechSDK.AudioConfig.fromDefaultMicrophoneInput();
      recognizer = new SpeechSDK.SpeechRecognizer(speechConfig, audioConfig);

      recognizer.recognizeOnceAsync(
        function (result) {
          startRecognizeOnceAsyncButton.disabled = false;
          phraseDiv.innerHTML += "Recognize Result:"+ result.text + "\nConfidence Score:" + JSON.parse(result.json).NBest[0].Confidence;

          window.console.log(result);

          recognizer.close();
          recognizer = undefined;
        },
        function (err) {
          startRecognizeOnceAsyncButton.disabled = false;
          phraseDiv.innerHTML += err;
          window.console.log(err);

          recognizer.close();
          recognizer = undefined;
        });
    });

    if (!!window.SpeechSDK) {
      SpeechSDK = window.SpeechSDK;
      startRecognizeOnceAsyncButton.disabled = false;

      document.getElementById('content').style.display = 'block';
      document.getElementById('warning').style.display = 'none';

      // in case we have a function for getting an authorization token, call it.
      if (typeof RequestAuthorizationToken === "function") {
          RequestAuthorizationToken();
      }
    }
  });
</script>
</html>

Запустите страницу точно так же, как официальный документ указан. Одним словом, пока вы используете sdk, вы должны настроить speechConfig.outputFormat=1, чтобы вы могли получить подробный формат службы речи, который включает достоверное значение оценки.

Результат: введите здесь описание изображения

В вашем коде кажется, что неопределенная ошибка связана с тем, что вы хотите напечатать SpeechConfig, но этот параметр определен как speechConfig...

В любом случае, чтобы демо-версия успешно набрала уверенный балл, мой код основан на официальной демо-версии. Надеюсь, поможет .

Для вашего кода попробуйте html ниже:

<html>

<body>

<button id='recordButton' onclick = 'test()'>test </button>
</body>

<script src="microsoft.cognitiveservices.speech.sdk.bundle.js"></script>
<script>

function test(){
        var SDK =  window.SpeechSDK;
        try {
        AudioContext = window.AudioContext // our preferred impl
            || window.webkitAudioContext   // fallback, mostly for Safari
            || false;                      // could not find.
        if (AudioContext) {
            soundContext = new AudioContext();
          console.log("AudioContext", AudioContext);
        } else {
            alert("Audio context not supported");
        }
        }
        catch (e) {
         console.log("no sound context found, no audio output. " + e);
        }

        console.log("SpeechSDK initialized", SDK);

        var speechConfig = 
          SpeechSDK.SpeechConfig.fromSubscription("<your subscription key>", 
           "<your service region>");

        speechConfig.speechRecognitionLanguage = "en-US";
        console.log("speechConfig", speechConfig);      

        audioConfig  = SpeechSDK.AudioConfig.fromDefaultMicrophoneInput();
        recognizer = new SpeechSDK.SpeechRecognizer(speechConfig, 
           audioConfig);
        recognizer.recognizeOnceAsync(
        function (result) {
          console.log("result", result); 
          recognizer.close();
          recognizer = undefined;
        },
        function (err) {
          console.log(err);
          recognizer.close();
          recognizer = undefined;
        });
}

</script>
</html>

Результат: как видите, результат был зарегистрирован:

введите здесь описание изображения

Если мой ответ полезен, нажмите на галочку рядом с ответом, чтобы переключить его с серого на заполненный, чтобы отметить этот ответ, спасибо!

person Stanley Gong    schedule 15.10.2019
comment
Благодаря Stanley Gong, уверенность работала с кодом в штучной упаковке, предоставленным из кода быстрого запуска Microsoft. Большая помощь! Но мне нужно превратить распознавание речи в функцию js, чтобы я мог применить ее к своему собственному коду. Когда я беру его из предоставленного HTML, я получаю неопределенное значение, переменная - это speechConfig, и оно не определено, даже если оно явно установлено на -- speechConfig = SpeechSDK.SpeechConfig.fromSubscription(subscriptionKey, serviceRegion); - person Magnus; 16.10.2019
comment
Привет @Magnus, я изменил ваш код и добавил результат в свой ответ, поместите html-файл в ту же папку, что и демо, чтобы он мог импортировать SDK. - person Stanley Gong; 16.10.2019
comment
Привет @Magnus, могу ли я узнать, решил ли этот ответ вашу проблему? - person Stanley Gong; 17.10.2019
comment
Еще раз спасибо @Stanley Gong, функция работает в собственном HTML-файле и в моем основном веб-приложении index.html. Моя структура, тем не менее, нуждается в автономной функции, которую можно вызвать в модуле js, но когда я пытаюсь использовать ее в другом модуле, я получаю сообщение об ошибке - Undefined. - person Magnus; 17.10.2019
comment
Привет @Magnus, вы импортировали microsoft.cognitiveservices.speech.sdk.bundle.js в свой код js? Возможно, этот пост будет полезен для импорта внешних js: stackoverflow.com/questions/2579883/ - person Stanley Gong; 17.10.2019