基于Web Speech API给AI语言模型加上语音功能,距离MOSS又近了一步

简介: 基于Web Speech API给AI语言模型加上语音功能,距离MOSS又近了一步

前言

前段时间我把微信小号接入了AI语言模型,同事们直呼过瘾,每天在群里聊得风生水起

这不前段时间看了《流浪地球2》,在感叹国产科幻片如此优秀的同时,心中萌生出了一个想法,我是不是也能把语音技术结合到AI语言模型中,做个语音对话机器人玩玩?

说干就干,参照之前的文章,我们使用nodejs实现了AI语言模型接口,现在只需在前端页面中实现语音识别以及语音合成就行了

起步

说到语音功能,浏览器已经提供了对应的Web Speech API,其中有两个对象,分别是

  • webkitSpeechRecognition:语音识别对象
  • speechSynthesis:语音合成对象

借助这两个对象,我们可以调用麦克风和扬声器,对浏览器进行交互

下面是一个简单的流程,用户使用webkitSpeechRecognition中的函数进行语音识别,将字符发送到之前做的接口中,AI模块调用openai换取AI模型输出结果,返回到浏览器,浏览器通过speechSynthesis合成音效,完成一个对话周期

实现过程

webkitSpeechRecognition

      // 创建语音识别对象
      const recognition = new webkitSpeechRecognition();
      // 语音设置成中文
      recognition.lang = "zh-CN";
      // 开始识别
      recognition.start();
      // 当识别到语音时触发事件
      recognition.addEventListener("result", (event) => {
        console.log(event.results);
      });

使用上述代码后,页面中会弹出权限请求,点击允许

然后我们直接说话就会有识别结果(需要挂vpn

如果打开了麦克风,但是说话没有反应的,大概率是因为识别服务没请求到,需要挂vpn

此外, webkitSpeechRecognition类还有以下常用配置:

recognition.continuous = true 持续识别,直到调用stop,默认为false,识别一次就会自动关闭

recognition.interimResults = true 识别时是否打断并更新结果,默认为false,设置为true时会有如下效果

speechSynthesis

接下来看看语音合成

      const speakText = new SpeechSynthesisUtterance("hello world");
      speechSynthesis.speak(speakText);

在控制台输入以下代码,即可合成hellow world的语音效果

小例子

了解了上述用法,我们可以在浏览器上实现模仿自己说话的功能,代码如下

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>ASR-Node</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      #app {
        width: 1000px;
        margin: 100px auto 0;
        text-align: center;
      }
      h3 {
        margin-bottom: 20px;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <h3>ASR-Bot</h3>
      <main>
        <span>发送:</span>
        <span id="send_msg"></span>
        <br />
        <span>接收:</span>
        <span id="rec_msg"></span>
      </main>
    </div>
    <script type="module">
      const speak = (str) => {
        rec_msg.textContent = str;
        const speakText = new SpeechSynthesisUtterance(str); // 转换字符
        speechSynthesis.speak(speakText); // 语音合成
      };
      const listen = () => {
        // 创建语音识别对象
        const recognition = new webkitSpeechRecognition();
        // 语音设置成中文
        recognition.lang = "zh-CN";
        // 当识别到语音时触发事件
        recognition.addEventListener("result", (event) => {
          const { results } = event;
          console.log(results);
          const len = results.length;
          const { transcript } = results[len - 1][0];
          send_msg.textContent = transcript;
          speak(transcript);
        });
        return recognition;
      };
 
      // 开始识别
      listen().start();
    </script>
  </body>
</html>

虽然放不了声音,但是效果还是很直观的:


遇到的问题

虽然在识别时使用了continuous:true属性。webkitSpeechRecognition仍然会超时自动关闭。解决方式是在其end事件钩子中执行重新识别的操作

效果展示

总结

本文带领各位认识了Web Speech API的两个对象以及常用的函数,实现了一个模仿自己说话的案例,并接入最近比较火的AI模型,以实现一个类似小爱同学的语音助手的语音对话功能。

最后,感谢你的阅读,如果文章对你有帮助,还希望支持一下作者。

在这里我也抛砖引玉,期待看到大家的进阶玩法


相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
10天前
|
弹性计算 算法 安全
视觉智能开放平台产品使用合集之在Web应用和WinForm应用程序中调用API时,出现Web端能够成功调用而WinForm端调用失败,是什么原因
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
|
2天前
|
人工智能 自然语言处理 负载均衡
探索 api.maynor1024.live:一站式 AI 服务平台
探索 api.maynor1024.live:一站式 AI 服务平台
27 1
|
5天前
|
开发框架 安全 .NET
使用VB.NET构建Web服务和REST API的指南
【7月更文挑战第2天】使用VB.NET构建Web服务和REST API的指南:从Web服务基础到ASP.NET Core实践,涵盖控制器、路由、模型绑定、安全措施(如JWT、HTTPS)及测试、部署(Azure、Docker)与监控工具。了解如何利用VB.NET在现代云环境中创建高效、安全的API。开始你的VB.NET Web服务开发之旅!**
6 1
|
20天前
|
人工智能 自然语言处理 搜索推荐
优化AI对话体验并全面兼容GPT功能平台
优化AI对话体验并全面兼容GPT功能平台
24 1
|
5天前
|
开发框架 JSON .NET
|
9天前
|
人工智能 图形学
【unity小技巧】使用动画状态机脚本实现一个简单3d敌人AI功能
【unity小技巧】使用动画状态机脚本实现一个简单3d敌人AI功能
9 0
|
3天前
|
NoSQL 安全 API
如何有效提升 API 接口的安全性?
**API安全关键在于验证和防刷。通过排序参数、生成签名和MD5加密确保请求合法性。使用Redis限制请求频率,防止接口被恶意刷取。验证和防刷策略结合,保护API免受攻击和滥用。**
14 0
|
8天前
|
JSON 安全 API
如何高效编写API接口:以Python与Flask为例
构建RESTful API的简明教程:使用Python的Flask框架,从环境准备(安装Python,设置虚拟环境,安装Flask)到编写首个API(包括获取用户列表和单个用户信息的路由)。运行API服务器并测试在`http://127.0.0.1:5000/users`。进阶话题包括安全、数据库集成、API文档生成和性能优化。【6月更文挑战第27天】
33 7
|
5天前
|
Java API PHP
【亲测有效,官方提供】php版本企查查api接口请求示例代码,php请求企查查api接口,thinkphp请求企查查api接口
【亲测有效,官方提供】php版本企查查api接口请求示例代码,php请求企查查api接口,thinkphp请求企查查api接口
12 1
|
8天前
|
JSON 安全 API
实战指南:使用PHP构建高性能API接口服务端
构建RESTful API的简要指南:使用PHP和Laravel,先安装Laravel并配置数据库,接着在`api.php`中定义资源路由,创建`PostController`处理CRUD操作,定义`Post`模型与数据库交互。使用Postman测试API功能,如创建文章。别忘了关注安全性、错误处理和性能优化。
20 2