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 Canary 或 Dev 中,打开选项卡或窗口并转到 SpeechRecognition API 操场。
在顶部的信息横幅中,检查状态:它最初读取 SpeechRecognition 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;
自 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:MDN 中的 lang 属性。
- SpeechRecognition:processLocally 属性,位于 MDN。
- SpeechRecognition:MDN 中的连续属性。
- SpeechRecognition:MDN 中的 interimResults 属性。
检查是否已安装本地模型
在开始识别之前,使用 方法检查本地模型是否可用于所选语言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 用作输入的媒体元素的事件处理程序。 例如,如果使用 HTMLAudioElement 或 HTMLVideoElement 作为音频源,则可以按如下所示设置事件处理程序:
mediaElement.onended = () => recognition.stop();
另请参阅:
发送反馈
我们有兴趣听取你关于以下内容的反馈:
- 本地语音识别模型。
- 本地语音识别模型的性能。
- 你希望针对你的用例查看的任何其他改进。
请通过向 SpeechRecognition API 反馈问题添加注释来发送反馈。
另请参阅
微软:
MDN:
GitHub: