边走边听,所见即所讲:用手机+AR眼镜构建新一代智能导览体验
摘要:本文基于 Rokid CXR-M SDK,设计并实现一套"手机+AR眼镜"协同的智能导览系统。该系统融合第一视角视觉识别、语音交互、实时提词与多模态反馈,打造"边走边听、所见即所讲"的沉浸式导览体验。文章详细阐述系统架构、关键技术实现(蓝牙/Wi-Fi连接、AI场景控制、提词器联动、自定义UI展示)、性能优化策略及落地场景价值,为开发者提供可复用的技术范式。
一、引言:从"看展"到"沉浸"------导览体验的范式跃迁
传统导览方式(如语音导览器、二维码扫码、人工讲解)普遍存在割裂感强、交互被动、信息滞后等问题。用户需低头看手机、手动操作,无法真正"沉浸"于展品或场景之中。
而 Rokid AR 眼镜天然具备第一视角感知、抬头即见信息、双手自由操作的优势。若能结合手机强大的计算能力与交互界面,构建"手机为大脑、眼镜为眼睛"的协同系统,即可实现真正的"边走边听,所见即所讲"------用户只需注视展品,系统便自动识别、讲解;讲解内容同步以提词形式呈现在视野中,形成视听闭环。
本文将基于 Rokid CXR-M SDK(v1.0.1-Preview),从零构建这样一套智能导览原型系统,并分享完整技术实现路径。
二、系统整体架构设计
本系统采用 "手机端(Android App) + Rokid Glasses" 的双端协同架构:
- 手机端:负责用户登录、导览路线规划、展品数据库管理、AI模型推理(可选)、蓝牙/Wi-Fi连接管理、讲解内容生成与下发。
- 眼镜端:负责第一视角图像采集、本地轻量识别(或接收手机指令)、语音播报、提词器显示、用户按键交互。
两者通过 CXR-M SDK 提供的蓝牙(控制信令)与 Wi-Fi P2P(媒体/数据高速传输)通道进行通信。

图1:智能导览系统架构图
三、关键技术实现详解
3.1 设备连接:建立稳定双通道
3.1.1 蓝牙连接(控制通道)
导览系统启动时,首先通过 CXR-M SDK 建立蓝牙连接:
kotlin
// 1. 权限申请(略,参考文档)
// 2. 扫描设备(使用 Rokid UUID 过滤)
val scanFilter = ScanFilter.Builder()
.setServiceUuid(ParcelUuid.fromString("00009100-0000-1000-8000-00805f9b34fb"))
.build()
// 3. 初始化蓝牙
CxrApi.getInstance().initBluetooth(context, device, object : BluetoothStatusCallback {
override fun onConnected() {
Log.d("GuideApp", "蓝牙连接成功!")
// 启动Wi-Fi P2P(用于后续图片/语音传输)
initWifiP2P()
}
override fun onDisconnected() { /* 重连逻辑 */ }
override fun onFailed(errorCode: ValueUtil.CxrBluetoothErrorCode?) { /* 错误处理 */ }
})
关键点:蓝牙连接是所有后续操作的前提,需处理好权限、蓝牙开关、重连等边界情况。
3.1.2 Wi-Fi P2P 连接(数据通道)
讲解语音(TTS)或高清展品图片需通过 Wi-Fi 传输:
kotlin
fun initWifiP2P() {
CxrApi.getInstance().initWifiP2P(object : WifiP2PStatusCallback {
override fun onConnected() {
Log.d("GuideApp", "Wi-Fi P2P 连接成功!")
// 可开始同步媒体文件
}
override fun onFailed(errorCode: ValueUtil.CxrWifiErrorCode?) {
// Wi-Fi 未开启?提示用户
}
})
}
注意:Wi-Fi 模块高耗电,仅在需要传输大文件时开启,用完即关。
3.2 核心功能一:AI场景驱动的"所见即所讲"
系统核心在于 AI场景 的触发与控制。我们利用 CXR-M SDK 的 AI 事件监听与 ASR/TTS 接口,构建闭环:
3.2.1 监听用户触发(长按功能键)
kotlin
CxrApi.getInstance().setAiEventListener(object : AiEventListener {
override fun onAiKeyDown() {
// 用户长按眼镜按键,表示"想了解当前所见"
startRecognition()
}
override fun onAiExit() {
// AI场景退出,清理状态
}
})
3.2.2 手机端处理识别结果(模拟)
实际中可调用云端视觉API(如百度AI、阿里云视觉)或本地轻量模型。此处简化为根据GPS/Beacon定位或预设ID:
kotlin
fun startRecognition() {
// 模拟:根据当前位置获取展品ID
val exhibitId = getCurrentExhibitId()
val content = getExhibitDescription(exhibitId) // 从本地DB获取
// 发送TTS内容到眼镜
CxrApi.getInstance().sendTtsContent(content)
// 同时发送提词器内容(见3.3节)
sendToTeleprompter(content)
}
3.2.3 异常处理
若无网络或识别失败,需通知眼镜端:
kotlin
CxrApi.getInstance().notifyNoNetwork() // 无网
CxrApi.getInstance().notifyAiError() // AI错误
3.3 核心功能二:提词器联动------"边走边看"
为强化信息留存,讲解内容同步以提词器形式显示在眼镜视野中:
3.3.1 打开提词器场景
kotlin
CxrApi.getInstance().controlScene(
ValueUtil.CxrSceneType.WORD_TIPS,
true, // 打开
null
)
3.3.2 配置提词器样式
根据导览场景,设置大字体、居中、自动滚动:
kotlin
CxrApi.getInstance().configWordTipsText(
textSize = 24f,
lineSpace = 1.5f,
mode = "normal", // 或 "ai" 模式(配合ASR自动滚动)
startPointX = 0,
startPointY = 300,
width = 1200,
height = 400
)
3.3.3 发送讲解文本
kotlin
val text = "这是唐代三彩马,高约60厘米,出土于洛阳..."
CxrApi.getInstance().sendStream(
ValueUtil.CxrStreamType.WORD_TIPS,
text.toByteArray(),
"guide_${System.currentTimeMillis()}.txt",
object : SendStatusCallback {
override fun onSendSucceed() { /* 成功 */ }
override fun onSendFailed(errorCode: ValueUtil.CxrSendErrorCode?) { /* 失败 */ }
}
)
优势:用户既可听讲解,又可随时扫一眼提词器确认关键信息,尤其适合嘈杂环境或听力障碍者。
3.4 增强体验:自定义UI展示结构化信息
对于复杂展品(如文物、建筑),纯文本不够直观。我们利用 自定义页面场景 展示图文混排信息:
3.4.1 构建JSON UI
json
{
"type": "LinearLayout",
"props": {
"layout_width": "match_parent",
"layout_height": "match_parent",
"orientation": "vertical",
"paddingTop": "100dp",
"backgroundColor": "#FF000000"
},
"children": [
{
"type": "TextView",
"props": {
"text": "唐代三彩马",
"textSize": "20sp",
"textColor": "#FF00FF00",
"gravity": "center"
}
},
{
"type": "ImageView",
"props": {
"name": "exhibit_001_icon",
"layout_width": "200dp",
"layout_height": "200dp",
"layout_gravity": "center"
}
},
{
"type": "TextView",
"props": {
"text": "年代:唐\n出土地:洛阳\n材质:陶",
"textSize": "16sp",
"textColor": "#FF00FF00"
}
}
]
}
3.4.2 上传图标 & 打开页面
kotlin
// 1. 上传图标(Base64,<128x128)
val icon = IconInfo("exhibit_001_icon", base64String)
CxrApi.getInstance().sendCustomViewIcons(listOf(icon))
// 2. 打开自定义页面
CxrApi.getInstance().openCustomView(jsonUIString)
效果:用户可看到结构化信息卡片,大幅提升信息获取效率。
3.5 辅助功能:设备状态监控与续航优化
- 电量监控:实时显示眼镜电量,低电量时提醒。
kotlin
CxrApi.getInstance().setBatteryLevelUpdateListener { level, charging ->
updateUI("电量: $level% ${if (charging) "(充电中)" else ""}")
}
- 自动熄屏:设置30秒无操作自动熄屏,节省电量。
kotlin
CxrApi.getInstance().setScreenOffTimeout(30)
- 音量/亮度调节:根据环境光/噪音自动调整,或由用户通过手机App控制。
四、性能优化与用户体验细节
4.1 连接稳定性
- 蓝牙断连自动重试(最多3次)。
- Wi-Fi P2P 仅在同步图片/语音时开启,完成后立即关闭。
4.2 数据传输效率
- TTS语音优先使用手机本地合成,避免网络延迟。
- 图片资源预加载并压缩至128x128以内。
4.3 交互反馈
- 按键触发时,眼镜端有"滴"声反馈。
- 手机App显示连接状态、当前展品、操作日志。
五、落地场景与商业价值
场景 | 价值 |
---|---|
博物馆/美术馆 | 替代传统导览器,提供沉浸式、个性化讲解 |
景区/历史遗迹 | 实现"走到哪讲到哪",支持多语言 |
企业展厅 | 自动讲解产品,提升客户体验 |
教育培训 | 学生佩戴眼镜参观,教师远程推送学习资料 |
案例设想:在故宫博物院,游客佩戴 Rokid 眼镜,注视"太和殿"时长按按键,眼镜立即播报:"太和殿,俗称金銮殿,是紫禁城内规模最大、等级最高的建筑......",同时视野下方滚动显示关键信息。游客双手可自由拍照,全程无需看手机。
六、总结与展望
本文基于 Rokid CXR-M SDK,完整实现了一套"手机+AR眼镜"智能导览系统,涵盖设备连接、AI场景控制、提词器联动、自定义UI展示 四大核心模块。系统具备高沉浸、低干扰、强交互的特点,为文旅、教育、企业展示等领域提供了可落地的AR解决方案。
未来可进一步:
- 集成视觉SLAM实现无感触发(无需按键);
- 支持多人协同导览;
- 结合大模型实现动态生成讲解内容。
关键依赖与权限清单
build.gradle.kts
kotlin
minSdk = 28
implementation("com.rokid.cxr:client-m:1.0.1-20250812.080117-2")
AndroidManifest.xml 权限
xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />