【征文计划】基于Rokid CXR-M SDK 打造AI 实时会议助手:从连接到自定义界面的完整实践 - 教程

news/2025/10/20 15:08:25/文章来源:https://www.cnblogs.com/tlnshuju/p/19152704

【征文计划】基于Rokid CXR-M SDK 打造AI 实时会议助手:从连接到自定义界面的完整实践 - 教程

2025-10-20 15:06  tlnshuju  阅读(0)  评论(0)    收藏  举报

【征文计划】基于Rokid CXR-M SDK 打造AI 实时会议助手:从连接到自定义界面的完整实践

摘要:本文基于 Rokid CXR-M SDK,详细阐述如何构建一个面向商务会议场景的“AI 实时会议助手”应用。通过手机端与 Rokid 智能眼镜的协同,实现语音转写、要点提炼、提词引导、多语翻译与会后纪要自动生成。文章涵盖从环境配置、蓝牙/Wi-Fi 连接、设备控制、AI 场景交互到自定义 UI 渲染的完整开发流程,并提供关键代码示例与最佳实践建议。


一、引言:为什么需要一个“AI 会议助手”?

在快节奏的职场环境中,会议是信息传递与决策的核心场景。然而,传统会议存在诸多痛点:

  • 信息遗漏:参会者忙于记录,无法专注倾听;
  • 语言障碍:跨国会议中实时翻译需求迫切;
  • 效率低下:会后整理纪要耗时耗力;
  • 操作干扰:频繁操作手机/电脑打断会议节奏。

Rokid 智能眼镜凭借其免手持、第一视角、低干扰的特性,天然适合作为会议信息的呈现终端。而 CXR-M SDK 正好提供了手机端与眼镜端协同开发的完整能力。本文将基于该 SDK,手把手教你构建一个真正可落地的“AI 实时会议助手”。


二、技术架构设计

我们的系统采用 “手机为大脑,眼镜为窗口” 的双端架构:

  • 手机端(Android App)
    • 负责蓝牙/Wi-Fi 连接管理;
    • 调用云端大模型进行 ASR(语音识别)、NLU(语义理解)、TTS(语音合成);
    • 处理多语翻译、会议纪要生成;
    • 通过 CXR-M SDK 与眼镜通信。
  • 眼镜端(Rokid Glasses)
    • 接收并渲染实时转写文本、翻译字幕;
    • 在用户发言时自动推送提词内容;
    • 支持拍照记录白板、文档;
    • 所有交互通过语音或功能键触发,无需手动操作。

核心优势:眼镜端无需开发原生应用,所有 UI 均通过 CXR-M SDK 的 自定义页面(Custom View) 动态生成。


三、开发环境准备

3.1 项目配置

settings.gradle.kts 中添加 Rokid Maven 仓库:

dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {maven { url = uri("https://maven.rokid.com/repository/maven-public/") }google()mavenCentral()}
}

build.gradle.kts 中导入 SDK 依赖,并设置 minSdk = 28

android {defaultConfig {minSdk = 28}
}
dependencies {implementation("com.rokid.cxr:client-m:1.0.1-20250812.080117-2")// 其他依赖(如 Retrofit、OkHttp)按文档要求添加
}

SDK文档:https://custom.rokid.com/prod/rokid_web/57e35cd3ae294d16b1b8fc8dcbb1b7c7/pc/cn/9d9dea4799ca4dd2a1176fedb075b6f2.html?documentId=d2ba1c8040964577a43b394d8f7dc814

3.2 权限声明与动态申请

AndroidManifest.xml 中声明必要权限:








MainActivity 中动态申请权限(关键代码):

private val REQUIRED_PERMISSIONS = mutableListOf(Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.BLUETOOTH,Manifest.permission.BLUETOOTH_ADMIN,
).apply {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {add(Manifest.permission.BLUETOOTH_SCAN)add(Manifest.permission.BLUETOOTH_CONNECT)}
}.toTypedArray()
override fun onCreate(savedInstanceState: Bundle?) {requestPermissions(REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS)
}

⚠️ 注意:权限未授予时,SDK 将无法工作。


四、设备连接:蓝牙 + Wi-Fi 双通道

4.1 蓝牙连接(基础通道)

使用标准 Android Bluetooth API 扫描设备,并通过 Rokid 专属 UUID 过滤:

val scanFilter = ScanFilter.Builder().setServiceUuid(ParcelUuid.fromString("00009100-0000-1000-8000-00805f9b34fb")).build()

连接流程分为两步:

  1. 初始化蓝牙
CxrApi.getInstance().initBluetooth(context, device, callback)
  1. 建立连接(使用 onConnectionInfo 回调中的 socketUuidmacAddress):
CxrApi.getInstance().connectBluetooth(context, socketUuid, macAddress, callback)

连接成功后,可通过 isBluetoothConnected 实时监听状态。

4.2 Wi-Fi P2P 连接(高速通道)

Wi-Fi 用于传输图片、视频等大文件,需在蓝牙连接成功后初始化:

CxrApi.getInstance().initWifiP2P(object : WifiP2PStatusCallback {override fun onConnected() {Log.d("WiFi", "P2P connected")}override fun onFailed(errorCode: CxrWifiErrorCode?) {// 处理错误:如手机 Wi-Fi 未开启}
})

最佳实践:Wi-Fi 模块高耗电,仅在需要同步媒体文件时开启,完成后立即 deinitWifiP2P()


五、核心功能实现

5.1 实时语音转写与要点提炼

手机端流程:
  1. 通过 openAudioRecord(1, "meeting") 开启 PCM 格式录音;
  2. 将音频流发送至 ASR 服务(如讯飞、阿里云);
  3. 收到转写文本后,调用大模型提取关键信息(如待办事项、决策点)。
推送至眼镜:
  • 使用 自定义页面 动态更新转写内容:
[{"action": "update","id": "transcript_text","props": { "text": "刚才提到Q3预算需增加20%..." }}
]
  • 若检测到“待办事项”,高亮显示:
{"action": "update","id": "todo_item","props": { "text": "✅ 张三:周三前提交方案", "textColor": "#FF00FF00" }
}

5.2 智能提词器(发言辅助)

当用户需要发言时,App 自动推送提纲:

  1. 打开提词器场景
CxrApi.getInstance().controlScene(CxrSceneType.WORD_TIPS, true, null)
  1. 配置显示参数(居中、大字体):
CxrApi.getInstance().configWordTipsText(textSize = 24f,lineSpace = 1.5f,mode = "normal",startPointX = 0, startPointY = 300,width = 1200, height = 600
)
  1. 发送提词内容
val script = "各位同事,关于新项目,我想强调三点..."
CxrApi.getInstance().sendStream(CxrStreamType.WORD_TIPS,script.toByteArray(),"meeting_script.txt",callback
)

5.3 实时多语翻译

  1. 打开翻译场景
CxrApi.getInstance().controlScene(CxrSceneType.TRANSLATION, true, null)
  1. 配置显示区域(底部居中):
CxrApi.getInstance().configTranslationText(textSize = 20,startPointX = 200, startPointY = 800,width = 800, height = 100
)
  1. 推送翻译结果(按 VAD 分段):
// vadId=1 表示第一段语音
CxrApi.getInstance().sendTranslationContent(vadId = 1, subId = 0,temporary = false, finished = true,content = "The budget needs to be increased by 20%."
)

提示:眼镜端自动进入远场拾音模式,仅拾取他人语音。

5.4 白板/文档拍照与同步

  1. 触发拍照(通过功能键长按或语音指令):
// 在 AI 场景中拍照,结果通过蓝牙返回
CxrApi.getInstance().takeGlassPhoto(1920, 1080, 80, photoCallback)
  1. 监听未同步文件数量
CxrApi.getInstance().getUnsyncNum { _, _, pictureNum, _ ->if (pictureNum > 0) startSyncPictures()
}
  1. 通过 Wi-Fi 同步图片
CxrApi.getInstance().startSync(savePath = getExternalFilesDir(Environment.DIRECTORY_PICTURES)?.absolutePath ?: "",types = arrayOf(CxrMediaType.PICTURE),callback = syncCallback
)

六、自定义 UI:打造专属会议界面

CXR-M SDK 的 Custom View 是本项目的核心亮点。我们设计一个包含三区域的会议界面:

  • 顶部:会议标题与状态
  • 中部:实时转写/翻译
  • 底部:操作提示(如“长按拍照”)

6.1 初始化 JSON

{"type": "LinearLayout","props": {"layout_width": "match_parent","layout_height": "match_parent","orientation": "vertical","backgroundColor": "#FF000000"},"children": [{"type": "TextView","props": {"id": "title","layout_width": "wrap_content","layout_height": "wrap_content","text": "Q3 项目评审会","textSize": "18sp","textColor": "#FF00FF00","gravity": "center","paddingTop": "50dp"}},{"type": "TextView","props": {"id": "content","layout_width": "match_parent","layout_height": "0dp","layout_weight": "1","text": "等待语音输入...","textSize": "16sp","textColor": "#FF00FF00","gravity": "top|start","padding": "30dp"}},{"type": "TextView","props": {"id": "hint","layout_width": "wrap_content","layout_height": "wrap_content","text": "长按功能键拍照","textSize": "12sp","textColor": "#888888","gravity": "center","paddingBottom": "30dp"}}]
}

6.2 动态更新内容

fun updateTranscript(text: String) {val updateJson = """[{"action": "update","id": "content","props": { "text": "$text" }}]""".trimIndent()CxrApi.getInstance().updateCustomView(updateJson)
}

6.3 上传图标(可选)

如需显示状态图标(如麦克风、翻译标志),需提前上传 Base64 图片:

val icon = IconInfo("mic_icon", base64String)
CxrApi.getInstance().sendCustomViewIcons(listOf(icon))

限制:图片 ≤128×128px,建议使用纯绿色通道(#00FF00)以确保显示效果。


七、会后自动化:生成结构化纪要

会议结束后,App 自动整合以下内容:

  • 全程转写文本;
  • AI 提取的待办事项;
  • 拍摄的白板/文档图片;
  • 会议元数据(时间、参与人)。

最终生成 Markdown 格式纪要:

# Q3 项目评审会纪要
**时间**:2025-04-27 14:00
**参会人**:张三、李四、王五
## 关键结论
- 预算增加 20%
- 新功能上线延期至 6 月
## 待办事项
- [ ] 张三:周三前提交详细方案
- [ ] 李四:联系供应商确认报价
## 附件
![白板](whiteboard_001.jpg)

支持一键分享至企业微信、钉钉或邮箱。


八、错误处理与用户体验优化

8.1 网络异常

  • 监听 ASR/TTS 失败,调用 notifyNoNetwork()notifyAiError()
  • 眼镜端显示友好提示:“网络中断,请检查连接”。

8.2 设备状态监听

  • 实时监听电量、音量、亮度,自动调整:
CxrApi.getInstance().setBatteryLevelUpdateListener { level, charging ->if (level < 10 && !charging) {// 提示低电量}
}

8.3 会话管理

  • 会议开始时 setScreenOffTimeout(3600)(1小时不熄屏);
  • 会议结束时 notifyGlassShutdown() 节省电量。

九、总结与展望

本文完整展示了如何利用 Rokid CXR-M SDK 构建一个高价值的“AI 实时会议助手”。我们充分利用了 SDK 的以下能力:

  • 蓝牙/Wi-Fi 双通道连接;
  • AI 场景交互(ASR/TTS/拍照);
  • 提词器与翻译场景;
  • 自定义页面动态渲染;
  • 媒体文件同步。

该方案不仅技术可行,且直击用户痛点,具备极强的落地潜力。未来可进一步扩展:

  • 接入企业知识库,实现智能问答;
  • 支持多人眼镜协同,打造沉浸式会议空间;
  • 结合 AR 标注,实现远程协作指导。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/941240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在AI技术快速实现创意的时代,挖掘新需求成为核心竞争力——某知名内容管理系统能力框架需求探索

本文深入分析了一个为内容管理系统设计的标准化能力描述框架,探讨其核心功能、应用场景以及用户反馈中蕴含的潜在需求,为AI时代下的产品功能规划提供参考思路。内容描述核心功能定位:该项目旨在为某知名内容管理系统…

2025年方钢/扁钢/圆钢/光轴/六角钢/异型钢/冷拉冷拔钢/热轧钢厂家推荐排行榜,Q355B/Q345B/16Mn/45#/40Cr/A3/Q235B材质优质供应商精选

2025年方钢/扁钢/圆钢/光轴/六角钢/异型钢/冷拉冷拔钢/热轧钢厂家推荐排行榜,Q355B/Q345B/16Mn/45#/40Cr/A3/Q235B材质优质供应商精选 行业背景与发展趋势 钢铁材料作为现代工业的基础原材料,在机械制造、建筑工程、…

水韵文脉与科创烟火:无锡城市旅游宣传片的专业化叙事构建 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

单细胞转录组:差异基因分析和富集分析 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

DBA必备脚本:Oracle获取绑定变量的字面SQL文本版版本替代

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。脚本的获取请…

联通光猫烽火吉比特HG6145F获取超级密码

第一步 获取光猫MAC地址 这是两种方法看看光猫实体后面的标注 arp -a 192.168.1.1返回的物理地址第二步 开启Telnet 浏览器输入http://192.168.1.1/telnet?enable=1&key=************ 「************」处为光猫的…

083_尚硅谷_多分支基本使用

083_尚硅谷_多分支基本使用1.分支控制if_else基本语法及说明 2.多分支的流程图 3.多分支案例1 4.多分支案例2

为什么制造业的仓库经验,放到电商就行不通?

我的一些朋友,原先是在制造业做过仓库管理的人,后面转行了电商企业,就直接把原来的一套经验搬过来继续管理仓库,但真正实行后,很快就发现了问题:在制造业里运转得很顺的一套方法,在电商场景下却水土不服。 我个…

Oracle案例:grid环境关于asm diskpath是否需要一致

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。Oracle案例:…

宠物去哪啦小程序系统:智能宠物管理与定位解决方案

一、概述总结 “宠物去哪啦” 是一款聚焦宠物管理与安全的智能小程序系统,支持微信端部署使用。核心依托北斗 + GPS 双模定位的宠物项圈硬件,搭配微擎系统交付的小程序平台,为宠物主人提供实时定位、安全围栏、轨迹…

Windows 如何关闭 dep数据执行保护 - 软件双击没反应的解决办法

1、按 win + s 输入 高级系统设置2、单击“高级”选项卡,然后单击“性能”下面的“设置”;3、单击“数据执行保护”选项卡 选择仅为基本Windows程序和服务启用DEP

2025年整平机厂家推荐排行榜,整平机/校平机/矫平机/开平机/平板机/矫直机/校直机,高精度/精密/液压式/数控/金属/高效稳定/多种规格/全自动整平机公司推荐

2025年整平机厂家推荐排行榜:权威解析行业领军企业 在金属加工行业持续升级的背景下,整平设备作为提升产品质量的关键装备,其技术水平和性能表现直接影响着生产效率和产品精度。随着制造业向高质量方向发展,市场对…

一佳旅游票务系统:旅游行业数字化一体化解决方案

一、概述总结 一佳旅游票务系统是一款聚焦旅游行业的专业化互联网平台,以微信小程序为核心应用载体,提供从景点门票、旅游线路到旅游商品的全链条服务解决方案。系统采用微擎系统交付模式,支持无代码拖拽制作与极速…

2025年10月洗碗机品牌推荐:海信领衔五大机型对比评测榜。

一、引言 对于计划升级厨房、降低餐后劳动强度的家庭用户,以及需要控制后厨人力成本的餐饮创业者而言,洗碗机已从“可选电器”变为“效率刚需”。2025年第四季度,国内能效新标与海外出口补贴同步落地,品牌方集中释…

广告敏感词图文检测微信小程序:高效合规检测解决方案

一、概述总结 广告敏感词图文检测微信小程序是西安立云体网络科技有限公司自主研发的合规检测工具,软著登记号为 2019SR1312226,具备官方正品保障与合法知识产权。该小程序基于微擎系统交付,支持多版本 PHP 环境,提…

2025年10月油烟机品牌推荐:海信领衔静音技术榜对比评测

一、引言 厨房空气管理已成为家庭健康与居住舒适度的关键指标,对于正在装修或焕新厨电的消费者而言,油烟机不仅是排烟工具,更是长期陪伴的能耗设备。用户普遍关注“吸力是否足够、噪声能否更低、清洁是否省心、售后…

Newtonsoft.Json笔记 -JToken、JObject、JArray详解

Newtonsoft.Json(Json.NET)核心概念与高级用法笔记 一、JSON 解析的核心过程 当我们调用: JObject obj = JObject.Parse(jsonString);Json.NET 会执行以下过程:解析 JSON 文本字符串(如 "{ "name"…

软件测试流程-入门

一.测试需求文档 产品需求文档、产品原型图、用户使用手册 重点理解业务需求: 了解熟悉业务,分析需求测试点 二.测试用例 设计测试用例是整个测试中最重要的部分,复杂性也最高。 需要充分理解测试需求和业务流程,才…

什么是人工智能?——AI的定义、发展历程与主要分类

什么是人工智能?——AI的定义、发展历程与主要分类pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

CF2110F Faculty

这让我想到了信友队的一个题。 首先一个经典结论是,\(x, y\) 其中必有之一为最大值,证明就不证了。 然后你发现如果其他数和 \(maxi\) 的倍数关系不超过 \(2\),这个是很好计算的,如果超过了 \(2\),我们重构一下,…