石静雯 黎海涛 郎漫雨 李胜
面对复杂的疫情,最有效避免新冠病毒传播的手段便是尽量减少公共人群聚集的情况。在传统的人群疏散方案中,需要针对各大人流密集的地点安排工作人员进行管理,难免会出现疏忽情况。除此之外,还极容易因突发情况出现预料之外的情况。而上述诸多原因将造成人力成本高、预警性和机动性差的情况。
基于这一背景,本项目希望设计出一种系统,提供给城市管理工作人员,在出外勤时可实时监测城市各大重要交通枢纽的人流情况,从而为各类政企单位做出快速、精准的预案。
人流密度統计原理和相关技术
前端层
随着HTML5和CSS3语言标准的推行,让网页设计更加简单、布局更加灵活、适用范围更广,还可以用于游戏桌面和移动应用程序的开发。本系统利用JavaScript在前端层与逻辑层间提供数据传输服务,通过Ajax进行页面图像和数据的更新。
算法调用
在本项目中需要针对3 m以上的中远距离俯拍,以头部作为主要基准识别目标、统计人数,以适应各类人流密集场景,同时还需要针对不规则区域的人数进行统计,并输出渲染图片。
在经过多种平台的对比后,采取百度AI云平台进行算法层的调用。百度AI人流量统计采取HTTP协议通过POST方法来与云平台后端进行数据交互。通过申请的特定Access Token验证后,返回对应的JSON数据。
信息储存
在算法请求进程得到图像数据后,采取SQLite作为终端数据库。SQLite本身是利用C语言的体积很小,所以可以被集成到各种应用程序中,尤其是针对树莓派这类ARM架构嵌入式的Linux系统。
使用mjpg-streamer视频推流
在官网上将mjpg-streamer源代码下载到树莓派内,解压后使用make install安装即可,同时使用/usr/local/bin/ mjpg_streamer -p 8080启动摄像头网络推流。
在启动成功后,需要通过IP地址访问Web端的视频页面:http://IP:8080/?action=stream。
程序结构设计
软件程序主要分为5个大类,各个流程环环相扣,体现了数据在不同环节的流动过程。
前端层:前端页面采用JavaScript动态更新HTML页面数据,通过文本输入框,对话框等组件完成用户的交互功能,以实现摄像头数据切换,预警功能。
网络层:客户端前端请求通过基于TCP的http协议进行传输。在传输过程中,还应该注意树莓派的网卡带宽流量,最新的树莓派4B+采用了千兆无线网卡,足以应对多摄像头的视频推流。
视频推流层:视频推流通过mjpg-streamer进行推流,前端页面通过访问8080端口便能通过http协议传输视频流数据。
百度AI请求层:后端启动一个Python进程,定时每秒抓取摄像头图像传输给百度云平台进行图像识别请求,将返回的request数据存入数据库。
前端响应层:最后向前端反馈实时更新人流量数据即可。
本文基于百度AI平台提供的API接口,采用HTML和JavaScript作为前端语言开发人流量监测的程序,是一种实现人流量监测统计的高效方案。采用mjpg-streamer进行视频推流的方法,具有部署方便,集成简单等特点,通过Access Token认证后,可与百度AI云平台交换数据。
采用开放AI云平台的API方式实现的人流量监测系统,能够针对业务场景快速部署开发。同时也为人流量统计算法的研究人员提供了详实了数据对比,使其能够快速掌握业务逻辑,并且对算法优化提供了基准。
基金项目:西北民族大学本科生科研项目(1012021XBMU21193)