Как избежать распознавания Google Chrome Webkitspeech для слова «точка», чтобы предотвратить «.» Интерпретация?

#javascript #api #google-chrome #speech-recognition #reserved-words

#javascript #API #google-chrome #распознавание речи #зарезервированные слова

Вопрос:

Я работаю над простой страницей распознавания речи с использованием HTML и JavaScript. Существуют определенные зарезервированные слова и фразы, которые, по-видимому, не определены в документации API для реализации распознавания речи Google Chrome.

Вот несколько распространенных примеров:

  1. «новый абзац» — отлично работает и не является двусмысленным
  2. «точка» — безоговорочно возвращает символ «.» даже если вы произносите буквы в микрофоне «p e r i o d», он все равно выводит «.».
  3. «запятая» — безоговорочно возвращает символ «, » даже если вы произносите буквы в микрофон «c o m m a», он все равно выводит «,».

Их может быть больше, и я хотел бы получить их полный список.

Кто-нибудь знает, как или что сказать, чтобы избежать «.», чтобы произнести слово «точка» по буквам?

Вот мой тестовый код для chrome-speech-to-text.php

     <?php 
        simple_speech();
    ?>
    <?php 
    
    function simple_speech(){
    ?>
    <!DOCTYPE html>
    <meta charset="utf-8">
    <title>Simple Speech to Text</title>
    
    <?php
    $browser="";
             if(strpos(strtolower($_SERVER["HTTP_USER_AGENT"]),strtolower("MSIE"))){?>
    <p id="info_upgrade" style="text-align:center;">Simple Speech to Text is not supported by this browser.
        Upgrade to <a href="//www.google.com/chrome">Chrome</a>
        version 25 or later.</p>
    <?php }
             else if(strpos(strtolower($_SERVER["HTTP_USER_AGENT"]),strtolower("Presto")))
             {
                     //$browser="opera";
             }
             else if(strpos(strtolower($_SERVER["HTTP_USER_AGENT"]),strtolower("CHROME")))
             {?>
    
    <?php 
             }
             else if(strpos(strtolower($_SERVER["HTTP_USER_AGENT"]),strtolower("SAFARI")))
             { ?>
    <p id="info_upgrade" style="text-align:center;">Simple Speech to Text is not supported by this browser.
        Upgrade to <a href="//www.google.com/chrome">Chrome</a>
        version 25 or later.</p>
    <?php }
             else if(strpos(strtolower($_SERVER["HTTP_USER_AGENT"]),strtolower("FIREFOX")))
             { ?>
    <p id="info_upgrade" style="text-align:center;">Simple Speech to Text is not supported by this browser.
        Upgrade to <a href="//www.google.com/chrome">Chrome</a>
        version 25 or later.</p>
    <?php }
             else 
             {
             //$browser="other";
             }
    echo $browser;
    ?>
    
    <div style="margin-bottom:50px">
        <div style="width:100%">
            <textarea name="q" id="transcript" rows="15" style="width:100% !important;"></textarea>
        </div>
        <div style="margin-top: 20px;margin-left: 10px;float:left;">
            <a id="copy_dictation" onclick="speakcopy();" style="padding: 6px 11px;background-color:#2111c4;cursor:pointer;color:#fff;margin-top:10px;border-radius:5px;"> Copy</a>
        </div>
        <div style="margin-top: 20px;margin-left: 10px;float:left;">
            <a id="clear_dictation" onclick="speakclear()" style="padding: 6px 11px;background-color:#e5225c;cursor:pointer;color:#fff;margin-top:10px;border-radius:5px;"> Clear</a>
        </div>
    </div>
    <!-- HTML5 Speech Recognition API -->
    <script>
        startDictation()
    
        function startDictation() {
    
            var recognition = new webkitSpeechRecognition();
            console.log(recognition);
            recognition.continuous = true;
            recognition.interimResults = true;
            recognition.lang = "en";
    
            recognition.onend = function(e) {
                console.log('ended');
                var textarea = document.getElementById('transcript');
                if (textarea.value != '') {
                    textarea.value = textarea.value.trim();
                    textarea.value  = ' ';
    
                }
                recognition.start();
            }
    
            recognition.onresult = function(e) {
                var textarea = document.getElementById('transcript');
                for (var i = e.resultIndex; i < e.results.length;   i) {
                    if (e.results[i].isFinal) {
                        textarea.value  = e.results[i][0].transcript;
                    }
                }
            }
    
            // start listening
            recognition.start();
        }
    
        function speakcopy() {
            var recognition = new webkitSpeechRecognition();
            recognition.stop();
            copyToClipboard(document.getElementById("transcript"));
        }
    
        function speakclear() {
            var recognition = new webkitSpeechRecognition();
            recognition.stop();
            document.getElementById("transcript").value = "";
        }
    
    
    
    
        function copyToClipboard(elem) {
    
            // create hidden text element, if it doesn't already exist
            var targetId = "_hiddenCopyText_";
            var isInput = elem.tagName === "INPUT" || elem.tagName === "TEXTAREA";
            var origSelectionStart, origSelectionEnd;
            if (isInput) {
                // can just use the original source element for the selection and copy
                target = elem;
                origSelectionStart = elem.selectionStart;
                origSelectionEnd = elem.selectionEnd;
            } else {
                // must use a temporary form element for the selection and copy
                target = document.getElementById(targetId);
                if (!target) {
                    var target = document.createElement("textarea");
                    target.style.position = "absolute";
                    target.style.left = "-9999px";
                    target.style.top = "0";
                    target.id = targetId;
                    document.body.appendChild(target);
                }
                target.textContent = elem.textContent;
            }
            // select the content
            var currentFocus = document.activeElement;
            target.focus();
            target.setSelectionRange(0, target.value.length);
    
            // copy the selection
            var succeed;
            try {
                succeed = document.execCommand("copy");
            } catch (e) {
                succeed = false;
            }
            // restore original focus
            if (currentFocus amp;amp; typeof currentFocus.focus === "function") {
                currentFocus.focus();
            }
    
            if (isInput) {
                // restore prior selection
                elem.setSelectionRange(origSelectionStart, origSelectionEnd);
            } else {
                // clear temporary content
                target.textContent = "";
            }
            return succeed;
        }
    
    </script>
    <?php 
    }
    ?>
  

