javascript - webkitSpeechRecognition 收集结果时落后 "lagging"

标签 javascript api webkit speech-to-text webspeech-api

迫不及待想尝试 Web Speech API . 我完全从文章中复制了代码,我在你说话的地方遇到了问题,但在你再次说话之前没有任何反应。

[ fiddle :http://jsfiddle.net/w75v2tm5/ ]

JS:

if (!('webkitSpeechRecognition' in window)) {
    //handle error stuff here...
} else {
    var recognition = new webkitSpeechRecognition();
    recognition.continuous = true;
    recognition.interimResults = false;

    recognition.start();

    var final_transcript = '';

    recognition.onresult = function (event) {
        var interim_transcript = '';
        if (typeof (event.results) == 'undefined') {
            recognition.onend = null;
            recognition.stop();
            upgrade();
            return;
        }
        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;
            }
        }
        document.getElementsByTagName('div')[0].innerText = final_transcript;
    };

}

例如,如果我要说“Hello world”,我设置用于显示结果的

将不会显示“Hello world”,直到我说出其他内容或发出声音。但如果我说了别的东西,那将不会显示,直到我再次说别的东西。

变量“final_transcript”保存的是先前的结果,而不是我刚才所说的。仅相差 1。

给你一个更好的主意...

我:“ Hello World ”

final_transcript = '';

[等等...]

我:“测试”

final_transcript = ' Hello World '

这还在继续。代码无法按照我所说的那样转录我所说的内容。很奇怪。

关于为什么会这样有什么想法吗?

最佳答案

有某种内置的超时,即使没有更多的输入(似乎大约 5-10 秒),您也会在超时之后得到结果。

在这种情况下,您将获得最终的 onresult事件,以及 onend事件。您必须调用 recognition.start()如果您希望继续接受输入,请再次输入。

另外,如果你设置

recognition.interimResults = true;

你会得到onresult具有非最终结果的事件,您可以在获得最终结果之前决定是否要显示它们。

另一个选项是关闭连续

recognition.continuous = false;

您将在输入(音频)停止后不久得到结果。 您还将获得 onend事件。
如果您想继续识别,您将不得不再次调用

recognition.start();

onend事件处理程序。
在非 HTTPS 页面上,这将导致权限栏再次弹出。

参见 example

关于javascript - webkitSpeechRecognition 收集结果时落后 "lagging",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25225119/

相关文章:

javascript - 如何从yield* 中获取当前字符串的长度

javascript - 我应该在我的 meteor 文件中添加 "use strict"吗?

java - 任何用于 Java 的字典定义 API?

javascript - Webkit 列查找可见文本的范围

css - 是否可以将 css 转换应用于当前转换的 div 上的图像

javascript - Ajax POST 使用 PHP 保存 JSON 本地文件

JavaScript/CSS : change display property

api - 付费 API 以获得网站的传入链接?

javascript - 显示来自 api 调用的搜索结果

css - 如何为 :before and :after pseudo elements? 启用 -webkit-animation/transition-property