【小安派R2测评】安信可小安派R2 - 基于大模型的语音交互智能助手

[复制链接]
查看1019 | 回复7 | 2024-10-3 00:39:20 | 显示全部楼层 |阅读模式

本帖最后由 wenfengand 于 2024-10-9 22:37 编辑

本帖最后由 wenfengand 于 2024-10-9 22:37 编辑

本帖最后由 wenfengand 于 2024-10-9 22:35 编辑

本帖最后由 wenfengand 于 2024-10-3 09:06 编辑

本帖最后由 wenfengand 于 2024-10-3 00:39 编辑

本帖最后由 wenfengand 于 2024-10-3 00:38 编辑

本帖最后由 wenfengand 于 2024-10-3 00:34 编辑

本帖最后由 wenfengand 于 2024-10-3 00:32 编辑

一、背景

随着 AI 大模型技术的不断发展,诸如 GPT、混元、千问这样的大模型开始有能力帮助人们解决工作生活上的问题。但是小米智能家居的核心中枢 - 小爱同学,似乎并不具备这样的“智力”。在对一些开放问题的回答上总是回复“我还没学会”或者“我不知道”。

另外,大模型一般都是用文字交互,在便利性上欠佳。反观目前流行的智能家居,都是用语音实现交互。

如何将大模型技术与智能家居结合起来,通过语音对话的形式,准确、快速、高智商地识别命令、给出回应,是一个很有趣的课题。

二、目标

制作一个智能家居助手,使用语音交互,能够流畅问答。

三、实现效果

如下面的视频所示,目前实现了这些能力:

  1. 点击屏幕按钮,开始录制声音
  2. 大模型会用语音回应

https://www.bilibili.com/video/BV1rC43e4EH2/?share_source=copy_web&vd_source=f7c727e1fe4fb59560566a52efbc2db4

四、整体框架

由于与大模型的交互复杂,即便是仅调接口,语音和文字的互转也非常消耗 cpu 和内存,所以采用了上位机和下位机的方案,两者通过 tcp 接口通讯。

小安派主要负责语音采集、语音播放。通过 dma 将数据从 adc 中采集后放到队列中,然后从队列通过 tcp 发送到上位机。在接收线程中,从 tcp 读取数据并经队列缓冲后,从 dma 传输到 dac。

上位机主要负责与各种接口交互。接收到语音数据后,先转为 wav 格式,然后调用语音转文字接口。识别到命令中,送入腾讯混元大模型。最后把返回的文字转为语音后,再通过 tcp 接口发送给小安派。

使用到的接口:

  1. 腾讯语音转文字(一句话识别):https://cloud.tencent.com/document/api/1093/35646
  2. 腾讯混元 pro:https://cloud.tencent.com/document/api/1729/105701
  3. 腾讯文字转语音:https://cloud.tencent.com/document/api/1073/37995

这些接口都可以使用 python SDK 方便地接入。

五、实现细节

5.1 加固开发板,避免硬件故障

开发板主要由排线连接屏幕、喇叭、麦克风,而且没有板载 usb2ttl,这就会造成如下问题:

  1. 屏幕排线容易断
  2. 外置 usb2ttl 使用杜邦线,容易接触不良
  3. 不美观

![]()![]()

屏幕尺寸较大,可以考虑将开发板完全站在屏幕背后。当然,为了绝缘,先用双面胶粘一层硬纸板,然后再用双面胶粘开发板。总体较为牢固,插拔供电 usb 接口、按压 EN 按键均没有问题。

外置 usb2ttl 也需要固定在开发板上。如上图所示,引了三根飞线到开发板上,并焊接牢固后用热熔胶固定。usb2ttl 的 pcb 使用热熔胶固定在开发板的芯片和接线端子上。此处使用双面胶效果不好,故使用了热熔胶。

5.2 使用 NXP gui guider 加速图形界面开发

常规方式开发 lvgl 的效率比较低,需要用代码一行一行加控件,然后不断烧写进开发板中观察效果。

而 NXP 的 gui guider 使用图形化开发拖拽空间的方式,大大简化了这一流程。

如上图所示,设置背景、增加按钮控件、增加按钮事件后,就可以将代码导出,应用到小安派的工程中。

在小安派中,需要调用 setup_ui 和 events_init 函数,然后就可以下载固件观察效果。在 gui guider上的预览效果与小安派上的实际效果一致。

5.3 设置大模型流式响应减少等待时间

大模型的响应时间较长,所以 pc 端的常见方案是采用流式响应,即逐字输出的方式,来避免长时间等待。

但在语音交互助手这里需要一些改进,用于解决如下问题:

逐字输出后,文字转语音非常不自然,因为文字转语音至少需要一个完整的句子,来生成合适的语速、语调。

综合考虑,采用流式响应 + 拼接句子的方案。即不断缓存大模型的输出,碰到句号后,将缓存中的数据拼接为一个完整的句子,然后执行后续流程。

5.4 采用多重缓冲解决速率不匹配问题

在小安派的软件设计上,语音数据的播放比语音数据的获取要困难许多。

这是处理速率不同造成的。语音获取的时候,是小安派向上位机发数据,即低速设备发送到高速设备上,上位机只要等着就好了。但上位机向下位机发数据时,小安派还没响应,后续的数据就源源不断地进来了,造成缓存队列被塞满。

考虑设计多重缓冲来解决这个问题。

第一层缓冲在上位机。当发完一句话的语音数据后,上位机休眠这句话所需的时间。也即是等小安派播放完后,再发一下句。实践之后,休眠的时间可以缩短 1-2 秒,以减少语句之间的停顿。

第二层缓冲在小安派。每句话的时间在 2-10秒,采样率 16kHz,单声道,采样深度 16 位,小安派需要留足够的缓存。

总结

本项目尝试了大模型在语音交互助手中的应用,采用了 nxp lvgl guider 工具,应用了腾讯云的大模型接口、语音转文字接口、文字转语音接口,大大简化了开发流程。并解决了大模型流式响应的 tts 问题、小安派速率不匹配问题。最终效果良好。

源代码:https://sourl.cn/67AeMW

回复

使用道具 举报

bzhou830 | 2024-10-3 07:11:54 | 显示全部楼层
厉害,我想要复刻
选择去发光,而不是被照亮
回复 支持 反对

使用道具 举报

bzhou830 | 2024-10-3 07:13:04 | 显示全部楼层
大佬源码呢
选择去发光,而不是被照亮
回复 支持 反对

使用道具 举报

lovzx | 2024-10-3 09:12:08 | 显示全部楼层
大佬
回复

使用道具 举报

大猫的鱼 | 2024-10-3 11:19:16 | 显示全部楼层
厉害厉害
回复

使用道具 举报

qhsj | 2024-10-3 14:05:38 | 显示全部楼层
厉害厉害
回复

使用道具 举报

iiv | 2024-10-4 13:16:03 | 显示全部楼层
大佬俺想玩
回复 支持 反对

使用道具 举报

WT_0213 | 2024-10-7 16:02:29 | 显示全部楼层
厉害
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则