中国软件杯 公共地点人流量计算的云监管平台 业务部分思路分享

赛题名称:公共地点人流量计算的云监管平台
获奖名次:二等奖
项目主要分工:
周泽淼 云端全部业务
张宗浩 边缘端核心业务与算法部分
杨帆 前端框架 部分业务逻辑及宣传视频

赛题中对业务的要求抽取出来后如下:

赛题要求:

1 在公共场所人数密集的边缘区域通过摄像头采集人流和地点的视频数据,边缘端视频处理识别人流量(即人头数)。当边缘端没有超过人数阈值时,人头数据不上报云端,平台支持阈值设置。
2.如果超出承载力,边缘端数据实时上报云监管平台预警,云监管平台实时展示地点信息和人头数数据,智能匹配给出疏导处理的相关保安组织人员推荐信息和联系方式,边缘端人流数据实时变化,云端展示人流量数据也实时变化。如果人流量实时减少并小于阈值,报警自动解除。视频数据在云端不要求实时。
3.边缘端程序和云监管平台程序要求支持独立部署不同服务器,满足边缘计算云边协同架构的实际需求。边缘端前端界面可有可无。
4.异常视频数据、地点信息和人头数数据在云端进行数据存储。云监管平台可以查询,对多个异常地点进行数据分析,并分类,排序重点突出经常容易出现人流异常爆发的地点。
5.要求同时支持web端和手机移动端良好体验
6 正确识别3个以上人数密集边缘区域的地点位置信息和人流量(即人头数),并做相应排序

赛题场景:

无论是大型商超、交通枢纽等公共设施人流监测都为决策者提供资源分配合理化的理论支持,政府、企业和学校都需要云边协同的人流量计算云监管平台实现对人流密集度进行分析,对人群爆发聚集地点进行快速预警和疏导处理。

赛题理解:

初赛时项目讲解视频(5月初作品,不含人流量跟踪、稀疏及密集场景算法切换、大数据可视化、树莓派摄像头推流等效果)

点我查看算法思路分享

1.什么是边云协同:
云计算无法满足实时性要求高的计算任务,对带宽和并发要求高,而将计算任务放在终端设备又有着计算能力不足的问题。因此通过在靠近终端设备的地方建立边缘节点,把任务在边缘节点执行,而不是上传到云数据中心,使得能够在网络的边缘处执行任务,由云端负责统一协调管理,进一步满足实时性任务的需求。
目前国内的边缘计算应用可以参考华为的KubeEdge以及百度的边缘计算duedge
为了更好理解边云协同,引用一下边云协同白皮书中介绍:

资源协同:边缘节点提供计算、存储、网络、虚拟化等基础设施资源,同时提供设备自身配置、监控、维护、优化等生命周期API。边缘节点南向提供丰富的网络接口以支持广泛的终端接入;云端提供资源调度管理策略,包括边缘节点的设备管理、资源管理以及网络联接管理。
数据协同:边缘节点主要负责现场/终端数据的采集,按照规则或数据模型对数据进行初步处理与分析,并将处理结果以及相关数据上传给云端;云端提供海量数据的存储、分析与价值挖掘。边缘与云的数据协同,支持数据在边缘与云之间可控有序流动,形成完整的数据流转路径,高效低成本对数据进行生命周期管理与价值挖掘。

