语音识别 - 运行 连续

Speech Recognition - Run continuously

我正在尝试使用语音识别 API 创建一个 HTML5 支持的语音控制编辑器。目前,问题是当你开始录音时,它只会持续一定的时间(基本上直到用户停止说话)。

我可以将 continuousinterimResults 设置为 true,但这并不能让它永远记录下来。还是结束了。

我也可以在结束事件中告诉它重新开始,但它每次都请求许可,这非常具有破坏性。

有没有办法让它连续运行而只需要询问用户一次?

无论您选择什么设置,Google Chrome 都会在一段时间后停止语音识别引擎...没有办法解决它。

我发现的连续语音识别的唯一可靠解决方案是按照您的建议,通过绑定到 onend() 事件重新启动它。

如果您尝试类似的技术,请注意以下几点:

  1. 如果您未使用 HTTPS,系统将在每次重新启动时一遍又一遍地提示用户授予权限。出于这个原因以及许多其他原因,在使用语音识别时不要在 HTTP 上妥协。

  2. 确保你没有立即重新启动语音识别 onend() 没有一些保护措施以确保你没有将浏览器置于无限循环中(例如,两个打开的选项卡 onend(function() {restart()}) 可能会使浏览器崩溃,正如我在此错误报告中所详述的那样:https://code.google.com/p/chromium/issues/detail?id=296690) 请参阅 https://github.com/TalAter/annyang/blob/1ee294e2b6cb9953adb9dcccf4d3fcc7eca24c2c/src/annyang.js#L214 了解我的处理方式。

  3. 如果结束的原因类似于 service-not-allowednot-allowed,请不要自动重启 参见 https://github.com/TalAter/annyang/blob/1ee294e2b6cb9953adb9dcccf4d3fcc7eca24c2c/src/annyang.js#L196

您可以在我的代码中看到我是如何处理这个问题的 - https://github.com/TalAter/annyang/blob/master/src/annyang.js

请试试这段代码,我认为它可以满足您的需要:

<!DOCTYPE html>
<html>
    <head>
        <title>Speech recognition</title>
        <style>
            #result{
                border: 2px solid black;
                height: 200px;
                border-radius: 3px;
                font-size: 14px;
            }
            button{
                position: absolute;
                top: 240px;
                left: 50%;
            }
        </style>
        <script type="application/javascript">
            function start(){
                var r = document.getElementById("result");
            if("webkitSpeechRecognition" in window){
                var speechRecognizer = new webkitSpeechRecognition();
                speechRecognizer.continuous = true;
                speechRecognizer.interimResults = true;
                speechRecognizer.lang = "en-US";
                speechRecognizer.start();
                
                var finalTranscripts = "";
                speechRecognizer.onresult = function(event){
                    var interimTranscripts = "";
                    for(var i=event.resultIndex; i<event.results.length; i++){
                        var transcript = event.results[i][0].transcript;
                        transcript.replace("\n", "<br>");
                        if(event.results[i].isFinal){
                            finalTranscripts += transcript;
                        }
                        else{
                            interimTranscripts += transcript;
                        }
                        r.innerHTML = finalTranscripts + '<span style="color: #999;">' + interimTranscripts + '</span>';
                    }
                };
                speechRecognizer.onerror = function(event){
                };
            }
            else{
                r.innerHTML = "Your browser does not support that.";
            }
            }
        </script>
    </head>
    <body>
        <div id="result"></div>
        <button onclick="start()">Listen</button>
    </body>
</html>

HTML 5 Speech Continuously requires this...

window.SpeechRecognition = window.webkitSpeechRecognition || window.SpeechRecognition;

if ('SpeechRecognition' in window) {
  console.log('supported speech')
} else {
  console.error('speech not supported')
}
    const recognition = new window.SpeechRecognition();

    recognition.continuous = true;

    recognition.onresult = (event) => {
      console.log('transscript: ', event.results[event.results.length -1][0].transcript);
    }
    
    recognition.start();

按照我的代码 https://github.com/servo-ai/servo-platform/blob/master/editor/src/assets/js/voice/asr.js

,您必须每隔几次 seconds.see 重新启动一次引擎

注意:在chrome的第70次之后,至少需要点击一次UI