目录

T527 × openvela:手语 / 语音双输入 AI 助手

从上游尚未支持的 T527 出发,让手语与语音共享 AI 输入能力。

以国标手语动作表达意图,让手语像语音、文字一样,成为与 AI 交流的输入方式。

本项目在开发启动时上游 NuttX 尚未支持 T527 的背景下,建立 T527 的 openvela 板级支持,并在 ATK-DLT527 上实现手语 / 语音双输入 AI 助手。从 ARM64 启动与设备驱动,到 Qt 界面、板端视觉识别和 AI Agent,形成一套连接硬件平台与智能交互的开源实现。

项目以国标手语动作作为手语表达基础:摄像头采集动作,板端关键点与时序模型生成文本候选,用户确认后进入 AI Agent;语音经 ASR 转写后进入同一条路径。两种输入共享会话、智能问答和工具调用,并通过 Qt 界面与 TTS 语音反馈结果。

天气查询和音乐播放是展示这条链路的演示场景。项目的核心目标,是建立与语音、文字并列的手语输入通道,让手语表达接入 AI 的问答与任务能力。

观看实机演示 · 查看系统架构 · 开始开发 · 浏览验证日志 · 阅读项目说明书

手语天气查询实机演示:用户在摄像头前表达,Qt 页面显示人体与手部关键点

演示视频约 4 分钟。上图取自视频 02:25,以天气查询展示国标手语动作如何经过板端识别进入 Agent。

项目背景

第二次全国残疾人抽样调查推算,2006 年我国言语残疾人数为 127 万人,占当时残疾人总数的1.53%(无锡市人民政府 2006)。这项国内数据表明,语音之外的交互入口具有明确的现实需求。让 AI 接受人的表达,而不把表达限定为发声。 对失声及发声受限用户,与 AI 交流同样可以从手语开始:表达问题、传递意图,再由智能体理解、应答或执行任务。

我们以国标手语动作作为输入基础,将动作序列转换为可确认的文本,再交给 Agent 处理。这一设计的重点是建立手语与语言模型之间的输入通道:感知层负责识别表达,智能体层负责对话与任务,设备层负责反馈和执行。

天气和音乐用来展示这条通道的两种结果:一个从真实数据形成回答,一个把意图落实为设备动作。开发者可围绕同一接口扩展手语表达与 Agent 能力,让更多问答和应用场景共享这套输入机制。

这套交互能力建立在另一个关键工程成果之上:在上游 NuttX 尚未支持 T527 的开发起点上,完成平台适配,让多模态 Agent 真正运行在板端。

项目介绍

1. 在上游未支持的平台上,建立从 BSP 到应用的完整支撑

项目从 T527 的 openvela / NuttX 平台适配入手,提供 ARM64 启动、八核 SMP 配置、内存与存储、以太网、USB UVC 摄像头、音频和显示接入,并向上连接 Qt 平台插件、桌面应用与 AI Agent。

这项工作的价值在于让硬件具备运行智能应用的条件。对于希望在 T527 上开发 openvela 应用的团队,摄像头取流、图形显示、联网请求和音频输出都有对应实现;平台能力可以继续服务于新的视觉、音频和智能体应用。

2. 以国标手语动作建立输入通道,与语音共享智能问答

  • MENU 输入手语:开始 / 停止录制,生成文本候选,确认后提交 Agent。
  • ENTER 输入语音:开始 / 停止录音,经 ASR 转写后进入同一 Agent 请求路径。
  • 统一会话与反馈:Qt 展示输入文本、识别置信度、Agent 回复、按键状态和 TTS 进度。

两种感知方式在文本接口汇合,共享后端的问答、会话和工具能力。候选确认让用户在提交之前知道设备理解了什么;新增手语表达与新增 Agent 任务可以沿各自模块扩展。

3. 板端识别表达,Agent 理解意图,工具落实动作

手语链路在板端完成视频处理、人体 / 手部关键点推理和时序分类,随后以文本接入 Agent。云端语言模型负责理解与组织答复,C Tool 负责获取数据、访问资源和驱动设备。

开发者可以沿着清晰的模块边界调整感知模型、服务连接和设备能力:输入通道负责把表达交给 AI,Agent 负责回答与编排,工具负责需要实际执行的任务。 天气和媒体演示展示了这套分工如何贯通。

以下场景展示同一输入架构如何连接自然表达、AI 应答与设备执行:

场景 用户操作 设备完成的任务
手语查天气 Camera 页按 MENU 录制“今天天气怎么样”,停止后确认候选并点击 Send to Agent 查询长沙当前天气,Agent 整理完整中文答复,显示并播报
手语点音乐 录制“播放周杰伦的歌”,确认后发送 搜索 SD 卡本地曲目,先播报回复,再开始音乐
语音使用助手 按 ENTER 开始录音,再按 ENTER 停止 ASR 转写进入共享 Agent 会话,复用问答和工具能力
查看与控制状态 查看 Agent 页,使用 V− / V+ / HOME 显示五个实体按键状态,调节音量与控制播放

天气链路使用 **Open-Meteo 的长沙坐标 28.23, 112.93**获取当前天气字段,由 Agent 整理成适合收听的自然语言,再交给 MiMo TTS。音乐链路使用 SD 卡本地 MP3,并通过播放调度保证 回复在前、音乐在后。

系统架构

T527 openvela 双输入 Agent 系统架构:板端感知、Agent 编排、C Tool 执行与图形音频反馈

板端执行层运行在 openvela / NuttX 上:USB 摄像头、关键点与时序识别、Qt 桌面、本地媒体和音频设备。联网服务层通过有线以太网连接 DeepSeek 问答、MiMo ASR / TTS 和天气数据服务。

层次 职责 源码入口
平台与设备 ARM64 启动、多核、内存、存储、网络、USB、音频、显示与按键 T527 板级支持 · NuttX
图形与输入 Qt 平台适配、摄像头预览、输入反馈、Agent 页面 Qt 平台插件 · 桌面应用
本地感知 INT8 关键点检测、变长时序分类、候选确认 手语视频识别 · 时序网络
智能体 共享会话、意图理解、Skill 与工具调用 Agent 核心 · Skill 库
服务与执行 天气数据、本地音乐、ASR、TTS 与音频交付 C Tool · 语音模块

国标手语动作如何进入 AI 会话

手语流程:视频采集、关键点与时序分析、候选确认、统一消息、智能体任务与反馈

MENU 开始 / 停止
    → 视频帧
    → 人体 17 点 + 双手各 21 点
    → [T, 219] 变长特征序列
    → 轻量时序网络
    → 候选文本与置信度
    → 用户确认
    → 共享 Agent 会话

关键点序列保留动作随时间变化的信息。主机工具支持视频级标签、特征提取、训练和权重导出;板端使用 C++ 时序执行器运行导出的网络,将识别候选转换为 Agent 可接收的文本。

这个接口连接的是手语表达与 AI 会话。 文本提交后由共享 Agent 路径处理,天气、媒体等工具是按任务需要接入的执行能力。扩展手语词表与表达映射时,可以继续复用后端会话、问答和播报机制。

查看训练流程 · 查看特征提取 · 查看权重导出

Agent 如何把意图落到设备上

Skill 与 C Tool 协作:统一消息进入 Agent,调用天气或媒体工具,反馈至 Qt 和音频输出

Skill 描述任务步骤,C Tool 执行具体动作。 天气工具返回当前天气字段,媒体工具返回搜索结果与播放状态;Agent 根据结果组织回复,而不是只生成一句“正在为你播放”。

问答与工具执行共享同一入口:Agent 根据输入形成应答,并在任务需要时调用工具。扩展后的手语表达和语音输入可以复用这条处理路径。

测试日志

演示、源码和测试记录分别展示用户体验、实现方式与运行结果。开发者可以从一个场景一路找到对应模块和验证材料。

