使用 SpeechRecognition API 将语音转换为文本

SpeechRecognition API 是一个标准 Web API,可直接从网站或浏览器扩展的 JavaScript 代码将来自音频源(如媒体文件或设备麦克风)的语音转换为文本。 本文重点介绍如何将 SpeechRecognition API 与内置于 Microsoft Edge 的设备上 (或本地) 语音识别模型配合使用。

有关该 API 的详细信息,请参阅 MDN 上的 Web 语音 API。

详细内容:

本地语音识别模型的可用性

本地语音识别模型在 Microsoft Edge Canary 或 Dev (版本 150.0.4076 或更高版本中可用) 。 请参阅 成为 Microsoft Edge 预览体验成员。

本地语音识别模型的优点

将 SpeechRecognition API 与 Microsoft Edge 中的本地模型配合使用时,语音识别将在捕获语音的同一设备上进行。 与基于云的解决方案相比,此方法具有以下优势:

  • 降低成本: 使用云识别服务没有相关费用。

  • 网络独立性: 除了初始模型下载之外,使用此 API 转换语音时不会出现网络延迟,并且该 API 也可以在设备脱机时使用。

  • 改进了隐私: 模型中的语音输入永远不会离开设备,并且不会收集这些语音来训练 AI 模型。

型号可用性

网站首次将本地语音识别模型与 SpeechRecognition API 配合使用时,需要初始下载模型。

可以使用 SpeechRecognition API install() 方法返回的承诺监视模型下载。 请参阅下面的 “检查是否已安装本地模型”。

在 Microsoft Edge 中启用本地语音识别

若要将本地语音识别模型与 SpeechRecognition API 配合使用,需要在 Microsoft Edge Canary 或 Dev 中启用该功能。 要使用设备上模型启用语音识别,请执行以下操作:

  1. 请确保使用的是 Microsoft Edge Canary 或 Dev (版本 150.0.4076 或更高版本) 。 请参阅 成为 Microsoft Edge 预览体验成员。

  2. 在 Microsoft Edge Canary 或 Dev 中,打开新选项卡或窗口,然后转到 edge://flags。

  3. 在页面顶部的搜索框中输入“带 设备上型号的语音识别”。

  4. 在“使用 设备上模型进行语音识别 ”下拉列表中,选择 “已启用”,然后单击右下角的“ 重启 ”按钮:

    浏览器的“标志”页

查看工作示例

若要查看操作中的 SpeechRecognition API 并查看演示代码:

  1. 如上所述,在 Microsoft Edge 中启用本地语音识别。

  2. 在 Microsoft Edge Canary 或 Dev 中,打开选项卡或窗口,然后转到 SpeechRecognition API 操场。

  3. 在顶部的信息横幅中,检查状态:它最初显示语音识别 API 就绪。单击“开始”开始。

  4. 在 输入语言 下拉列表中,选择要用于语音识别的语言。

  5. 在“ 音频源” 下拉列表中,选择用于语音识别的音频源:

    • 选择 “麦克风” 以使用设备麦克风作为音频源。
    • 选择“ 文件 ”以使用设备中的音频或视频文件作为音频源。
  6. 如果选择“ 文件 ”作为音频源,则会显示 “媒体文件 ”部分。 单击“ 选择文件 ”按钮,然后从设备中选择音频或视频文件。

  7. 单击“开始”按钮。

    如果尚未下载所选语言的本地语音识别模型,则下载将开始,并且信息横幅显示“ 正在安装适用于 en-US 的设备上模型...”:

    安装设备上的语音识别模型

    安装模型后,文本转录显示在页面中:

    语音到文本转换

  8. 若要随时停止将语音转换为文本,请单击“ 停止 ”按钮。

    在输入音频中长时间静音后,听录也可能自动停止。

另请参阅:

在网站中使用具有本地识别功能的 SpeechRecognition API

以下部分介绍如何在网站代码中将 SpeechRecognition API 与本地语音识别配合使用。 有关 API 本身的更多详细信息,请参阅 MDN 上的 Web 语音 API。

检查是否支持 API 并实例化 SpeechRecognition 对象

若要确保浏览器支持 SpeechRecognition API,请测试对象是否 SpeechRecognition 可用:

if (!window.SpeechRecognition) {
  console.log("The SpeechRecognition API is not available in this browser.");
} else {
  console.log("The SpeechRecognition API is available.");
}

如果支持 API,请创建一个新 SpeechRecognition 实例以开始使用 API:

const recognition = new SpeechRecognition();

另请参阅:

选择输入语言并选择加入本地识别

要使用本地模型配置语音识别,请指定输入语言并设置 processLocally 选项:

recognition.lang = "en-US";
recognition.processLocally = true;

本地语音识别支持以下输入语言:

  • 英语 (en-US)
  • 德语 (de-DE)
  • 意大利语 (it-IT)
  • 葡萄牙语 (pt-PT)
  • 西班牙语 (es-ES)
  • 韩语 (ko-KR)

语言支持预计将在未来版本中扩展。

并将 和 interimResults 选项设置为 continuous 不true停止转录长时间音频会话并接收临时结果:

recognition.continuous = true;
recognition.interimResults = true;

另请参阅:

检查是否已安装本地模型

在开始识别之前,请使用该SpeechRecognition.available()方法检查本地模型是否可用于所选语言。

如果尚未安装模型,请使用以下 SpeechRecognition.install() 方法触发安装,并等待模型完成后再开始识别:

async function ensureModelReady(lang) {
  // Check if the model is already available.
  const availability = await SpeechRecognition.available({
    langs: [lang],
    processLocally: true,
  });

  // If the model is already available, proceed to recognition.
  if (availability === "available") {
    return true;
  }

  // If the model is not available but can be downloaded,
  // trigger the installation and wait for it to complete
  // before proceeding to recognition.
  if (availability === "downloadable" || availability === "downloading") {
    const installed = await SpeechRecognition.install({
      langs: [lang],
      processLocally: true,
    });

    if (!installed) {
      throw new Error(`Failed to install local model for ${lang}.`);
    }

    return true;
  }

   return false;
}

返回的 Promise 将在 SpeechRecognition.install() 安装成功或失败时解析。

另请参阅:

启动语音识别

确保 API 和模型均准备就绪后,可使用该 start() 方法开始识别。

在不带参数的情况下调用时,该 start() 方法将识别来自用户麦克风的音频:

recognition.start();

要识别来自媒体文件而不是用户麦克风的音频,请将实例 MediaStreamTrack 作为参数传递给 start() 该方法。 例如,可以通过使用 WebAudio API 创建MediaStreamDestinationNode实例来创建MediaStreamTrack实例:

const audioContext = new AudioContext();
const mediaStreamDestination = audioContext.createMediaStreamDestination();
recognition.start(mediaStreamDestination.stream.getAudioTracks()[0]);

另请参阅:

在媒体端显式停止识别

要停止识别,请使用以下 stop() 方法:

recognition.stop();

还可以使用用作输入的媒体元素的事件处理程序,选择 onended 在媒体输入结束时停止识别。 例如,如果您使用 HTMLAudioElement OR HTMLVideoElement 作为音频源,您可以按如下所示设置事件处理程序:

mediaElement.onended = () => recognition.stop();

另请参阅:

发送反馈

我们期待收到你关于以下方面的反馈:

  • 本地语音识别模型。
  • 本地语音识别模型的性能。
  • 你希望为用例看到的任何其他改进。

请通过向 SpeechRecognition API 反馈问题添加评论来发送反馈。

另请参阅

Microsoft:

MDN:

GitHub: