You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google语音转文本识别单数字异常:单次发音无法识别求助

问题分析

当前代码启用了continuous: true和interimResults: true,这种配置下识别器会持续监听并返回临时转录结果。但单个数字发音时长极短,识别器会判定输入未完成,因此不会返回有效最终结果;只有重复发音后,累积的语音内容才会触发转录输出。

解决方案

针对短数字识别场景,可通过调整配置、过滤有效结果两种方式解决:

1. 单次识别模式(说完即停)

如果只需识别单次数字发音后自动停止,修改continuous和interimResults为false,让识别器在检测到语音结束后直接返回最终结果:

startListening() {
  const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
  const recognition = new SpeechRecognition();

  recognition.lang = "en-US";
  recognition.interimResults = false; // 关闭临时结果,只返回最终确认内容
  recognition.continuous = false;     // 关闭连续识别,单次发音后自动停止
  recognition.maxAlternatives = 1;    // 限定返回1个最优候选结果

  recognition.onstart = () => {
    console.log("Start...");
    this.isRecording = true;
  }

  recognition.onend = () => {
    console.log('end')
    this.isRecording = false;
  }

  recognition.onresult = (event) => {
    const transcript = event.results[0][0].transcript.trim();
    console.log("Result:", transcript);
    // 此处可添加数字转阿拉伯数字等业务逻辑
  }

  recognition.start()
}

2. 持续监听模式(不自动停止)

如果需要保持持续监听状态,保留continuous: true,但只处理isFinal为true的最终结果,避免临时结果干扰:

startListening() {
  const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
  const recognition = new SpeechRecognition();

  recognition.lang = "en-US";
  recognition.interimResults = false; // 仅返回最终确认结果
  recognition.continuous = true;      // 保持持续监听
  recognition.maxAlternatives = 1;

  recognition.onstart = () => {
    console.log("Start...");
    this.isRecording = true;
  }

  recognition.onend = () => {
    console.log('end')
    this.isRecording = false;
    // 若需持续监听,可在此处重新调用 recognition.start()
    // recognition.start();
  }

  recognition.onresult = (event) => {
    // 遍历结果集,仅处理标记为最终结果的内容
    for (let i = event.resultIndex; i < event.results.length; i++) {
      if (event.results[i].isFinal) {
        const transcript = event.results[i][0].transcript.trim();
        console.log("Final Result:", transcript);
        // 处理识别到的数字
      }
    }
  }

  recognition.start()
}

3. 额外优化:添加数字语法规则

通过限定识别范围,提升短数字的识别准确率。使用JSGF语法定义数字词汇,让识别器优先匹配目标内容:

startListening() {
  const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
  const recognition = new SpeechRecognition();

  // 定义数字语法规则
  const grammar = '#JSGF V1.0; grammar numbers; public <number> = one | two | three | four | five | six | seven | eight | nine | ten;';
  const speechRecognitionList = new window.SpeechGrammarList();
  speechRecognitionList.addFromString(grammar, 1); // 权重设为1,强制优先匹配

  recognition.lang = "en-US";
  recognition.grammars = speechRecognitionList; // 绑定语法规则
  recognition.interimResults = false;
  recognition.continuous = false;
  recognition.maxAlternatives = 1;

  // 其余生命周期函数同上述示例...
}

内容的提问来源于stack exchange,提问作者Teresa Checa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 06:05:19