首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebkitSpeechRecognition会随机停止,不会立即触发

WebkitSpeechRecognition会随机停止,不会立即触发
EN

Stack Overflow用户
提问于 2016-08-01 23:34:30
回答 2查看 1.7K关注 0票数 1

我正在试着用webkitSpeechRecognition转录文本。我找到了这个例子:

https://developers.google.com/web/updates/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API?hl=en

并将其应用到我自己的网站上。这在某些条件下非常有效。然而,我本质上只是想在人们讨论的时候让抄写“开着”。

出于我的目的,我已经将代码简化如下:

代码语言:javascript
复制
//Speech Transcription
var recognition = new webkitSpeechRecognition();
recognition.continuous = true;
recognition.interimResults = true;

// initiated text recognition
recognition.onstart = function() {
    recognizing = true;
    ignore_onend = false;

}

//
recognition.onresult = function(event) {
    var interim_transcript = '';


    for (var i = event.resultIndex; i < event.results.length; ++i) {
        if (event.results[i].isFinal) {
            final_transcript += event.results[i][0].transcript;
        } else {
            interim_transcript += event.results[i][0].transcript;
        }
    }

    final_transcript = capitalize(final_transcript);

    // update final transcript
    enter.innerHTML = linebreak(final_transcript);

    // update temp transcript
    interim_enter.innerHTML = linebreak(interim_transcript);


}

recognition.onerror = function(event) { }

recognition.onend = function() {
    recognizing = false;
    if (ignore_onend) {
        return;
    }
}


// formatting the text
var two_line = /\n\n/g;
var one_line = /\n/g;
function linebreak(s) {
  return s.replace(two_line, '<p></p>').replace(one_line, '<br>');
}

var first_char = /\S/;
function capitalize(s) {
  return s.replace(first_char, function(m) { return m.toUpperCase(); });
}

// trigger the transcription
function startButton(event) {
    final_transcript = '';
    recognition.start();    
}

它在2秒到5分钟的时间内都能很好地工作,但不可避免的是,随机的似乎会停止。我在这里看到了关于这个问题的评论:

WebkitSpeechRecognition stops recording randomly

这意味着Obj3ctiv3_C_88想出了一个解决方案。然而,我不知道如何实现所描述的内容。

任何帮助都是非常感谢的。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2018-04-24 02:58:41

我知道这有点晚了,但我也遇到了这个问题,语音输入可能会随机停止工作。希望你的问题得到了解决,但这可能会在未来帮助其他人。

我用它来填写语音输入表单。你链接的Obj3ctiv3_C_88提供的解决方案可以处理它--你可以简单地将他的代码剪切并粘贴到你现有的js中。setInterval每隔10000调用一次resetVoiceRecog函数。该函数强制停止识别。然后,您可以在.onend函数中调用.start。在我的应用程序中,除非用户单击了暂停按钮,否则我会调用start

代码语言:javascript
复制
if ($("#pauseClicked").html() !=1) {
  recognition.start();
}

我最初是在等待一个onend事件,然后执行一个.start,但即使它“说”它重新启动了,它也偶尔不接受语音输入。谁知道这是在onend/start的背面发生的,但是设置间隔计时器来执行强制停止/启动似乎已经为我解决了这个问题。

票数 0
EN

Stack Overflow用户

发布于 2020-06-26 00:04:06

我也注意到了上面提到的行为。这看起来像是语音识别引擎中的某种纠结,也许是为了减少流量?

但是,我的解决方案是在recognition start方法中将名为noReason的变量设置为true,在errorresult方法中将其设置为false,因为有一个原因(错误或结果)。然后在onEnd方法中,我只检查if(noReason),如果是,则调用recognition.start();

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38702797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档