本文作者是本届 RTE 2021 创新编程挑战赛获奖者,来自上海交通大学的李新春。他分享了本次参赛作品的构思、系统设计和开发的心得。

01 不得忽略的背景

从国家层面上讲,十四五期间我国人工智能发展的方向之一是:基于 AI 硬件的新产品设计及平台将成为主流。当前,人工智能解决方案正由“软件”模式转变为“软件+硬件”模式。随着智能计算芯片与系统、新型多元智能传感器件与集成平台等新一代人工智能基础支撑平台日渐成熟。以 AI 硬件为基础,在“端+云+芯片”协同发展的背景下,产品的感知、理解、推理和决策能力将实现突破。

从企业发展来说,AI 技术正越来越多的应用的社会的各个方面,从基础的人脸识别到无人驾驶,无论是机器学习还是深度学习虽然是弱人工智能时代,但已经足够让人们的生活产生明显的影响。因而,依托企业应用实践,结合人工智能的发展方向,打造出独具特色的人工智能产品是值得探索战略方向。

02 本项目缘起

因本人一直从事技术领域相关工作,从 AR、VR 到现在的 AI。在不断的工作实践中积累经验,也在不断思考未来技术如何改变生活,所谓人工智能,在现阶段的应用主要的几个方面如工厂生产、生活服务、社会治理等等,各个领域互相独立,有自己独特的算法和模型,那是不是可以做一套云平台,接入各种音视频进行实时分析并反馈,形成一套 AI 云服务平台?因此,本次参赛的出发点就是形成一套可行的应用实践,并提出一种云上 AI 平台的系统架构。

03 系统构成

在本次项目中采用了 YOLO V3 作为基础算法识别引擎,采用声网Agora 的音视频传输作为智能终端的数据来源,采用开源硬件 NodeMcu 及其配套作为智能硬件终端代表,最终形成在家庭局域网内的智能家居平台。

YOLO V3:是 YOLO(You Only Look Once)系列目标检测算法中的第三版。在这一版本中提升了对小目标的识别性能,同时速度得到更好的提升。目前该算法已经更新到 V5 版本,在速度和识别结果上有大幅提升。简单的说,该算法能够达到实时得识别数据,识别精度也满足基本要求,同时在配置、使用和学习上成本较低。

Agora SDKs:在本项目中使用到声网提供的两款 SDK,RTC 实时音视频通信主要功能是进行实时视音频的传输,RTM云信令提供高效、高并发的实时消息,这两款 SDK 兼容 iOS、Android、Windows、macOS、Web、小程序等 20 多个开发平台,可以方便的进行拓展和多平台交互开发。同时对于注册用户,每个月均有 10000 分钟的免费时长,这对于普通开发者完全可以满足日常需求,并且实测在 4G 网络的情况下端到端延迟<400ms,开发测试也是十分良好的体验。

智能硬件:项目中实际上应用包括智能小车控制的 Node MCU 和音视频传输的终端(树莓派Android things等)因为手头的终端性能太差,故开发采用旧手机作为智能硬件控制终端,通过局域网对家庭内的所有智能硬件设备进行综合管理。

开发环境:因为项目使用了机器学习算法,所以对设备还是有点要求,目前本人的开发环境如下:

硬件环境:

  • CPU:I7 9700K

  • GPU:GTX1050TI

  • 内存:16G,500SSD

软件环境:

  • VS2015

  • Arduino IDE

  • Unity 3D 2019.2

04 系统设计

平台初步规划以家居的只能 AI 项目应用,通过家庭笔记本、网络监控摄像机、智能硬件设备、物联网终端设备、Agora 音视频平台等构建一套在家庭范围内可用的智能管理平台。接入智能硬件设备、实时音视频通信、实时信令控制等主要功能,完成从设备管理到事件处理的完整逻辑。

平台功能:平台引入 YOLO V3 并进行封装,以满足在 Unity3D 中实时调用进行识别的需求;调整 Agora 音视频传输脚本,将回调的视频图片进行实时识别,并输出识别事件;构建 Agora 信令消息群组,进行智能硬件控制;使用 Unity Charts 进行数据的展示和分析。

设备管理:随着智能设备性能提升和网络的快速发展,以音视频为基础的智能硬件正快速发展,对于各种设备接入,建议通过专门的设备管理中心进行数据对接,而对于AI管理平台只需要对接梳理好的各类硬件设备,从而进行解耦。目前家居管理平台主要以视频管理为主,支持多种视频监控接入:Agora 视频流、Web 摄像头、HTTP 视频流(HLS)、视频文件等。

AI 算法:系统采用开源 YOLO V3 算法进行各种视频数据的处理。除此之外,各种人工智能识别算法均可以进行接入。当然需要解决在 Unity 中的调用和数据反馈问题。当前家居管理平台通过对 YOLO V3 的封装,支持 C#、C++ 调用;当前项目支持基础 80 种物体识别(自带)、安全帽识别(网络下载)、冰球识别(自定义)等均可以在 github 项目中下载得到,替换同名文件即可实现不同种类识别。

模型构建:如上所述,当前平台已经支持 YOLO 基础 80 种物体识别、安全帽识别、冰球识别,依照 YOLO V3 进行自主训练的模型,均可以在本项目中执行,极大减少了程序开发的难度。

硬件控制:当前采用声网提供的云信令进行远程设备控制,通过构建群组房间进行家居环境下的消息实时通信,支持通过自定义协议进行智能硬件的控制,对于一些智能硬件爱好者,可能只需要一个脚本即可接入到本平台的系统中。

事件处理:采用 Agora 云信令,在构建的家居智能管理群组中发送不同的识别消息和控制命令,通过即时消息发送给移动端用户以及智能设备。支持在线消息、离线消息,让用户任何时候都不错过消息。

移动应用:本项目中,采用 Agora 音视频直播和云信令功能,让用户在接收消息的同时进行对智能硬件进行实时控制,如控制开关、摄像头旋转等。同时,因为 Agora 有很好的可扩展性和封装性,可以对应用系统进行解耦,方便用户进行各模块的分离编程,提升系统可用性。

05 系统开发

相对与去年 Agora 更新发布了针对 Unity3D 的 RTM 即时通信 SDK,同时开发者平台在专业的管理运营下也越来越丰富,同时对于 Unity 3D 开发的支持也在不断完善,出现了很多教程和示例以及丰富的开发文档。

在本次开发中,因为要对 Agora 本身的视频进行图像识别,在 VideoSurface.cs 脚本上进行修改:

//调用yolo封装过的sdk,detectedCallback是托管函数,对回调数据进行处理
var container = RTCGameManager.rtcYoloManager.GetYolo().Detect(nativeTexture.EncodeToJPG());
if (detectedCallback != null)
{
detectedCallback.Invoke(new DeviceItem(), container, nativeTexture,width, height);
}
 

因为使用了 YOLO 机器学习框架,项目还涉及大量的 C++ 开发,除了 YOLO V3 的配置、学习、数据训练还有 C++ 与 C# 的数据通信,为了能使 Unity 3D 顺利调用 YOLO 也是费了很大力气,在工程源码中封装了 YoloWrapper 可以对封装的 DLL 进行调用。

yolo V3 封装
这一阶段使用AlexeyAB在Windows上配置Yolo V3并实现运行和视频识别
目前系统封装了如下主要函数

//定义C#的Debug函数,方便调试
typedef void(*FuncPtr)(const char *);
//传入Debug托管函数
extern "C" YOLODLL_API void set_debug(FuncPtr fp);
//传入是否展示Opencv渲染输出
extern "C" YOLODLL_API void set_show(bool s);
//测试callback
extern "C" YOLODLL_API void test(char* s);
//仅能使用NEt视频流,Web视频流的识别
extern "C" YOLODLL_API bool detect_net( char* filename, char* type, float thresh , bool use_mean);
//配合上一函数使用
extern "C" YOLODLL_API int update_tracking(uchar* data, bbox_t_container &container,int &w,int &h);
//辅助色彩转换函数
extern "C" YOLODLL_API int bgr_to_rgb(const uint8_t* src, const size_t data_length, uchar* des);
//辅助大小转换(图片太大时候使用)
extern "C" YOLODLL_API int resize(const uint8_t* src, const size_t data_length, int w, int h, uchar* des);
//初始化,传入Yolo v3cfg、weights等
extern "C" YOLODLL_API int init(const char *configurationFilename, const char *weightsFilename, const char* names, int gpu);
//识别单张图片文件
extern "C" YOLODLL_API int detect_image(const char *filename, bbox_t_container &container);
//识别单张图片文件bytes
extern "C" YOLODLL_API int detect_mat( uint8_t* data, const size_t data_length, bbox_t_container &container, float thresh, bool use_mean);
//关闭系统
extern "C" YOLODLL_API int dispose();

在智能硬件控制方面本次采用的是开源硬件 NodeMCU,虽说是硬件,但是经过封装之后,采用 C++ 的编程习惯可以顺利的进行端口控制和数据交互,在本次项目中采用舵机控制进行摄像机的转向,通过马达对小车进行运动控制,通过超声波进行避障控制。

//loop函数,循环检测前方是否有障碍物,同时处理服务器
void loop() {
//超声波测距
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = ((duration/2) / 29.1);
if(disLeng<3){
disAvg[disLeng]=distance;
disLeng++;
}else{
disAvg[0]=disAvg[1];
disAvg[1]=disAvg[2];
disAvg[2]=distance;
}
// 距离控制,过近则停止运动
if((disAvg[0]+disAvg[1]+disAvg[2])/3<10){
stop_motors();
}
delay(50);
//处理服务器响应
server.handleClient();
delay(50);
}

最终,项目经过一个多月的开发,形成初步可演示系统。期望借助 Agora 挑战赛的平台,集合小伙伴们的力量,一起丰富扩展这个平台,也期望能为各领域开发者提供一些新的想和和实践。

06 写在最后

关于本次项目:项目目前只是本地 AI 识别 + Agora 音视频平台 + 云信令消息通信 + 智能硬件形成的一个小型综合管理平台,而对于这个平台的最终形态应该是:

  • 云服务 AI 识别中台、可配置模型算法库、完善的事件处理流程。

  • 云服务设备管理平台,对接入的各类硬件传感设备进行综合管理、数据输入输出。

  • 智能生态:以 Agora 音视频、云信令等开发 APP 应用于机顶盒、居家机器人、监护设备,以智能硬件等进行家居设备如烟感、红外、一键 SOS 等应用开发。

当然做起来这一套系统还需要大量的人力物力投入,也需要更多的系统设计和开发,道阻且长。

