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

简介: 前面一篇文章有讲到通过 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)。

相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
存储 Java 开发工具
Android开发的技术与开发流程
Android开发的技术与开发流程
623 1
|
存储 Kubernetes NoSQL
无锁队列实现及使用场景
无锁队列实现及使用场景
|
5G 网络架构 索引
【科普文】为什么无线速率分144M、300M、866M?怎么来的?
【科普文】为什么无线速率分144M、300M、866M?怎么来的?
|
机器学习/深度学习 前端开发 JavaScript
前端小白也能学会的高大上技巧:如何让你的网页支持语音控制?
【10月更文挑战第31天】你是否曾梦想过只需动动嘴皮子就能操控网页?现在,这个梦想触手可及。即使你是前端小白,也能轻松学会让网页支持语音控制的高大上技巧。本文将介绍语音控制的基本概念、实现方法和具体示例,带你走进语音控制的奇妙世界。通过Web Speech API,你只需掌握基本的HTML、CSS和JavaScript知识,就能实现语音识别和控制功能。快来尝试吧!
1356 4
|
9月前
|
人工智能 JavaScript Java
从零开始教你打造一个MCP客户端
Anthropic开源了一套MCP协议,它为连接AI系统与数据源提供了一个通用的、开放的标准,用单一协议取代了碎片化的集成方式。本文教你从零打造一个MCP客户端。
6541 5
|
11月前
|
人工智能 Serverless API
AI时代下的数据信息提取 | 多模态数据信息提取
多模态数据信息提取方案利用先进的大模型技术,支持文本、图像、音频和视频等多种格式文件的信息抽取。该方案通过函数计算FC构建Web服务,接收用户请求并调用视觉和文本模型进行处理,最终返回结果。部署过程简单易上手,适合新手操作,且提供详细的文档和截图指导。用户可通过在线WebUI或API接口实现信息提取,满足不同场景需求。此外,该方案支持批处理模式下的离线作业,大幅提高大规模数据处理效率,降低业务落地成本达50%。
|
移动开发 前端开发 API
uniapp实现条码扫描 可开闪光灯,原生H5调用,不需要任何sdk。
一维码识别功能使用的是Quagga这个库。调用摄像头使用的 navigator.mediaDevices.getUserMedia 这个H5的api。通过 video 和 canvas 把摄像头获取到的数据展现到页面上,同时调用监听Quagga解析。
1511 0
|
Web App开发 移动开发 Ubuntu
HTML5 Web Speech API,让网站更有趣
Web API 变得越来越丰富,其中一个值得注意的是Web Speech API。传统的网站只能“说”,这个API的出现,让网站能“倾听”用户。这个功能已经开放了一系列的用法,非常棒。
939 0
HTML5 Web Speech API,让网站更有趣
|
域名解析 缓存 网络协议
【域名解析】如何将域名指向对应服务器IP
【域名解析】如何将域名指向对应服务器IP
5122 1
|
Docker 容器
docker 设置国内镜像源
docker 设置国内镜像源
91296 1