双向人流量统计系统研究与实现
2022-08-12林江山徐金刘欢张文博谭旭
林江山,徐金,刘欢,张文博,谭旭
(新疆农业大学 计算机与信息工程学院,新疆 乌鲁木齐 830052)
0 引 言
人流量统计是视频监控系统的关键技术之一, 其任务是利用视频图像分析技术自动统计在某个时间段内通过某一场景的人流数量。由于人流信息是许多企业中做决策依据的一个重要信息, 因此该技术可以广泛应用于各行各业。如公共场所监控人流密度,通过数据管控以防踩踏事件;商场通过客流统计提高运营效率及服务质量;景区统计游客数量方便人流限制,降低公共设备使用压力。
随着教育的普及和完善,学校的生源日益增多,快速有效的人流量统计已然成为校园管理中的一个重要参数。人流量统计正在由传统人工统计向极具自动化的人体识别方向发展,这也对校园管理者提出了更高标准的要求:必须在最短时间内对学生的流量变化做出反应,且需具备学生流量发展趋势的预见性以及最大限度地减少识别成本,提高校园日常管理决策的科学性,因此校园管理层对人流量数据的统计的重视由来已久。
本文介绍基于百度AI的双向人流量监控系统,使用Python语言实现,百度人流量统计功能适应各种人群密集场所,不仅可用于人流量的统计,甚至可进行人体的识别及追踪,准确率高达90%以上。
1 百度API简介及开发工具
1.1 百度API
百度提供的人流量统计功能包括静态人数统计和动态人数统计。静态人数统计以头部为识别对象统计瞬时人数,统计算法没有人数限制,可适用于教学楼等人群密度场所。静态人数统计是识别图片中人数,不支持去重,图片类型支持PNG、JPG、JPEG、BMP。动态人流量统计以头肩为识别目标,进行人体检测和追踪,用户可指定区域范围,根据人员流动方向识别进出人数。
调用百度人流量统计功能,首先需对接百度AI开放平台,进行鉴权认证,包括以下步骤:
(1)注册登录百度智能云平台,获取Access Key ID /Secret Access Key密钥对。
(2)获取Access Token,运行下面代码百度平台将以JSON格式返回Access Token值和时效期。
1.2 MySQL数据库
在进行项目开发时,需要存储大量历史人流量数据,虽XML文件与文本文件也可以作为数据的载体,但不易进行管理。经过选型,MySQL数据库兼容性好,使用便捷,故在此次系统设计中应用。
为了避免在数据库安装过程中出现问题,安装前应详细地检查MySQL数据库使用环境所需的配置组件,例如在缺少Microsoft相关组件时,当进行MySQL5.7的安装时,系统会显示由于缺少MySQL的部分模块无法安装。
1.3 Qt Creator
QtCreator是跨平台的QT IDE,为我们提供图形化的UI绘制工具。本次系统设计利用Qt来编写图形交互界面,在已搭建的Python环境中安装对应版本的PyQt5库后,再选择对应版本的QtCreator就可以进行编码。
2 人流量统计系统设计
本系统包括三个核心功能:图片统计,视频统计,数据查询。图片统计要求用户按照格式上传一张图片,调用百度API返回数据;视频统计可使用本地视频也可以调用摄像头实时录制达到动态统计目标;数据查询将根据时间统计总人数或者进出人数存储到数据库中。功能框如图1所示。
图1 系统功能框图
3 功能实现
3.1 图片统计
首先用户选择一张图片,该图片允许不包含人。静态统计通过发送post请求,其中请求URL为https://aip.baidubce.com/rest/2.0/image-classify/v1/body_num。请求参数包括三个:(1)参数“area”,可标记单个或多个区域,最多支持10个区域。如果设置“area”参数,坐标必须小于原图大小,否则设置错误。本项目设置单区域,因为摄像头面向教学楼入口,所以将设置矩形区域进行统计;(2)参数“image” 因为要网络传输图片到百度AI平台,所以对图片进行Base64编码,网络传输中只能传输可打印字符,其大小不能超过4M。Base64是一种基于64个可打印ASCII字符对任意字节数据进行编码的算法;(3)参数“show”,是否返回渲染图,默认为“false”,本系统设置为“true”。请求成功后将返回渲染图以及统计到的人数。静态统计实测如图2所示。
图2 静态统计实测图
3.2 视频统计
视频统计共包括两个功能,可选择本地视频进行统计,或打开摄像头进行实时统计,两种方式在统计处理上方法相同。传入视频抓拍图片序列,进行人体追踪,返回每个人体框的坐标和所属ID;并根据目标轨迹判断进出区域行为,进行动态人数统计,返回区域人数,同时可输出渲染结果图,包含统计值和跟踪框渲染。
视频由一帧一帧图像组成,如果每帧图像都发送到百度AI平台进行统计处理,必将影响效率且浪费资源,所以抽帧频率设置是否合理十分重要,本系统设置为5 fps,可以做到有效跟踪,同时满足百度AI平台fps要大于2的要求。
动态统计中设置区域参数“area”影响着进出人数的准确性,将预先设定区域坐标传至百度API,因摄像头对准教学楼大门,那么门可以作为界限。因不同摄像头角度不同,需根据实际场景调整区域位置。
本系统采用OpenCV读取视频,OpenCV提供一个简单易用的计算机视觉基础库,帮助人们快速构建复杂的视觉应用程序。实例化对象后获得对象属性按照百度AI平台要求的数据格式,发送请求等待百度平台通过AI算法完成对每帧静态图像的识别与处理,将结果返回,多帧连续处理后,达到人流量的动态监测的目标。参数设置如下:
#设置区域参数,返回渲染图
params = {“area”: “1,1,700,1,700,200,1100,700, 1,700”, “case_id”: 16, “case_init”: “false”, “dynamic”:“true”,”image”: img,”show”: “true”}
不论是静态统计还是动态统计,只要当人流量大于等于阈值,都会引起预警系统响应,触发弹窗提示,以便学校相关部门进行干预,避免发生严重后果。动态统计实测如图3所示。
图3 动态统计实测图
3.3 数据统计
人流量数据具有一定研究价值,首先学生活动具有一定规律,大数据可帮助教务部门更清晰的规划课程,提升上课体验,避免学生过多,教室间互相干扰;其次利用数据可分析风险,避免踩踏事件;最后利用统计的数据合理分配和优化配置资源,如通过监测人流量数据,如某教学楼正门经常同一时间涌入大量学生,可规划新增一扇门。由此可见,数据统计的存储十分有意义,所以要将统计到的数据存储到数据库中。
本系统使用MySQL数据库,使用数据库前需要安装PyMySQL,PyMySQL是Python3.x版本中用于连接MySQL服务器的一个库。
连接数据库并设置配置信息如下:
3.4 界面设计
本次设计主UI界面采用QtCreator进行开发,因在widget.ui中定义了窗口上所有组件的属性设置、布局,及其信号与槽函数的关联等。而UI设计器可视化设计的界面都由 Qt 自动解析,并以XML文件的形式保存下来。在界面设计时,对需要访问的组件修改其 objectName,如各个按钮、需要读取输入的编辑框、需要显示结果的标签等,以便在程序里区分。对于不需要程序访问的组件则无须修改其objectName,如用于界面上组件分组的 GroupBox、Frame、布局等,让 UI 设计器自动命名即可。
4 结 论
该系统基于百度API人流量统计接口,实现了图片统计和视频统计功能,该系统同样适用于其他场所人流量统计,仅需调整动态统计中区域参数即可。利用实际教学楼场景进行了测试,本场景准确率高达95%以上。所有统计数据存储与数据库中,联合人流量上限告警功能,管理人员通过人流量数据可分析其风险因素,提高教学楼服务能力并排除安全隐患。该系统功能还不完善,光线及网络延迟等外界因素,会导致准确率下降,除此之外性能也有待提高,后续将进一步优化。