开发者实践丨Agora Home AI 音视频的未来的更多相关文章

  1. 腾讯技术分享:微信小程序音视频与WebRTC互通的技术思路和实践

    1.概述 本文来自腾讯视频云终端技术总监rexchang(常青)技术分享,内容分别介绍了微信小程序视音视频和WebRTC的技术特征.差异等,并针对两者的技术差异分享和总结了微信小程序视音视频和WebR ...

  2. 腾讯技术分享:微信小程序音视频技术背后的故事

    1.引言 微信小程序自2017年1月9日正式对外公布以来,越来越受到关注和重视,小程序上的各种技术体验也越来越丰富.而音视频作为高速移动网络时代下增长最快的应用形式之一,在微信小程序中也当然不能错过. ...

  3. 了不起的WebRTC:生态日趋完善,或将实时音视频技术白菜化

    本文原文由声网WebRTC技术专家毛玉杰分享. 1.前言 有人说 2017 年是 WebRTC 的转折之年,2018 年将是 WebRTC 的爆发之年,这并非没有根据.就在去年(2017年),WebR ...

  4. 轻松构建基于 Serverless 架构的弹性高可用音视频处理系统

    前言 随着计算机技术和 Internet 的日新月异,视频点播技术因其良好的人机交互性和流媒体传输技术倍受教育.娱乐等行业青睐,而在当前, 云计算平台厂商的产品线不断成熟完善, 如果想要搭建视频点播类 ...

  5. 音视频开发者的福音,快速集成AI配音能力

    音视频内容创作者对剪辑应用中的AI配音需求与日俱增.它的优点很多,不光可以解决雇佣人力配音的成本以及创作者本身的口音.语言等限制,还可以大幅提升生产效率.比如,短视频的播放时间短的几十秒,长的vlog ...

  6. AI赋能音乐创作,人人都是音视频创作者

    华为HMS Core音频编辑服务(Audio Editor Kit)依托自身AI技术的研发优势,上线全新的歌声合成音色及伴奏,给音视频创作者提供更多的创作可能.在短视频场景中,用户自定义歌词的歌声结合 ...

  7. COS 音视频实践 | 多种姿势让你的视频“跑”起来

    导语 随着4G/5G时代的到来,短视频/直播行业开始流行,音视频逐渐成为信息传播中流量占比最大的部分.腾讯云对象存储(COS)作为可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务, ...

  8. COS 音视频实践 | 数据工作流助你播放多清晰度视频

    前言 你是否遇到过这样的场景: 兴致勃勃地观看心爱的视频,正当到了激动人心的高潮部分,却突然因为网速过差被迫陷入"转圈圈"的人生以及社会的大思考中. 又或者是身为网速畅通无阻的vi ...

  9. Android音视频点/直播模块开发实践总结-zz

    随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能.那么作为开发一个小白,如何快速学习音视频基础知识,了解音视频编解码的传输协议,编解码方式,以及 ...

  10. FFmpeg音视频编解码实践总结

    PS:由于目前开发RTSP服务器传输模块时用到了h264文件,所以攻了一段时间去实现h264的视频编解码,借用FFmpeg SDK实现了任意文件格式之间的转换,并实现了流媒体实时播放,目前音视频同步需 ...

随机推荐

  1. 数据库负载均衡 happroxy 中间器(Nginx)容器的安装与配置

    docker  镜像中安装haproxy 1.下载并安装haproxy镜像 docker pull happroxy # docker pull haproxy:1.7 2.查看镜像 docker i ...

  2. python+selenium实现自动识别验证码并登录

    最近学习python+selenium实现网站的自动登录,但是遇到需要输入验证码的问题,经过查询百度收获了几种破解验证码的方式. 方式一)从万能的网友那收获了一个小众但非常实用的第3方库ddddocr ...

  3. Linux定时运行Python代码

    背景 之前定时运行py文件都是jenkins设置定时任务运行,今天想linux有没有定时运行的东西,百度一下找到了,链接:http://blog.csdn.net/netdxy/article/det ...

  4. 英国延长 UKCA 标记截止日期

    政府于 2022 年 11 月 14 日宣布,企业将有 2 年的时间来应用新的 UKCA 产品标记.在 2024 年 12 月 31 日之前,企业可以选择使用 UKCA 或 CE 标志,之后企业只能使 ...

  5. CSS设置边距

    1.内边距 所有的 ​HTML ​元素基本都是以矩形为基础. 每个 HTML 元素周围的矩形空间由三个重要的属性来控制: ​padding(内边距)​ ​margin(外边距)​ ​border(边框 ...

  6. daimayuan第三课(哈希,堆)

    1:哈希 建立:拉链法: a:数组 #include <bits/stdc++.h> using namespace std; const int md = 1e9; int h[1000 ...

  7. 一,创建一个electron应用程序

    之前我们已经用html+css+js创建了一个项目,现在将这个项目用electron以应用程序呈现. 1,首先新建一个文件夹,从终端进入该文件夹: 2,在该文件夹下执行npm init,初始化该项目. ...

  8. React中的CSS模块

    CSS模块       使用步骤:         1.新建一个XXX.moudle.css文件         2.在组件中引入css           impor classes(变量) fro ...

  9. springboot配置类@ConfigurationProperties报错Not registered via @EnableConfigurationProperties or marked as Spring component

    添加一个@Component可以解决此问题,只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能.

  10. Vivado中综合,实现,编程和调试工程可能会出现的问题及解决方案

    Xilinx公司的IDE(集成开发环境) Vivado用处广泛,学会使用Vivado对FPGA的学习至关重要,这里以PRX100-D开发板为例,对Vivado的学习使用进行探讨.本文将会持续更新,列出 ...