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

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

相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
目录
打赏
0
0
0
0
5
分享
相关文章
|
3月前
|
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
242 61
OpenHands:能自主检索外部知识的 AI 编程工具,自动执行命令、网页浏览和生成代码等操作
OpenHands 是一款基于 AI 的编程工具,支持多智能体协作,能够自动生成代码、执行命令、浏览网页等,显著提升开发效率。
199 26
OpenHands:能自主检索外部知识的 AI 编程工具,自动执行命令、网页浏览和生成代码等操作
阿里云云效产品使用合集之如何用私有构建机运行shell命令打出的镜像作为下一个阶段的入参
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
AI,代码库-代码助手---代码输入提示框,询问加上特性,让他返回
AI,代码库-代码助手---代码输入提示框,询问加上特性,让他返回
函数计算产品使用问题之要确保服务能在后台持续运行,而不依赖于WebUI是否打开,该怎么操作
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
10月前
|
在机器人流程自动化(RPA)中,判断网页或元素是否加载完成是一个重要的步骤
【2月更文挑战第24天】在机器人流程自动化(RPA)中,判断网页或元素是否加载完成是一个重要的步骤
462 6
分享一款刚开源上线3天的音乐人声分离工具!无需联网!页面化操作!
分享一款刚开源上线3天的音乐人声分离工具!无需联网!页面化操作!
149 1
Sonic 开源移动端云真机测试平台 - 用例编写与回放流程实例演示,任务定时执行、图像相似度定位、公共步骤、公共参数、测试套件等(上)
Sonic 开源移动端云真机测试平台 - 用例编写与回放流程实例演示,任务定时执行、图像相似度定位、公共步骤、公共参数、测试套件等
1118 0
Sonic 开源移动端云真机测试平台 - 用例编写与回放流程实例演示,任务定时执行、图像相似度定位、公共步骤、公共参数、测试套件等(下)
Sonic 开源移动端云真机测试平台 - 用例编写与回放流程实例演示,任务定时执行、图像相似度定位、公共步骤、公共参数、测试套件等(下)
397 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等