Ответ №1:

Извините, что отвечаю на мой собственный вопрос, но у меня серьезный срок, который нужно уложиться. Вот пример предложения, которое нужно произносить в микрофон. «Это был отличный период времени, точка» Решение состояло из двух частей:

  1. Скажите «точка» для символа точки.
  2. Выполните итерацию по альтернативным конечным результатам, чтобы найти слово «точка» и использовать эту альтернативу. (возвращает «это был отличный период времени».)

Вот очищенный код с альтернативной итерацией конечных результатов (ПРИМЕЧАНИЕ: файл должен иметь расширение «.PHP»! Это не будет работать с расширением HTML») Я использовал имя файла chrome-speech-to-text.php

 <html>
  <head>
    <meta charset="utf-8">
    <title>Simple Speech to Text</title>
  </head>

  <body>

    <div style="margin-bottom:50px">
      <div style="width:100%">
        <textarea name="q" id="transcript" rows="15" style="width:100% !important;"></textarea>
      </div>
      <div style="margin-top: 20px;margin-left: 10px;float:left;">
        <a id="copy_dictation" onclick="speakcopy();" style="padding: 6px 11px;background-color:#2111c4;cursor:pointer;color:#fff;margin-top:10px;border-radius:5px;"> Copy</a>
      </div>
      <div style="margin-top: 20px;margin-left: 10px;float:left;">
        <a id="clear_dictation" onclick="speakclear()" style="padding: 6px 11px;background-color:#e5225c;cursor:pointer;color:#fff;margin-top:10px;border-radius:5px;"> Clear</a>
      </div>
    </div>
    <script>
      startDictation()

      function startDictation() {

        var recognition = new webkitSpeechRecognition();
        console.log(recognition);
        recognition.continuous = true;
        recognition.interimResults = true;
        recognition.lang = "en";
        recognition.maxAlternatives = 10;

        recognition.onend = function(e) {
          //console.log('ended');
          var textarea = document.getElementById('transcript');
          if (textarea.value != '') {
            textarea.value = textarea.value.trim();
            textarea.value  = ' ';

          }
          recognition.start();
        }

        recognition.onresult = function(e) {
          //console.log(e); // DO NOT UNCOMMENT ELSE ENDLESS LOOP
          //e.results[0][0].forEach(iterate);
          var textarea = document.getElementById('transcript');
          var finalText = '';
          for (var i = e.resultIndex; i < e.results.length;   i) {
            if (e.results[i].isFinal) {
              var alternatePeriod = searchForAlternative(e.results[i], 'period');
              if (alternatePeriod != '') {
                textarea.value  = alternatePeriod;
              } else {
                textarea.value  = e.results[i][0].transcript;
              }
            }
          }
        }

        // start listening
        recognition.start();
      }

      function searchForAlternative(resultItem, searchString) {
        for (var i = 0; i < resultItem.length;   i) {
          //console.log(resultItem[i].transcript);
          if (resultItem[i].transcript.includes(searchString)) {
            //console.log(resultItem[i].transcript);
            return (resultItem[i].transcript);;
          }
        }
        return ('');
      }

      function speakcopy() {
        var recognition = new webkitSpeechRecognition();
        recognition.stop();
        copyToClipboard(document.getElementById("transcript"));
      }

      function speakclear() {
        var recognition = new webkitSpeechRecognition();
        recognition.stop();
        document.getElementById("transcript").value = "";
      }

      function copyToClipboard(elem) {

        // create hidden text element, if it doesn't already exist
        var targetId = "_hiddenCopyText_";
        var isInput = elem.tagName === "INPUT" || elem.tagName === "TEXTAREA";
        var origSelectionStart, origSelectionEnd;
        if (isInput) {
          // can just use the original source element for the selection and copy
          target = elem;
          origSelectionStart = elem.selectionStart;
          origSelectionEnd = elem.selectionEnd;
        } else {
          // must use a temporary form element for the selection and copy
          target = document.getElementById(targetId);
          if (!target) {
            var target = document.createElement("textarea");
            target.style.position = "absolute";
            target.style.left = "-9999px";
            target.style.top = "0";
            target.id = targetId;
            document.body.appendChild(target);
          }
          target.textContent = elem.textContent;
        }
        // select the content
        var currentFocus = document.activeElement;
        target.focus();
        target.setSelectionRange(0, target.value.length);

        // copy the selection
        var succeed;
        try {
          succeed = document.execCommand("copy");
        } catch (e) {
          succeed = false;
        }
        // restore original focus
        if (currentFocus amp;amp; typeof currentFocus.focus === "function") {
          currentFocus.focus();
        }

        if (isInput) {
          // restore prior selection
          elem.setSelectionRange(origSelectionStart, origSelectionEnd);
        } else {
          // clear temporary content
          target.textContent = "";
        }
        return succeed;
      }

    </script>
  </body>

</html>