Skip to content

Repository files navigation

RIRROM · 夸夸数字生命

RIRROM 是一套面向线下路演与陪伴场景的双设备数字生命系统:家庭端使用 CM4 魔镜,便携端使用微雪 T5AI 1.75 英寸圆屏。两台设备共享同一条实时语音 网关和交互协议,但保留各自适合屏幕与算力的视觉表现。

CM4 魔镜 便携式小圆屏
CM4 魔镜效果 便携式圆屏效果
kaleidoscope-edge-glow orb-states-emotions 三态裁切版

当前能力

模块 CM4 魔镜 便携式 T5AI
语音状态 待机、倾听、说话 待机、倾听、说话
视觉情绪 中性、开心、惊讶、难过、生气 不启用情绪识别
语音输入 浏览器 WebAudio,24 kHz PCM16 板载麦克风,16 kHz PCM16
语音输出 AudioWorklet 环形缓冲 板载扬声器播放队列
视觉推理 本地 FaceAPI,不上传摄像头画面
运行平台 Raspberry Pi CM4 + Chromium kiosk TuyaOpen / T5AI

交互状态采用“语音为主、视觉情绪叠加”的原则:

  1. 网关先同步待机、倾听、说话状态,决定动画的运动节奏。
  2. 只有 CM4 在本地识别人脸表情,情绪仅改变颜色、亮度和粒子质感,不覆盖 当前语音状态。
  3. 小圆屏只消费语音状态,避免额外推理占用嵌入式资源。

系统架构

flowchart LR
    M["CM4 魔镜<br/>麦克风 + 摄像头 + Chromium"] -->|PCM / 控制事件| G
    P["T5AI 小圆屏<br/>麦克风 + LVGL"] -->|PCM / 控制事件| G
    G["Companion Voice Gateway<br/>WebSocket / VAD / 会话状态"] --> Q["Qwen Realtime<br/>ASR + LLM + TTS"]
    Q --> G
    G -->|回复音频 + 状态| M
    G -->|回复音频 + 状态| P
    C["CM4 本地 FaceAPI<br/>五种表情"] -->|情绪叠加| M
Loading

设备与网关使用 companion-audio/2 协议。音频和状态事件的详细定义见 语音协议统一设备架构

仓库结构

RIRROM/
├── apps/cm4-mirror/             # 魔镜网页、视觉识别和 CM4 部署脚本
├── firmware/portable-t5ai/      # 小圆屏完整 TuyaOpen 固件源码
├── services/voice-gateway/      # 队友语音链路及双设备接入补丁
├── docs/                        # 架构、协议、部署和验收文档
├── releases/portable-t5ai/      # 已验收的可刷写固件
└── scripts/                     # 从仓库根目录运行的快捷脚本

快速开始

1. 启动语音网关

要求 Python 3.11+。第一次运行会在网关目录创建独立虚拟环境。

cd RIRROM
export COMPANION_PROVIDER=mock
export COMPANION_HOST=0.0.0.0
export COMPANION_PORT=8766
./scripts/run-gateway.sh

mock 只用于验证设备连接。接入千问时,把密钥放在本机环境变量或权限为 600 的部署配置中,不要写进代码:

export COMPANION_PROVIDER=qwen
export DASHSCOPE_API_KEY='你的 Key'
export QWEN_WORKSPACE_ID='ws-你的 Workspace ID'
export COMPANION_DEVICE_TOKEN='每台设备独立的 Token'
./scripts/run-gateway.sh

完整参数见 语音网关说明配置示例

2. 在电脑预览 CM4 魔镜

先把 apps/cm4-mirror/web/mirror/runtime-config.js 中的网关地址改成当前电脑地址,然后运行:

./scripts/preview-cm4.sh

Chrome 打开:

http://127.0.0.1:8080/mirror/?kiosk=1

页面需要麦克风和摄像头权限。增加 &emotion=0 可临时关闭视觉情绪识别, 但不会影响语音三态。

3. 部署 CM4

./apps/cm4-mirror/deploy-to-cm4.sh pi@rirrom-mirror.local \
  'http://127.0.0.1:8080/mirror/?kiosk=1'

部署和音量操作见 CM4 使用说明

4. 编译与刷写小圆屏

cd firmware/portable-t5ai
cp include/companion_config_secrets.h.example \
   include/companion_config_secrets.h
# 填入网关 URI、设备 ID 和设备 Token

source /path/to/TuyaOpenSDK/export.sh
tos.py config choice
tos.py build
tos.py flash -p /dev/cu.usbmodemXXXX

选择开发板 WAVESHARE_T5AI_TOUCH_AMOLED_1_75。也可以直接使用 releases/portable-t5ai/1.2.3中的稳定固件。

状态映射

网关状态 CM4 动画 小圆屏动画
idle 待机、低能量呼吸 orb_idle
listening / user_speaking / thinking 倾听、聚拢与响应 orb_listen
assistant_speaking 说话、随音频增强 orb_speak

CM4 的五种视觉情绪独立映射为:

识别结果 视觉情绪
neutral 中性
happy 开心
surprised 惊讶
sad 难过
angry / disgusted 生气

开发文档

代码来源与版本

语音网关以队友仓库 b1ght18/AdventureX-RORRIMorigin/main@cd3725751eee33c7d537fc670bad0b92a242383b 为基线,并包含:

  • 双设备 Token 鉴权与 Toooony/T5AI 生命周期兼容;
  • CM4 路演网络下的连接参数;
  • 重复 response.create 防护;
  • 补齐上游测试已引用但漏提交的视觉软状态与提示词上下文;
  • 当前魔镜 AudioWorklet 播放缓冲。

详细归属见 NOTICE。本仓库目前没有另行授予开源许可证,默认仅供 项目团队协作和演示使用。

已知事项

  • 千问 Realtime 若单次响应长时间不结束,服务端可能在约 300 秒后关闭连接。 当前客户端会自动重连,但极端情况下会增加下一轮首音频延迟。
  • CM4 同时运行高帧率视觉和音频时需要可靠散热;路演环境建议使用主动风扇, 不通过降低视觉推理频率来换取稳定性。
  • 原始音频默认不落盘。启用诊断录音前必须取得现场参与者同意,并在验收后清理。

About

RIRROM 双设备数字生命:CM4 魔镜、小圆屏与低延迟实时语音链路

Topics

Resources

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages