Muse Gadget 尝鲜:在 RDK X5 上跑通云端对话和动画头像 UI

最近把 Muse Gadget 折腾到了 RDK X5 上:Linux 端负责连接 Muse,小屏上跑 ESP32 风格的像素头像、字幕和触摸界面。把代码和踩坑过程整理出来,给想尝鲜的朋友参考。

代码已开源: https://github.com/shockley6668/rdk-x5-muse-gadget

实机效果

上图截自实机演示,按住头像时进入 LISTENING 状态。下面是板端界面的清晰截图:

用了什么

  • RDK X5,Ubuntu 22.04.5 ARM64,XFCE/Xorg 桌面。
  • 已经能正常显示、触摸的 480×320 SPI 小屏。
  • 官方 Muse Linux Gadget SDK,负责配对和板端命令。
  • 从 Muse ESP32 界面适配的 LVGL/SDL 原生前端,加 Python 对话和音频桥接。
  • 额外接入 Edge TTS,用于中英文回复朗读;输入、输出通过 PulseAudio。

模型推理在 Muse 云端。 X5 跑的是设备客户端、UI 和音频链路,这次没有用 BPU 做本地大模型推理。

目前跑通到哪里

板端原生界面、云端文字问答已跑通;还做了合成中文语音上传并收到预期回复、TTS 生成和软件播放检查。实际重启后自动启动、Desktop 关闭界面、桌面图标重新打开,以及重复点击不产生多个 UI 进程,都做了实机检查。

操作是按住头像说话、松开发送,扬声器按钮切换静音。右上角 Desktop 或 Esc 关闭界面回到 Ubuntu,后台连接服务继续运行,双击桌面 Muse 图标就能再打开。

语音部分仍有需要补测的地方:耳机麦克风的实际录音质量、耳机和蓝牙音响是否同时听到声音,暂时不算完成验证。短音频或噪声下仍可能识别错语言。

两个比较折腾的坑

1. 开机界面闪一下就没了,桌面图标也打不开。

原来只等显示管理器启动就拉起窗口,XFCE 桌面随后出现,窗口可能被压到下面,进程却还占着单实例锁。现在改成 XFCE 会话自动启动,等窗口管理器和桌面就绪;再次启动优先把已有窗口拉到前台,异常实例再恢复。

2. SPI 小屏刷新太快,桌面跟着卡。

把 UI 刷新和头像动画限制到 8 fps 后,这套屏幕上的桌面操作更顺畅。这个值是当前设备的取舍,不是 X5 的性能上限。

怎么复现

先按官方 Linux SDK 文档安装并在 Muse App 配对,需要自己的 SDK token 和可用的 App 访问权限:

随后在 X5 上执行:

sudo apt-get update
sudo apt-get install -y git
git clone https://github.com/shockley6668/rdk-x5-muse-gadget.git
cd rdk-x5-muse-gadget
# 先阅读脚本,确认符合自己的环境
sudo bash install.sh

当前安装脚本按默认 sunrise 用户、UID 1000、Xorg :0 和 480×320 屏幕配置;屏幕驱动要先装好。其他账号、HDMI 分辨率或音频设备需要调整配置。脚本会配置 PulseAudio 合并输出并重启音频服务,正在播放的声音会中断。后端当前以 root 读取 SDK 配对文件,字幕状态文件本机可读,适合受信任的单用户开发板;细节在 README。

仓库里放了安装脚本、服务配置、前端、后端、测试和验证范围,保留了原项目许可证及署名,没有带设备 token、配对文件或 Wi-Fi 密码。

也向 Muse SDK 提了一个部署文档 PR:
https://github.com/facebookincubator/muse-gadget-sdk/pull/178