使用 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. 在顶部的信息横幅中,检查状态:它最初读取 SpeechRecognition 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;

自 Microsoft Edge 150.0.4076 起,本地语音识别支持以下输入语言:

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

语言支持有望在未来版本中扩展。

此外, continuous 将 和 interimResults 选项 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;
}

当安装成功或失败时, SpeechRecognition.install() 解析返回的承诺。

另请参阅:

启动语音识别

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

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

recognition.start();

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

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

另请参阅:

显式停止识别并在媒体端停止识别

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

recognition.stop();

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

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

另请参阅:

发送反馈

我们有兴趣听取你关于以下内容的反馈:

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

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

另请参阅

微软:

MDN:

GitHub: