语音识别 onresult 在移动设备和平板设备上调用两次
speech recognition onresult called twice on mobile and tablet deveices
我正在尝试创建启用语音识别的 Web 应用程序。我已经成功地实现了相同的功能,并且它在桌面上按预期工作。但是在移动和平板设备上,onResult 调用了两次,第二个结果是我所期望的,而不是第一个。但是正因为如此,我无法获得预期的结果。有没有人遇到同样的问题告诉我。
希望我已经理解您的问题,据我了解,您似乎在移动设备上正确提取网络语音识别结果时遇到了问题。
本机语音识别,尤其是 Android 上的 chrome/android 浏览器,处理语音识别结果的方式与其桌面版本略有不同。 isFinal
为真时的识别结果,通常是完整的句子,可被移动浏览器识别,而例如在桌面 chrome 上,即使是单词也会返回 isFinal==true
。
这是最适合我的简化版本。
var mobile=false;
if(/*Use preferred method to detect mobile device*/){
mobile=true;
}
Recognizer.onresult = function(event){
var interimTranscripts = '';
var finalTranscripts = '';
for(var i = event.resultIndex; i < event.results.length; i++){
var transcript = event.results[i][0].transcript;
if(event.results[i].isFinal){
if(mobile){ //if running on a mobile device
finalTranscripts = transcript;
}else{
finalTranscripts += transcript;
}
}else{
if(mobile){ //if running on a mobile device
interimTranscripts = transcript;
}else{
interimTranscripts += transcript;
}
}
}
if(finalTranscripts){
target.value = finalTranscripts; //the output
if(!mobile){
Recognition.stop();
}
}
else if(interimTranscripts){
target.value = interimTranscripts + finalTranscripts;
}
};
我正在尝试创建启用语音识别的 Web 应用程序。我已经成功地实现了相同的功能,并且它在桌面上按预期工作。但是在移动和平板设备上,onResult 调用了两次,第二个结果是我所期望的,而不是第一个。但是正因为如此,我无法获得预期的结果。有没有人遇到同样的问题告诉我。
希望我已经理解您的问题,据我了解,您似乎在移动设备上正确提取网络语音识别结果时遇到了问题。
本机语音识别,尤其是 Android 上的 chrome/android 浏览器,处理语音识别结果的方式与其桌面版本略有不同。 isFinal
为真时的识别结果,通常是完整的句子,可被移动浏览器识别,而例如在桌面 chrome 上,即使是单词也会返回 isFinal==true
。
这是最适合我的简化版本。
var mobile=false;
if(/*Use preferred method to detect mobile device*/){
mobile=true;
}
Recognizer.onresult = function(event){
var interimTranscripts = '';
var finalTranscripts = '';
for(var i = event.resultIndex; i < event.results.length; i++){
var transcript = event.results[i][0].transcript;
if(event.results[i].isFinal){
if(mobile){ //if running on a mobile device
finalTranscripts = transcript;
}else{
finalTranscripts += transcript;
}
}else{
if(mobile){ //if running on a mobile device
interimTranscripts = transcript;
}else{
interimTranscripts += transcript;
}
}
}
if(finalTranscripts){
target.value = finalTranscripts; //the output
if(!mobile){
Recognition.stop();
}
}
else if(interimTranscripts){
target.value = interimTranscripts + finalTranscripts;
}
};