使用声网 SDK 构建 Piloteer 助盲服务平台的最佳实践

news2024/9/24 13:25:54

前言

在今年声网主办的「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

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

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

相关文章

用HarmonyOS ArkUI实现点赞美女翻牌动效

本文演示如果用HarmonyOS的ArkUI来实现一个点赞的动画效果。体验HarmonyOS 3最新的API 9,欢迎大家一起参与构建这个万物互联的时代! 活动主页 HarmonyOS线上Codelabs挑战赛已经开启,该系列挑战赛将围绕HarmonyOS的基础组件和容器组件、三方…

用Clash解决Python安装模块慢的问题

已经开了代理了,但如果没有使用全局模式的话,Python模块下载速度依然非常慢,只有几十K。使用全局模式是可以解决这个问题,但同时访问国内的一些网站又会速度特别慢,甚至打不开。 比如我们亲爱的知乎就会显示&#xff…

Vue项目初始化

1.创建脚手架: cmd控制台切换到指定的目录命令: vue create 项目名 然后cd到项目里运行: npm run serve 生成目录 2.配置: (1)关闭eslint 防止定义没用带来的报错 在vue.config.js中: 配置&…

Codeforces Global Round 19 D. Yet Another Minimization Problem

翻译: 给定两个数组𝑎和𝑏,长度都为𝑛。 选择索引𝑖(1≤𝑖≤𝑛),将𝑎𝑖和𝑏𝑖交换。 让我们来定义数组的成本&#x1d…

Java连接SQL Server数据库的详细操作流程

Java连接SQL Server数据库的详细操作流程 一.明确JDK版本和下载驱动 1.1 JDK版本查看 win r输入cmd,命令窗口输入java --version 1.2 SQL Server官网下载驱动 SQL Server驱动下载直达地址 下载完成后解压到自己熟悉的目录,不出意外的话你会看到以下文件 1.3 …

IO流~字符流

字符流 为什么会出现字符流 由于字节流操作中文不是特别的方便,所以Java就提供字符流 字符流 字节流 编码表 用字节流复制文本文件时,文本文件也会有中文,但是没有问题,原因是最终底层操作会自动进行字节拼接成中文&#xf…

基于Java的学生竞赛管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

数据库面试题1-数据库基本概念、常用SQL语言

题1:什么是数据库 数据库(Database) 是保存有组织的数据的容器(通常是一个文件或一组文件),是通过 数据库管理系统(DataBase- Management System,DBMS) 创建和操纵的容器…

Chat GPT原理

ChatGPT一经发布就在科技圈火得不行,这两天也是被传得神乎其神,听说它写得了代码、改得了 Bug,小说、段子统统不再话下!那他到底是怎么训练成现在这样的呢?本文介绍李宏毅老师的分析。 那么接下来我们就来介绍Chat GPT…

学习在UE中为截屏工具(SceneCapture)添加一种新的源(Source)

SceneCapture 创建一个SceneCapture2D类型的Actor,再新建一个RenderTarget资源交给它。随后,就能看到截屏的数据出现在RenderTarget中。通过修改 Capture Source ,可以改变截取的数据源,比如法线、基础色等等。 目标 本篇的目…

论文投稿指南——中国(中文EI)期刊推荐(第4期)

🚀 EI是国际知名三大检索系统之一,在学术界的知名度和认可度仅次于SCI!🎄🎈 【前言】 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊。其中&#xf…

AndroidT(13) Log 系统 -- logd 服务的初始化(七)

1. 概览 经过上一章的分析,现在也是时候讨论下logd的初始化了,虽然 logd 在代码量上来说并不大,但是还是分模块进行分析比较合适。所以这里就不贴整体代码了,这部分代码也被包含在AOSP t 的代码中,有兴趣的读者可以自己…

【LeetCode102. 二叉树的层序遍历】——层序遍历

102. 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]示…

[附源码]Python计算机毕业设计SSM基于的优质房源房租管理系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

LeetCode HOT 100 —— 207 .课程表

题目 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。 例…

软件测试的类型

在本节中,我们将了解各种类型的软件测试,这些测试可以在软件开发生命周期时使用。 众所周知, 软件测试 是根据客户的先决条件分析应用程序功能的过程。 如果我们想确保我们的软件没有错误或稳定,我们必须执行各种类型的软件测试…

神经辐射场NeRF

NeRF: Representing Scenes as Neural Radiance Fields for Novel View Synthesis 文章目录NeRF: Representing Scenes as Neural Radiance Fields for Novel View SynthesisPipelineStepsVolume RenderingOptimizationPositional EncodingHierarchical Volume Samplingview-de…

从零学习gitHub (一)

一、账户注册 1.1、打开 GitHub 官方网址 GitHub 1.2、填入用户名「Username」、邮箱「Email」l、密码「Password 注意事项 Username:用户名不能重名,可包含字母数字字符和单行连字符,且不能以单行连字符开头或结尾; Email&…

Linux | 线程同步 | 条件变量 | 生产消费模型 | 阻塞队列实现生产消费模型

文章目录线程饥饿条件变量接口的使用生产者和消费者模型使用阻塞队列实现生产消费模型代码中存在的问题关于pthread_cond_wait的原子性生产消费模型中的并发体现线程饥饿 在多线程并发执行的场景中,会不会出现这样的情况,一些线程由于优先级更高&#x…

分布式锁4-Redisson分布式锁实现与看门狗原理

文章目录一.Redisson介绍二.分布式锁的运用1.引入依赖.2.增加配置类.3.简单代码实现1.不指定加锁时间,会默认启动看门狗.自动帮你的锁进行续期.2.指定加锁时间,不启用看门狗续期,到期自动解锁.三.分布式锁实现原理加锁过程看门狗续期过程一.Redisson介绍 Redisson 是架设在 Red…