SpeechRecognition API 是一个标准 Web API,可直接从网站或浏览器扩展的 JavaScript 代码将来自音频源(如媒体文件或设备麦克风)的语音转换为文本。 本文重点介绍如何将 SpeechRecognition API 与内置于 Microsoft Edge 的设备上 (或本地) 语音识别模型配合使用。
有关该 API 的详细信息,请参阅 MDN 上的 Web 语音 API。
详细内容:
- 本地语音识别模型的可用性
- 本地语音识别模型的优点
- 在 Microsoft Edge 中启用本地语音识别
- 查看工作示例
- 在网站中使用具有本地识别功能的 SpeechRecognition 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 中启用该功能。 要使用设备上模型启用语音识别,请执行以下操作:
请确保使用的是 Microsoft Edge Canary 或 Dev (版本 150.0.4076 或更高版本) 。 请参阅 成为 Microsoft Edge 预览体验成员。
在 Microsoft Edge Canary 或 Dev 中,打开新选项卡或窗口,然后转到
edge://flags。在页面顶部的搜索框中输入“带 设备上型号的语音识别”。
在“使用 设备上模型进行语音识别 ”下拉列表中,选择 “已启用”,然后单击右下角的“ 重启 ”按钮:
查看工作示例
若要查看操作中的 SpeechRecognition API 并查看演示代码:
如上所述,在 Microsoft Edge 中启用本地语音识别。
在 Microsoft Edge Canary 或 Dev 中,打开选项卡或窗口,然后转到 SpeechRecognition API 操场。
在顶部的信息横幅中,检查状态:它最初显示语音识别 API 就绪。单击“开始”开始。
在 输入语言 下拉列表中,选择要用于语音识别的语言。
在“ 音频源” 下拉列表中,选择用于语音识别的音频源:
- 选择 “麦克风” 以使用设备麦克风作为音频源。
- 选择“ 文件 ”以使用设备中的音频或视频文件作为音频源。
如果选择“ 文件 ”作为音频源,则会显示 “媒体文件 ”部分。 单击“ 选择文件 ”按钮,然后从设备中选择音频或视频文件。
单击“开始”按钮。
如果尚未下载所选语言的本地语音识别模型,则下载将开始,并且信息横幅显示“ 正在安装适用于 en-US 的设备上模型...”:
安装模型后,文本转录显示在页面中:
若要随时停止将语音转换为文本,请单击“ 停止 ”按钮。
在输入音频中长时间静音后,听录也可能自动停止。
另请参阅:
- /built-in-ai/playgrounds/speechrecognition-api/ - SpeechRecognition API 操场演示的源代码。
在网站中使用具有本地识别功能的 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();
另请参阅:
- SpeechRecognition,位于 MDN。
选择输入语言并选择加入本地识别
要使用本地模型配置语音识别,请指定输入语言并设置 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: lang 属性,位于 MDN。
- SpeechRecognition: processLocally 属性,位于 MDN。
- SpeechRecognition: continuous 属性,位于 MDN。
- SpeechRecognition: interimResults 属性,位于 MDN。
检查是否已安装本地模型
在开始识别之前,请使用该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]);
另请参阅:
- SpeechRecognition:在 MDN 启动 () 方法。
- Web 音频 API。
在媒体端显式停止识别
要停止识别,请使用以下 stop() 方法:
recognition.stop();
还可以使用用作输入的媒体元素的事件处理程序,选择 onended 在媒体输入结束时停止识别。 例如,如果您使用 HTMLAudioElement OR HTMLVideoElement 作为音频源,您可以按如下所示设置事件处理程序:
mediaElement.onended = () => recognition.stop();
另请参阅:
- SpeechRecognition: stop () method, at MDN.
发送反馈
我们期待收到你关于以下方面的反馈:
- 本地语音识别模型。
- 本地语音识别模型的性能。
- 你希望为用例看到的任何其他改进。
请通过向 SpeechRecognition API 反馈问题添加评论来发送反馈。
另请参阅
Microsoft:
MDN:
GitHub: