RDK X5上的快捷语音方案

首先,恭喜RDK X5终于有了社区版自己的语音方案啦~~

这篇帖子的主要目的是为了带领所有拥有一台RDK X5一条3.5mm的圆孔麦克风耳机的小伙伴,快速实现自己的地瓜数字人语音小助手啦。

1、技术方案总览

目前RDK X5的快捷语音方案的总体介绍如下。

1、支持用户使用关键词hey snips _[_heɪ snɪps] 进行语音唤醒

2、支持用户进行中文语音转文字

3、支持将转出的文字输入给大模型获得反馈

其中,

语音唤醒使用的本地深度学习模型,该模型来自于百度飞浆PaddlePaddle的语音唤醒KWS算法(MDTC),该算法集成于百度飞浆的官方paddlespeech仓库。具体介绍可以参考该网页: https://github.com/PaddlePaddle/PaddleSpeech/tree/develop/examples/hey_snips

语音转文字(语音识别)同样使用的本地深度学习模型,该模型来自于Huggingface的Wav2vec2大模型,该模型体量为约0.5B,具体介绍可以参考:https://huggingface.co/docs/transformers/en/model_doc/wav2vec2

大模型使用的火山引擎云端模型,具体而言,为豆包128k pro模型,详情可查看:https://console.volcengine.com/。因为是云端模型,因此,在使用前请各位小伙伴务必先将自己的RDK X5板联网哦

唤醒后,小伙伴们的问题最终将以文字的形式输出在终端。

具体技术路线可参考该流程图:

2、使用手册

目前,整体方案已经上传至Nodehub,大家可以通过网页(https://developer.d-robotics.cc/nodehubdetail/1888945037768945666)进行访问。

2.1 硬件准备

用户需要自己准备一台RDK X5和3.5mm的耳机麦克风。将3.5mm的耳机麦克风插入到RDK X5的耳机孔中(如下图所示),则可以使用语音与RDK X5进行交互,用于音频的输入与输出。关于更多语音与硬件相关的信息,大家也可以访问地瓜官网(3.2.3 RDK X5 系列音频使用指南 | RDK DOC

2.2 软件准备

用户需前往火山引擎大模型网关官网(https://www.volcengine.com/docs/6893/1263410),跟着步骤完成账号注册,且在`创建网关访问秘钥`这一步,勾选`Doubao-pro-128k`(如下图所示)。

完成步骤1,即可获得网关访问秘钥,这个秘钥会在后续的ROS节点的api_key参数中使用。

2.3 使用步骤

大家首先自行准备一张完成烧录的SD卡插入至RDK X5中,关于系统烧录,可以参考社区官网(https://developer.d-robotics.cc/rdk_doc/Quick_start/install_os/rdk_x5)。随后将RDK X5上电,将3.5mm耳机插入到RDK X5的耳机孔中。通过MobaXTerm登录。将无线网络(WIFI)与RDK X5相互连接,可以参考社区官网(https://developer.d-robotics.cc/rdk_doc/System_configuration/network_blueteeth

RDK X5有了网络后,就可以开始进行readme中的步骤了。

本项目包含两个节点,一个发布节点(publisher),以及一个订阅节点(subscriber):

1. 发布节点(publisher):发布节点会开启一个音频流,将唤醒词、需要语音识别句子的音频发送给订阅节点

2. 订阅节点(subscriber):订阅节点负责接收唤醒词、需要语音识别句子的音频,并将这些音频发送给对应的模型进行推理

2.3.1 环境准备

安装ros依赖:

sudo apt updatesudo apt install python3-colcon-ros

激活ros环境(注:每次新开一个terminal(终端),都建议重新激活一下环境,即执行以下代码)

对于RDK OS V3.0版本,执行如下命令:

source /opt/tros/humble/setup.bash

对于RDK OS V2.1版本,执行如下命令:

source /opt/tros/setup.bash

在RDK开发板上新建一个工作空间目录,并构建src子目录:

mkdir -p colcon_ws/srccd colcon_ws/src

使用git clone命令,将本项目克隆至src目录下。

git clone https://github.com/frank05080/rdk_qa.git

进入项目,拉取kws和asr的对应模型,安装pip依赖。

cd rdk_qawget https://archive.d-robotics.cc/downloads/rdk_model_zoo/rdk_x5/kws.binwget https://archive.d-robotics.cc/downloads/rdk_model_zoo/rdk_x5/wav2vec2_output_30000.binpip3 install -r requirements.txtcd ..

注:该项目与RDK Model Zoo依赖保持一致,均需要bpu_infer_lib,如尚未安装bpu_infer_lib,请参考网站(https://github.com/D-Robotics/rdk_model_zoo)链接进行安装

回到工作空间目录(colcon_ws),构建项目

cd ..colcon build

激活项目环境(注:在完成环境构建后,每次新开一个terminal(终端),都建议重新激活一下环境,即执行以下代码)

对于RDK OS V3.0版本,执行如下命令:

source ./install/setup.sh

对于RDK OS V2.1版本,执行如下命令:

source ./install/setup.bash

2.3.2 发布节点

我们首先在MobaXTerm或者VsCode中打开一个终端,启动一个发布节点。

ros2 run rdk_qa pub

执行后,会弹出一系列和ALSA有关的警告,如Invalid card等,无视即可。

执行的结果如下图所示:

以上相关的警告全部无视即可,到这一步则说明发布节点(pub)已经成功启动。

2.3.3 订阅节点

随后,使用MobaXTerm或VsCode打开另一个终端,启动一个订阅节点。

注意(这一步中的ROS参数必须进行实际情况替换,如果直接复制粘贴如下命令,程序会直接退出):

1. 这里需要填入bin模型的地址做为参数,请根据实际情况填入kws.bin以及wav2vec2_outpu_30000.bin文件路径

2. 这里需要填入的llm_api_key为`环境准备`步骤中申请的api_key,将其复制到这里即可

3. 这里需要填入的vocab_path为github克隆时自带的`vocab.json`文件,请根据实际情况填写其路径,建议填写绝对路径

ros2 run rdk_qa sub --ros-args -p llm_api_key:=None -p kws_bin_path:=None -p asr_bin_path:=None -p vocab_path:=None

启动订阅节点后(这里隐藏了作者个人的llm_api_key,请同学们实际使用的时候,根据自己的申请的api_key进行填入),我们看到`[audio_sub]: FINISHED LOADING MODEL, START AWAKEN..`的回显,则表示所有本地模型已经完成加载,此刻可以进行唤醒。

目前唤醒词固定为:hey, snips

这里唤醒词的发音可以参考B站视频中的发音方式。

我们将唤醒词的正确发音对准耳机的麦克风进行发音,即可让模型正确唤醒。当模型唤醒后,我们会在订阅节点的终端中看到`唤醒`二字。

此时当发布节点的终端会出现回显:

[audio_pub]: Please start speaking:

时,即可对耳机麦克风进行说话。

注意:由于X5语音识别模型为静态模型,输入音频的长度有限,在本案例中,输入音频的长度限制为2s,即期待用户以较快的语速进行一些简短问题的提问。如希望有较长的音频输入,请联系地瓜工程师。或使用火山引擎提供的云端ASR模型。

完成2s的语音输入后,看到回显

[INFO] [1739192185.705863110] [audio_pub]: Speaking ends now..

则表示语音成功输入。

稍等片刻,在订阅节点的终端中会出现回显

[INFO] [1739192189.928730583] [audio_sub]: clean_text: 你在哪

这里文字即使语音转文字(ASR)的本地模型推理结果。

随后,订阅节点会将语音转文字(ASR)的识别结果喂入云端豆包大模型,豆包大模型会根据您问的问题给出对应的答案。

这边的操作回显可以参考如下图片:

发布节点:

订阅节点:

[sub-1] TypeError: Client.__init__() got an unexpected keyword argument ‘proxies’

[ERROR] [sub-1]: process has died [pid 6413, exit code 1, cmd ‘/app/wel_ws/install/rdk_qa/lib/rdk_qa/sub --ros-args --params-file /tmp/launch_params_xcb5hmrs’].

你好我运行sub节点后一直提示关于openai的’proxies’参数的问题,代码中并未提及该参数,按照一些大模型我也做了一些修改,但仍然存在该问题

Model: wav2vec2_output. Inconsistency between the hbrt library version 3.15.55.0 and the model build version 3.15.49.0 detected, in order to ensure correct model results, it is recommended to use compilation tools and the BPU SDK from the same OpenExplorer package.-
我运行sub时出现这个问题,请问大佬怎么解决

这应该是个警告,不是报错,忽略即可

妈的,我也遇到了

ok解决了,可能我唤醒词发音不准砍掉kws模型就好了,我感觉wav2vec2模型识别不是很准,我想要换其他asr模型,大佬会不会做asr模型转换,我在论坛里只看到yolo-v5的演示

能把您的rdkx5语音包分享一下吗我的总是报错

你解决了吗

没有

[quote=“Ranger, post:10, topic:28351, full:true”]
我最开始也遇到了,问了Gemini之后重新安装解决了

1. 彻底卸载 openai 和 httpx

pip3 uninstall openai httpx -y

2. 使用修正后的镜像源地址重新安装 openai

pip3 install openai -i https://pypi.tuna.tsinghua.edu.cn/simple

1 个赞