何禹潼,卢迪
(哈尔滨理工大学测控技术与通信工程学院,黑龙江哈尔滨 150080)
某些病毒传染性强,在人员密集场所很容易形成传播链,因此预防是重中之重,防止室内场所的人员聚集是必要手段和有效措施[1]。高校是一个特殊的场所,人员的密集程度较大且流动频繁。在图书馆、实验室、教室等室内场所,实时监测人流量,控制人员聚集,既是对师生安全负责,更是担当对国家和社会防疫的责任。近年来,室内外的人流量监测方法大致可以分为两种:①基于计算机视觉的处理算法,如文献[2]提出了基于HOG 和SVM 的行人检测算法,对行人的边缘信息进行描述和提取并筛选;文献[3-8]介绍了基于YOLO 算法的相关研究;文献[9-11]介绍了基于Faster-RCNN 算法的人数统计方法。②基于传感器的其他监测方法,如毫米波雷达[12]、无线射频信号[13]、红外传感器[14-15]等,均取得了比较不错的效果。在不同场景下,开发不同的算法需要采用大量的数据集进行迭代训练,并且要求硬件设备具有并行运算能力,这十分耗费人力与资源。同时,如果单独采用某类传感器数据,则其人流量监测的使用范围会受到很大影响。
该文基于百度AI 的静态人流量统计系统使用百度AI 的API 接口,结合嵌入式ARM 主板、摄像头、人体红外传感器等模块,通过网页实时显示的室内人数,实现人流量监测统计功能。
设计系统主要由ARM 控制器、人流量统计SDK、数据处理以及网页端四部分组成,如图1 所示。ARM 控制器主要应用摄像头和红外传感器两个外设来采集室内的图像信息与监测是否有人员经过;人流量统计主要负责调用百度AI 平台python SDK 中的相关函数及API 接口,实现对输入图像的人数分析;数据处理主要负责从API 接口调用请求数据参数,并返回具体人数给ARM 控制器;网页端主要负责交互功能,显示实时人数及其变化情况等。
图1 系统整体设计
采用ARM Cortex-A72 架构的微型Linux 主板,外接摄像头和人体红外传感器两个模块。使用800万像素索尼IMX219 传感器扩展版与主板相接,如图2 所示。由于是静态人流量监测,因此摄像头定时采集室内静态图像,该系统定时器设定为5 s。
图2 摄像头模块电路图
人体红外传感器采用热释电红外传感器HCSR501[16],通过import RPi.GPIO as GPIO 引入控制库。利用该传感器可实现节能策略:当设备在无人员室内时,处于低功耗模式;当设备在人流量不大的室内环境时,处于普通模式;在人流量较大环境时,处于性能模式。
人流量统计采用百度AI 提供的静态人流量统计算法,其主要功能是识别和统计图像中的人体数目,并返回渲染图片。文中基于百度AI 平台提供的人体分析(人流量统计)API 服务实现,采用平台提供的人流量统计Python SDK 工具包完成开发。
首先注册百度云平台账号,在管理控制台创建相关应用,获得唯一的APP_ID、API_KEY、SECRET_KEY等关键参数。同时,为了保证账号应用的安全性以及用户对访问权限的控制,平台采用access_token 方式实现鉴权认证机制。在调用开放API 时,用户要根据之前已经获得的API_Key 和Secret_Key,向授权服务地址发送请求(推荐使用POST),并在URL 中带上grand_type、client_id、client_secret 参数,才能获取access_token。最后,服务器以JSON 文本参数返回access_token 值。
静态人流量统计根据静态图像进行分析,用户需设定摄像头定时拍照,上传百度AI 平台,平台根据算法完成对静态图像的识别与处理,并将结果返回用户。上传时,平台请求参数包括image(编码后的图像数据)、area(非必需,识别区域)、show(非必需,渲染图片显示)。
image 要求图像为base64 编码,编码后才可通过URL 进行http 请求,同时要对参数进行UTF-8 编码后,才能进行utf 编码。在利用python 进行base64 编码时,只需在引入库函数的基础上,令img=base64.b64encode(f.read()),可以直接将图像从字节形式转换为base64 字符串形式。
area 可以特定框选区域坐标,支持多个多边形区域识别。若为单个区域,将每个顶点的x、y坐标按顺序列出,并将首尾坐标相连做闭合。area 以数组的方式存储,完成area 的参数设定后,平台将只在该区域内进行人数识别。若area 值缺省,则进行全图统计。
show 可以选择渲染图片是否返回并保存,默认不返回;令其为true 时,返回渲染后的图片。
三个参数设定完成后,以字典数据结构存储。
将百度AI 平台处理后的结果数据作为全局存储变量,根据多个参数处理函数可访问该数据,接口函数将会返回不同类别的属性数据,返回的结果形式为JSON 格式的字符串。返回数据参数包括log_id(帧编号)、person_num(人体数目)、image(渲染图片)等。例如:
该字符串表示当前画面中有16 个人,帧编号为716033439,渲染后的图片字符形式为/9j/4AAoFS2P/9k=,此时画面中的人数为当前帧的瞬时结果。当平台返回JSON 数据后,可通过判断帧编号是否与上次相同来验证设计系统定时采集的室内图像是否为静态图像。
网页界面采用阿里云Web 可视化开发,其优点是免代码开发、模版丰富、完全托管、搭建完毕后可直接绑定域名发布。该界面主要包括三个部分:实时人数显示、教室信息显示、实时人数变化曲线。开发之前,要将ARM 控制器与阿里云根据MQTT 协议连接,在阿里云物联网平台创建相关产品及设备后,每个设备会得到其唯一的设备证书(ProductKey、DeviceName、DeviceSecret),要将这些参数在ARM 控制器中进行声明。建立连接时,物联网平台完成认证并与设备绑定,可实现如下功能:
1)实时人数显示:通过文字及图标组建实现参数名称及输出结果的显示,数据源配置选择相关产品设备的人数属性。
2)教室信息显示:包含教室门牌号、教室类型、教室最大容量。
3)实时人数变化曲线:数据源配置时,模式选择为单设备多属性,数据项设定为设备历史数据,实时数据时间段选择近半小时。
网页测试界面如图3 所示,人数为实时返回的监测数据结果,变化曲线由实时人数变化情况绘制。系统测试主要是人流量统计接口的调用是否成功并返回正确结果。基于此,文中从摄像头实时拍摄画面和直接上传图像两方面对人流量统计结果进行测试,检测系统的运行情况。
图3 网页界面
实验一:摄像头实时拍摄室内画面,设置该摄像头亮度为50 cd/m2,饱和度80%,快门时间间隔6×106μs,感光度为800,将摄像头放置在2 m 高度俯拍。进行多次测试,其中一组测试结果如图4、5 所示。
图4 实验一原图像
图5 实验一渲染图像
实验二:上传任意一张教室内图像,进行多次测试,其中一组测试结果如图6、7 所示。
图6 实验二原图像
图7 实验二渲染图像
实验一和实验二的测试结果与实际人数具体数据如表1 所示。实验表明,百度AI 平台人体检测中静态人流量监测算法的是以头部为识别目标统计图片中的瞬时人数。当拍摄方式为俯拍且距离合适时,该算法的准确率较高且具有较好的适应性。
表1 实验效果
设计的室内监控系统基于百度AI 提供的API 接口,采用python 语言,并结合基于ARM 的微型Linux主板、摄像头、人体红外传感器等模块,是实现静态人流量监测的一种高效方法。同时介绍了ARM 控制器相关功能的实现、与百度AI 平台的连接、平台鉴权机制的认证、与物联网平台的数据对接。实验结果表明,该系统可以快速实现静态人流量监测,又有较高的准确率。当拍摄方式为俯拍且距离合适时,静态人流量监测准确率可达97.7%。该系统有较好的应用性,可以实现对室内密闭空间人数的监测与控制作用。