前言
在今年声网主办的「RTE2022 编程挑战赛」中,数支队伍经过一个多月的努力开发,很多优秀的作品最终突出重围,斩获大奖。本文由RTE2022编程挑战赛获奖者之一李新春撰写,他主要围绕获奖作品「Piloteer助盲服务平台」分享了开发的构思过程、实践经验。
01 为什么要做这件事
因为工作原因,在一些沟通中接触了不少养老相关的项目需求,在信息化高度发展的社会,老年人的生活却变得不那么舒服,特别是在疫情期间以及健康码常态化的今天,老年人以及推而广之的视障人员的生活会更加的不方便。因此,考虑到视障人员更不方便,所以以视障人员为目标人群,以人工智能、声网音视频技术、智能硬件设备和人性化服务为依托,进行了该解决方案的设计和系统开发。
02 项目介绍
项目口号:让我成为你的眼,让我领航前行路
项目介绍:科技在飞速发展,而部分人被落在了后面,让我们协助弱势群体,为他们在新时代领航。新技术让人们的生活更加便利,而视障群体无法看清世界、老年群体无法快速学习进而无法有效的享受科技带来的便利生活。本项目利用人工智能、音视频传输技术、智能硬件等为他们提供一套音视频领航服务方案,协助他们在熟悉周边环境、道路导航、辅助食品/药品辨别等场景下更从容、更舒心。
项目地址:
https://github.com/AgoraIO-Community/RTE-2022-Innovation-Challenge/tree/main/Application-Challenge/项目89-领航者-Piloteer服务平台
03 如何做这个项目
需求调研
有了这个想法,那首先还是要看看视障人员有没有这个需求。
在我国有 8500 万残疾人¹,这其中超 1700 万是视障人群²。其中 23.5% 是 30 岁以下的年轻人,而在视障网民中,80、90 后占比 75%。
在我国有 30% 的视障者基本呆在家中不出门,大部分人出行是需要家人朋友陪同的。完全不需要家人朋友出行的视障人士比例很低,而且大部分不是全盲人。
因此,从数据上看,有一定学历又不经常出门的视障者有不少人群,那他们出门用什么设备呢?粗略统计一下得到如下内容:
- 导盲犬:导盲犬是一种工作犬,主要工作是代替视障人士的眼睛,为他们领路。训练导盲犬的原理是利用动物的自我保护本能,行走避开障碍物,通过训练将导盲犬的保护机制扩大到视障者,使导盲犬能带着主人躲避障碍物。
- 超声波导盲仪:超声波导盲仪是以发射超声波和接收障碍物反射回波的方式来定位的,它从回波中得到障碍物信息。
- 穿戴式导盲仪器:将导盲装置穿戴在身上,通过简单的导盲语音来进行安全行进。比如腰带式行动辅具。能够通过引导的方式使盲人躲避障碍物,将盲人作为半被动式接受躲避障碍物命令的辅助工具。
- 移动式机器人:移动式机器人是具有多种监测器、强大计算能力和高度智能化障碍物躲避系统的机器人。
- AI智能设备:通过视障人士携带的图像采集单元采集环境图像;将所述环境图像与预设的立体地图进行对比,以确定所述视障人士的当前位置;根据所述当前位置和立体地图,向所述视障人士发出导航提示。
以上这些设备各有各的优势也各有劣势,综合考虑来看随着技术的发展,利用智能化设备、AI 识别、音视频高效传输才是未来真正解决问题的方向。
04 解决方案
综合来看,还是考虑依托新技术来实现降低成本,辅助出行的目的。通过可移动的摄像头解决人员移动过程中视角差的问题,如果使用手机视频,需要举着才能获得第一视角,而利用 OTG 和 UVC 摄像头,可以佩戴到眼镜上,更加方便。
05 系统架构
从系统架构中可以清楚的看到,在设计过程中应用了如下技术:
- UVC 摄像头:利用安卓手机以及安卓系统硬件的 OTG 特性,设计可挂载摄像头,以第一视角进行导引。
- 视频中台:主要利用声网音视频传输技术,实现 1V1 对话,群组对话等实时通信功能,实现单人指导和多人协助的功能以及后台的针对音视频质量、接入时间以及设备的管理。
- AI 中台:是以 AI 算法为核心的能力中台,目前主要依托于 Yolo 算法,实现各类车辆、行人、动物等的识别。
- 平台功能:平台功能依托赋能中台,提供基础的三维地图导航、接入设备管理、导航业务管理以及数据分析等功能,未来根据客户需要进行模块化调整。
06 项目开发实践
开发环境准备
安卓平台
开发平台:android studio 2021.2.1
安卓版本:6.0.1
一般支持 OTG 摄像头的系统即可使用,当前未作机型适配。
Windows平台
当前测试系统使用的是:win10
CPU:I7 7700K
GPU:GTX1050TI
内存:16G
开发平台:Unity3D 2021.2.14AI
算法:Yolo v3
其他:云虚拟主机
声网 SDK 应用
Unity3D C#开发
开发工具:Unity3D 2021.2.4 SDK 版本、RTM 1.4+、RTC 3.7+学习 Demo 场景。在如下场景中,首先要注册登陆声网开发者控制台 console.agora.io 并且创建项目获得的 AppID,点击运行即可进入视频房间,关于获得声网 AppID 的过程,建议在声网官网浏览一下,有非常丰富的文档,如下链接。
https://docs.agora.io/cn/Agora%20Platform/get_appid_token
下面简单介绍几个重要函数
1、打开脚本“TestHelloUnityVideo”这里面的“loadEngine”即为声网引擎重要的初始化步骤。
public void loadEngine(string appId)
{
// start sdk
Debug.Log("initializeEngine");
if (mRtcEngine != null)
{
Debug.Log("Engine exists. Please unload it first!");
return;
}
// init engine
mRtcEngine = IRtcEngine.GetEngine(appId);
// enable log
mRtcEngine.SetLogFilter(LOG_FILTER.DEBUG | LOG_FILTER.INFO | LOG_FILTER.WARNING | LOG_FILTER.ERROR | LOG_FILTER.CRITICAL);
}
2、加入房间,“join”函数,为用户加入房间以及各种回调函数的设计,也是未来我们系统中进行实时沟通对话的开始。
public void join(string channel)
{
Debug.Log("calling join (channel = " + channel + ")");
if (mRtcEngine == null)
return;
// set callbacks (optional)
mRtcEngine.OnJoinChannelSuccess = onJoinChannelSuccess;
mRtcEngine.OnUserJoined = onUserJoined;
mRtcEngine.OnUserOffline = onUserOffline;
// enable video
mRtcEngine.EnableVideo();
// allow camera output callback
mRtcEngine.EnableVideoObserver();
// join channel
mRtcEngine.JoinChannel(channel, null, 0);
}
3、完成点对点导航后,“leave”函数,切记在程序退出时记得关闭。
public void leave()
{
Debug.Log("calling leave");
if (mRtcEngine == null)
return;
// leave channel
mRtcEngine.LeaveChannel();
// deregister video frame observers in native-c code
mRtcEngine.DisableVideoObserver();
}
4、因为我们使用的是 OTG 外部摄像头,因此在开发过程中要使用声网的外部视频推送能力。
安卓端代码如下
protected void preview(boolean start, SurfaceView view, int uid) {
if (start) {
mSource = new AgoraVideoSource();
mRender = new AgoraVideoRender(uid, false);
rtcEngine().setVideoSource(mSource);
rtcEngine().setLocalVideoRenderer(mRender);
// rtcEngine().startPreview();
} else {
// rtcEngine().stopPreview();
}
}
07 项目主要功能
移动端
安卓端主要包含用户登录和音视频通话,为方便视障人员使用,尽量做了简化
Win 服务端
包含数据大屏、设备管理、工单管理、导航管理等模块
数据大屏
展示运营数据分析,设备使用信息,服务质量等内容,如用户年龄分布、周服务排名、当前呼叫信息、日活用户分布等数据问题。
导航管理
以卫星图、街道图为服务人员提供导航服务,可以进行初步的线路规划,实时视频对话、RTM 及时信令控制等。
设备管理
采购设备的企业、单独购买的用户,通过集中注册或者个人注册的方式,将自身设备注册到系统平台上,通过该界面对设备的使用者基本信息进行编辑。
工单管理
系统采用了 AI 辅助识别功能,因此系统设计支持通过网页端(非 AI)和本地端(AI 辅助)进行系统登录和远程服务,包含导航信息的获取、查看、检索等功能。
08 未来拓展
“十四五”规划和 2035 年远景目标纲要中提出要加快数字化社会建设,我们需要考虑到不同群体的数字化需求,特别是老年群体。
上海是国内最早进入人口老龄化且老龄化程度最深的大型城市有将近 400 万老年人,近年来上海积极探索“社区嵌入式养老服务”,让社区老人在熟悉的环境中实现“老有所养”。因而,利用我们已开发完成的这套系统和服务模式,可以在多方面辅助老年人的生活。
以上是 Piloteer 助盲服务平台作品在 RTE2022 编程挑战赛期间的实践分享,更多信息和作品可以访问官方渠道。
Piloteer服务平台:
https://github.com/AgoraIO-Community/RTE-2022-Innovation-Challenge/tree/main/Application-Challenge/项目89-领航者-Piloteer服务平台
大赛作品仓库:
https://github.com/AgoraIO-Community/RTE-2022-Innovation-Challenge