感兴趣的同学可以去参考边缘计算与云计算协同白皮书(2018) 会有更详细的边缘计算及边云协同的介绍,以及华为智能边缘平台IEF手册
2.终端设备-边缘端-云端-前端交互方式:
一个云端与多个内网下的边缘端交互,边缘端接受多个终端设备的rtsp视频数据流。
像C/S或B/S模式,都是已知云端的Ip地址,主动向云端发送请求再由云端返回数据,但是要想云端远程操控多个内网下的边缘端,即边缘端ip不是固定的又应如何实现远程控制。
我们一开始想的方案是用rabbitMQ的广播方式实现远程控制,每个边缘端都有一个uuid,消息体中携带边缘端id及操作方式,由边缘端负责判断。但这样做的方式是效率低效且无法保证消息的及时送达。
在参考目前物联网主流通信协议后,改用MQTT的方式进行互相通信,MQTT的优势是能够保证设备在网络环境不好的情况仍能正常工作且可以保证消息的可靠传输,效率更高。每个终端设备有唯一的uuid,边缘端订阅多个topic
中国软件杯 公共地点人流量计算的云监管平台 业务部分思路分享_第1张图片
云端与前端采用restfulAPI前后端分离方式交互,当边缘端检测到人数超过阈值时,使用MQTT传到云端,云端再使用webSocket动态显示在前端界面上。
3.架构图
云端使用Spring,Mybatis框架整合云端业务,边缘端使用docker作为容器部署。前端界面部署在nginx上
中国软件杯 公共地点人流量计算的云监管平台 业务部分思路分享_第2张图片
4.系统角色与设备管理:
中国软件杯 公共地点人流量计算的云监管平台 业务部分思路分享_第3张图片
5.数据分析与可视化:
当设备正常时,边缘端会定时传一次人数平均值、最大值、方差、中位数等数据。负责人可查看设备过去及未来的人流量趋势图以及设备的本月预警数、设备状态(在线、离线、超过阈值)、安保成员信息等。
用户可以按时间对比同一设备下两个不同时间段的人流量峰值及均值数据,为未来人流量预警提供相关依据。
用户可以在平台的地图上实时查看发生异常的设备的位置及相关信息。
当设备异常时,相关安保人员可以在平台看见实时人流量,并收到短信通知。另外用户可以在平台查看之前的异常记录及保存的异常视频。
6.物联网:
由于边缘端处理后的视频比较大,所以边缘端采用h265压缩方式,使得一分钟130M的视频压缩后只有5M。另外使用sftp作为文件传输协议,保证视频传输过程中支持断点续传并能够加密传输,保护用户隐私。
7.异常视频实时观看
监控直播的话采用rtmp协议,边缘端推流,云端nginx收流,前端flv.js接受视频流
初赛时尝试过视频转base64图片,再用WebSocket传给前端,这种做法延迟过大

上面仅仅简单说明了我们做的其中一部分业务逻辑,
还有一些功能没有放在这里介绍
下面来说下是我们还有待实现的部分:

1.定时任务:
目前我们已实现了远程控制开关机功能,但用户还应该可以在平台设定开关机时间,由平台定时操控边缘端的开关机
为防止节假日高峰时人数剧增而阈值太低,导致频繁报警,用户应可以在平台设置计划任务,当到节假日时动态调整阈值。
2.嵌入式应用:
我们购置了树莓派3b+进行测试,但发现通过调用opencv-python库,调取摄像头画面,内存占用高达60%,还是采用c++编译版的Opencv会靠谱些。另外还需要对模型做嵌入式编译优化。
3.智慧城市:
在智慧城市我们目前做的是在地图上可视化摄像头位置及当发生报警时突出显示对应信息及相关保安联系方式。
在智慧城市功能下,系统应通知最近的保安前去解决,另外不光给保安预警,普通用户也可以关注公众号查看附近地区人头数,以及时提醒用户远离相关区域。
同时,系统还可以和摄像头附近的时空区域相关联,比如学校、商超等,共同为未来人流量趋势分析预警提供支撑。
对于景区,边缘端可以将实时人数显示在景区门口屏幕上,以提醒附近的游客及安保人员。
4.资源管理
边缘端应可以合理有效地控制gpu资源。目前这方面了解的不多,了解到的仅有k8s
另外在云端可以查看到边缘端的带宽使用情况及硬盘剩余空间,并能够远程清理
5.远程更新程序及热更新
云端应可以远程更新边缘端程序,边缘端应支持热更新。

你可能感兴趣的:(python与Linux,数据结构与算法,其他)