关键能力 已记录的结果 验证材料
内核基础 CMocka 内存 8/8、调度 16/16、系统调用 82/82;ostest 结束状态 0 CMocka 日志 · ostest 日志
存储与显示 文件系统测试 20/20;framebuffer 测试 4/4 文件系统 · 显示
有线网络 连通性测试:网关 200/200、公网 20/20;记录 DNS 与 HTTP 请求 网络运行日志
音频与本地媒体 48 kHz 双声道录放、audio CMocka 1/1;SD 卡 MP3 播放记录 音频测试 · MP3 播放
手语到 Agent MENU 视频采集、时序候选生成,以及天气 / 音乐任务调用 手语天气链路 · 手语音乐链路
推理优化一致性 scalar / optimized 的 324 帧关键点输出指纹一致;NEON 算术检查 251,916 个样本通过 逐帧比较 · 算术检查
开发者主机检查 手语 pipeline 4 项、天气 mock 4 项通过;C++ CLI 编译及 Python / Shell 语法检查通过 主机检查日志

完整的 76 份日志按主题收录于 测试日志索引。

快速开始

1. 运行主机检查

在 Linux 主机准备 Python 3、C / C++ 编译器和 Bash,从项目根目录执行:

cd src
bash scripts/test_host.sh

这一步覆盖手语 pipeline、天气响应解析、时序网络 CLI 编译和脚本语法,可用于提交改动前的快速检查。

2. 准备板端构建

参考硬件为 ATK-DLT527B,搭配 USB UVC 摄像头、HDMI 显示器、扬声器、SD 卡和有线网络。构建使用 aarch64-none-elf 工具链、CMake 和 Qt 6.8.3 主机工具。

按 资源配置说明准备中文字体、关键点模型和时序模型导出文件,再按 构建说明运行分阶段构建。以下命令均在 src/ 下执行:

export OPENVELA_TOOLCHAIN_BIN=/path/to/aarch64-none-elf/bin
export PATH="$OPENVELA_TOOLCHAIN_BIN:$PATH"

# 检查构建工具与资源,生成 NuttX 配置和头文件
bash scripts/build.sh check
bash scripts/prepare.sh

# 构建 Qt 主机工具与板端 Qt
bash scripts/build.sh host
export QT_HOST_PATH="$PWD/install/qt-host-6.8.3"
bash scripts/build.sh qt

# 启用已导出的手语时序模型,构建桌面与固件
export OPENVELA_SIGN_VOCAB_AGENT=ON
export OPENVELA_SIGN_VOCAB_DIR="$PWD/build/t527_sign_vocab_export"
bash scripts/build.sh desktop
bash scripts/build.sh firmware

扩展手语输入可从训练工具目录入手:录制带视频级标签的数据,提取 [T, 219] 特征,训练时序模型,再导出板端权重。标签、网络结构、导出器与板端消息映射作为同一份模型契约维护。

3. 配置联网服务

Agent 问答使用环境变量 DSKEY,MiMo ASR / TTS 使用环境变量 MIMO。通过运行时配置接入自己的服务账号,凭据与源码构建分离。

主机已设置这两个环境变量后,在 src/ 下使用串口工具注入:

# qcmd 依赖 PyQt6 / QtSerialPort
export T527_SERIAL_PORT=/dev/ttyACM0
export T527_SERIAL_BAUD=115200
python3 tools/qcmd.py --inject-dskey
python3 tools/qcmd.py --inject-mimo

工具从环境变量读取凭据,使用关闭回显的串口握手注入。变量名称可参考 .env.example。本地音乐放入板端 SD 卡;天气工具按长沙坐标请求 Open-Meteo。

项目目录

final_code_2/
├── README.md                 # 项目价值、架构与开发入口
├── src/                      # 源码与构建工具
│   ├── nuttx/                # 内核、T527 BSP 与驱动
│   ├── openvela-apps/        # Agent、服务与系统应用
│   ├── ports/qt/             # Qt 平台插件与桌面
│   ├── tools/                # 手语训练、导出与串口工具
│   ├── configs/              # 构建配置
│   └── scripts/              # 主机检查与分阶段构建
├── demo/                     # 演示固件
├── presentation/             # 实机演示视频
├── docs/                     # 项目说明与架构图片
└── tests/                    # 分类日志与索引

架构素材来自项目说明材料,提供 PNG 和可编辑的 draw.io 文件: 系统架构 · 手语流程 · Skill / Tool 流程。


让手语同语音、文字一样,成为人与世界、人与机器交互的原生语言。

圣人立象以尽意,设卦以尽情伪。 ——《周易・系辞上》

代码及依赖的使用条款见 许可证说明 与 第三方组件说明。

关于
574.7 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号