十行代码即可为你的网站添加语音小助手,无需任何外部依赖

简介: 前面一篇文章有讲到通过 Web Speech API 来朗诵诗歌,写了个诗歌朗诵的小网站。而 Web Speech API 除了语音输出外,还支持语音识别,你可以通过 Web Speech API 收集用户的语音指令,为你的网站添加一些有趣的功能:比如在小说阅读网站上添加语音指令,让你可以语音控制翻书、下一章等,让你可以更方便的一边看小说一边吃薯片。🐶

网络异常,图片无法展示
|

前面一篇文章有讲到通过 Web Speech API 来朗诵诗歌,写了个诗歌朗诵的小网站。

Web Speech API 除了语音输出外,还支持语音识别,你可以通过 Web Speech API 收集用户的语音指令,为你的网站添加一些有趣的功能:比如在小说阅读网站上添加语音指令,让你可以语音控制翻书、下一章等,让你可以更方便的一边看小说一边吃薯片。🐶

先上下写的 DEMO 页面地址,配合页面实用文章更佳:speech-recognition.heyfe.org

十数行代码添加语音小助手

只需要如下十数行代码,即可为你的网站添加一个语音小助手,让你可以语音控制页面的刷新、后退、首页等。

const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognition();
recognition.lang = 'zh-CN';
const commands = {
    刷新: () => location.reload(),
    后退: () => history.back(),
    首页: () => history.pushState(null, '/')
};
recognition.onresult = event => {
    const l = event.results.length;
    const result = event.results[l - 1][0].transcript.replaceAll(/[.,,。:??!!:]/g, ' ').trim();
    commands[result]?.();
};
recognition.start();
复制代码

下面一起看看这短短的代码的含义。

简单语音识别

语音识别主要涉及到的 APISpeechRecognition - 语音识别,通过 SpeechRecognition 可以借助浏览器调用操作系统原生的语音识别。

使用首先要注意该 API 兼容欠佳,截至目前为止 chrome 仍然需要通过前缀 APIwebkitSpeechRecognition 来调用,而在 iOS 端需要使用 Safari 才可生效,Android 端小米测试 chrome 无法调用。

还需要注意电脑是否有麦克风,网站是否已授予麦克风权限等。

下面先看下最简单的使用方法:

const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognition();
复制代码

首先直接实例化一个 SpeechRecognition 对象。

recognition.continuous = false;
recognition.lang = 'zh-CN';
recognition.interimResults = false;
recognition.maxAlternatives = 1;
复制代码

实例的属性通过直接修改来生效,主要包含以下几个属性:

  • lang:设置语音识别的语言,如美式英语 en-US、中文简体 zh-CN 等,注意默认为当前网页的语言
  • continuous:决定返回的结果是否为连续的,默认为非连续的。语音识别会按照用户的语音停顿将文字分断返回,如果设置返回结果为连续的那后面的返回结果会在前面的结果数组中进行追加。
  • interimResults:设置是否支持返回临时判定结果?文档描述有些不太清楚,测试也未测试出有什么效果。猜测是设置为 true 后可以支持一边说话一边实时返回?
  • maxAlternatives:设置每个识别结果中的最多可选数量,默认为 1。即语音识别会识别出几个语句,供开发者选择。
  • grammars:用于设置语音识别系统可以理解的语法。(猜测为限制语音识别的内容为限定的词法,目前测试没实验出效果)

此外实例还包含三个方法:

  • start:开始语音识别
  • stop:停止语音识别,并且返回目前为止收集到的所有的语音识别内容
  • abort:停止语音识别,但是没有返回值

按照自己的需求设置属性后,即可调用 start 来启动语音识别,此时浏览器会申请麦克风权限:

recognition.start();
复制代码

权限确定后设备麦克风会被启用,此时对麦克风说话,将会触发语音识别实例的 result 事件,所以需要添加事件监听器,可通过 onevent 属性或 addEventListener 添加:

recognition.onresult = event => {
    const l = event.results.length;
    console.log('results:', event.results);
    const result = event.results[l - 1];
    console.log('result:', result);
};
复制代码

