iPhone Safari中SpeechRecognitionResult的isFinal始终为false的解决方案求助
解决方案:iOS Safari中SpeechRecognitionResult.isFinal始终为false的问题
针对你在iPhone7、iPhone SE第三代Safari中遇到的SpeechRecognitionResult.isFinal始终为false的问题,以下是几个可行的解决方向:
调整识别参数组合
当continuous: true与interimResults: true同时启用时,iOS Safari的语音识别引擎可能无法正确判定识别结束。可以尝试先将continuous设为false测试:SpeechRecognition = webkitSpeechRecognition || SpeechRecognition; let recognition = new SpeechRecognition(); recognition.lang = 'ja-JP'; recognition.interimResults = true; recognition.continuous = false; // 修改此处 recognition.onresult = (event) => { for (let i = event.resultIndex; i < event.results.length; i++) { let transcript = event.results[i][0].transcript; if (event.results[i].isFinal) { console.log('final#' + transcript ); // 如需连续识别,可在此处重新启动 // recognition.start(); } else { console.log('interim#' + transcript ); } } }手动触发识别结束
iOS Safari的语音识别不会主动检测用户是否停止说话,你可以通过用户交互(比如点击“结束”按钮)手动调用recognition.stop(),强制生成isFinal: true的结果:// 添加一个按钮用于结束识别 document.getElementById('stop-btn').addEventListener('click', () => { recognition.stop(); }); recognition.onend = () => { // 可选:识别结束后重新启动,实现连续识别 // recognition.start(); }检查语言包兼容性
部分设备的日语语音识别支持可能存在异常,尝试切换到en-US测试是否能触发isFinal,排除语言包的问题:recognition.lang = 'en-US';重新初始化识别实例
避免长时间复用同一个识别实例,每次识别完成后销毁旧实例并创建新实例,可能会解决部分设备的异常:function startRecognition() { SpeechRecognition = webkitSpeechRecognition || SpeechRecognition; let recognition = new SpeechRecognition(); recognition.lang = 'ja-JP'; recognition.interimResults = true; recognition.continuous = true; recognition.onresult = (event) => { for (let i = event.resultIndex; i < event.results.length; i++) { let transcript = event.results[i][0].transcript; if (event.results[i].isFinal) { console.log('final#' + transcript ); recognition.stop(); } else { console.log('interim#' + transcript ); } } } recognition.onend = () => { // 如需继续识别,重新创建实例 // startRecognition(); } recognition.start(); } // 启动识别 startRecognition();
内容的提问来源于stack exchange,提问作者basikon
相关产品推荐
相关产品推荐

