语音识别 - 运行 连续
Speech Recognition - Run continuously
我正在尝试使用语音识别 API 创建一个 HTML5 支持的语音控制编辑器。目前,问题是当你开始录音时,它只会持续一定的时间(基本上直到用户停止说话)。
我可以将 continuous
和 interimResults
设置为 true
,但这并不能让它永远记录下来。还是结束了。
我也可以在结束事件中告诉它重新开始,但它每次都请求许可,这非常具有破坏性。
有没有办法让它连续运行而只需要询问用户一次?
无论您选择什么设置,Google Chrome 都会在一段时间后停止语音识别引擎...没有办法解决它。
我发现的连续语音识别的唯一可靠解决方案是按照您的建议,通过绑定到 onend()
事件重新启动它。
如果您尝试类似的技术,请注意以下几点:
如果您未使用 HTTPS,系统将在每次重新启动时一遍又一遍地提示用户授予权限。出于这个原因以及许多其他原因,在使用语音识别时不要在 HTTP 上妥协。
确保你没有立即重新启动语音识别 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 了解我的处理方式。
如果结束的原因类似于 service-not-allowed
或 not-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
我正在尝试使用语音识别 API 创建一个 HTML5 支持的语音控制编辑器。目前,问题是当你开始录音时,它只会持续一定的时间(基本上直到用户停止说话)。
我可以将 continuous
和 interimResults
设置为 true
,但这并不能让它永远记录下来。还是结束了。
我也可以在结束事件中告诉它重新开始,但它每次都请求许可,这非常具有破坏性。
有没有办法让它连续运行而只需要询问用户一次?
无论您选择什么设置,Google Chrome 都会在一段时间后停止语音识别引擎...没有办法解决它。
我发现的连续语音识别的唯一可靠解决方案是按照您的建议,通过绑定到 onend()
事件重新启动它。
如果您尝试类似的技术,请注意以下几点:
如果您未使用 HTTPS,系统将在每次重新启动时一遍又一遍地提示用户授予权限。出于这个原因以及许多其他原因,在使用语音识别时不要在 HTTP 上妥协。
确保你没有立即重新启动语音识别 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 了解我的处理方式。如果结束的原因类似于
service-not-allowed
或not-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