识别会按照用户语音断句返回,每次停顿后会调用 result 返回本次识别的结果。

注意,事件中的 results 为伪数组,如果 continuoustrue 时,本次语音识别的每次内容将会追加到伪数组,如果 continuousfalse,则 results 数组只包含最新的一项。

通过 length 取得最新的 result 后,result 中的内容依旧是伪数组,其中元素数据结构如下:

{
    confidence: number;
    transcript: string;
}
复制代码

confidence 为该条判定的准确率,transcript 为猜测的识别内容。result 中的判定数量会按照 maxAlternatives 改变。

通过上面几段的代码,一个简单的语音识别网站就诞生了,可以到 speech-recognition.heyfe.org 进行体验。

扩展

除了上述的 result 事件外,SpeechRecognition 还包含了以下事件:

  • audiostartaudioend
  • startend
  • error
  • nomatch
  • soundstartsoundend
  • speechstartspeechend

本文不做过多深入,有兴趣的可自行了解或关注下我后续会进行更新。

踩坑

这里要注意 continuous,在 iOSSafari 测试发现该参数第一句话还有效,但是从第二句话开始,后面的结果又变为连续的。

原来准备写个对话的小机器人来做演示的,但是由于之前一篇文章中提到的关于浏览器对 speak 的限制,导致机器人无法自动发出语音,所以放弃了 🤦‍♂️。

总结

由于兼容问题,SpeechRecognition 很难在业务上广泛的去应用,不过在个人玩具项目中,可以使用它来给自己的项目添加几分特色(bigger)。

相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
6月前
|
自然语言处理 IDE 前端开发
5个可保存的在线代码片段平台推荐-变成自己的代码词典库
5个可保存的在线代码片段平台推荐-变成自己的代码词典库
271 0
|
4月前
|
小程序
【亲测有效】3步实现 微信小程序内接入小程序客服,网页端客服工具与移动端小程序客服工具使用方法,使用入口,并设置当前客服状态
【亲测有效】3步实现 微信小程序内接入小程序客服,网页端客服工具与移动端小程序客服工具使用方法,使用入口,并设置当前客服状态
411 0
|
6月前
|
并行计算 Linux 异构计算
分享一款刚开源上线3天的音乐人声分离工具!无需联网!页面化操作!
分享一款刚开源上线3天的音乐人声分离工具!无需联网!页面化操作!
调用百度文字转语音接口实现自动报时的解决方案
调用百度文字转语音接口实现自动报时的解决方案
106 0
|
小程序 PHP
[微擎]多系统共用accesstoken修复wifi小程序文本敏感词汇检测+图片检测原生php(可用)
[微擎]多系统共用accesstoken修复wifi小程序文本敏感词汇检测+图片检测原生php(可用)
|
人工智能 机器人 Python
Jupyter大升级:各种大模型都能连,聊天就能生成代码、错误修改
Jupyter大升级:各种大模型都能连,聊天就能生成代码、错误修改
480 0
|
安全 API 数据安全/隐私保护
在编写API接口的技术文章时应注意的内容
编写API接口技术文章时建议包含的内容,通过清晰的说明和示例,可以帮助读者准确理解和使用API接口。
|
安全
如何在游戏中接入内容安全检查
这篇教程提供了微信小游戏制作工具接入敏感词安全检查的解决方案,如果你要在游戏中使用键盘输入,那么内容安全检查是必须要接入的,这篇教程将能够帮助你节省很多很多的摸索时间。所有小蚂蚁游戏开发课程的学员可在知识拓展库中免费阅读此教程。
84 0
|
测试技术 数据安全/隐私保护
Sonic 开源移动端云真机测试平台 - 用例编写与回放流程实例演示,任务定时执行、图像相似度定位、公共步骤、公共参数、测试套件等(上)
Sonic 开源移动端云真机测试平台 - 用例编写与回放流程实例演示,任务定时执行、图像相似度定位、公共步骤、公共参数、测试套件等
969 0