基于百度AI的人流量监测系统

2020-12-26 05:08
黄冈职业技术学院学报 2020年6期
关键词:视频流人流量摄像机

冉 涌

基于百度AI的人流量监测系统

冉 涌

(重庆三峡职业学院 智能制造学院,中国 重庆 404155)

人流量实时监测既有潜在的商业价值,更是保障公共安全的重要手段之一。视频识别技术实现区域人流量监测是目前最有效的手段,然而,开发其中的机器视觉算法耗时耗力。目前,一种更有效的解决方案是基于百度AI平台提供的视觉识别API接口,结合实际需求做二次开发。采用C#语言开发客户端监控识别程序,完成摄像机连接以及百度AI平台接入和数据交换等工作。其中,关键是通过多线程的方式,保证视频流畅和网络数据稳定交互,处理好各类系统事件间的关系。实验结果表明,该方法能在多视角和不同摄像环境下,识别出人体,包括正面部分遮挡、背面、侧面、头顶4种姿态;动态人流量统计准确率达97.5%。

人流量;百度AI;鉴权;实时监测

1 引言

人流量监测是指在一个指定区域内实时统计人员的流动情况。在景区、车站、商场等人员密集的场所,实时监测人流状况,既有潜在的商业价值,更是保障公共安全的重要手段之一。传统的光电传感器检测方式,只适合设置在狭窄的通道处,使其使用范围受到很大限制。近年来,众多学者采用视频识别技术,监测大范围内的人员流动情况,取得了一定成效[1-3]。有的采用基于运动检测的算法、有的采用基于机器学习的算法,在具体场景中,单独开发、实现这些算法需要耗费大量人力和资源,并且不便于功能扩展和推广应用[4-7]。然而,百度AI(人工智能)平台提供的API接口很好的解决了这一问题。本文采用C#语言开发客户端程序,调用本地USB摄像机或者网络摄像机,连接百度AI平台,优化程序结构设计,实现人流量动态监测统计功能。

2 百度AI平台接入

百度AI平台提供了人流量统计的动态版,其主要功能是统计图像中的人体数量和流动趋势。其核心功能包括:(1)静态人数统计:(2)动态人数统计和跟踪:(3)传入监控视频抓拍图片序列,进行人体追踪,返回每个人体框的坐标和所属编号;(4)根据目标轨迹判断进出区域行为,进行动态人流量统计,返回指定区域进出人数[8]。其提供了API接口,方便开发人员根据实际需要做二次开发。目前,在线访问的API接口,对于普通用户,只要在百度AI平台注册后,即可免费使用。

2.1 鉴权认证机制

在百度AI平台,除了人流量监测系统以外,还包含多种人工智能的应用,都开放给用户使用。为了保证各个应用的安全和对各用户访问权限的控制,平台采用访问令牌(Access Token)的方式实现鉴权认证。因此,用户需要首先在平台注册账号,申请开通人流量监测的应用,并取得相应的API Key和Secret Key。然后,向授权服务器地址发送请求,并在URL中带上参数,获取Access Token。最后,服务器以JSON格式返回Access Token值以及有效期。

2.2 动态人数统计与跟踪

实现动态人数统计与跟踪,要先将本地视频流做抽帧处理,要求帧率大于2帧/秒,然后,上传到百度AI平台。经后台引擎做图像处理与识别后,返回每个人体框的坐标及编号信息,并且可根据连续多帧图像信息,形成运动轨迹,从而进一步判定指定区域内人员流动情况。作为普通用户,只需要从视频流中抽取多帧图像,百度平台通过AI算法完成对每帧静态图像的识别与处理,将结果返回给用户,多帧连续处理后,达到人流量的动态监测的目标。

在连接百度平台时,请求参数中包含抽帧后的图像(image)、监测区域(area)等信息。其中,图像要求进行base64编码后再通过URL编码加入到http请求中。在C#中实现base64编码,只需通过FileStream对象读取图像,然后以字节数组形式逐个转换为base64字符串。处理函数如下:

public static String getFileBase64 (String file Name)

{

FileStream filestream=new FileStream(fileName, FileMode.Open);

byte[] arr = new byte[filestream.Length];

filestream.Read(arr, 0, (int)filestream.Length);

string baser64 = Convert.ToBase64String(arr);

filestream.Close();

return baser64;

}

在视频画面中,有一个监测区域(area)的概念。area是需要上传的参数之一,要求按顺序依次给出每个顶点的x、y坐标,形成闭合多边形区域。这个多边形区域就是监测区域,统计进出人流数量,是以人像是否穿越该区域为判断标准。

了解这些上传参数的构成后,接下来,只需要按照百度AI平台要求的数据格式,发送请求。采用C#发送数据请求的流程如下;

(1)用HttpWebRequest类实例化一个对象request;

(2)设置request对象的Method和KeepAlive等属性;

(3)将图像、监测区域等参数写入buffer数组;

(4)调用GetRequestStream()方法获取用于写入请求数据的 Stream 实例;

(5)将buffer数组写入request对象中;

(6)调用GetResponse()方法获取响应对象response;

(7)通过StreamReader读取响应结果。

3 摄像机连接

实现人流量的动态监测,需要获取实时的视频流数据,通常的手段是连接本地摄像机或者网络摄像机获取数据,同时,要将视频显示到用户窗体界面中。

本地摄像头视频流的获取,可使用AForge库中的FilterInfoCollection类实例化对象,输入参数是FilterCategory类的静态属性VideoInputDevice,其可捕获与本机相连的所有视频输入设备。获取视频流后再和VideoSourcePlayer绑定实现视频流实时显示。其中,AForge库是一个基于C#设计的程序框架,它包含机器视觉与图像处理以及人工智能等类库模块,直接调用这些库,可大大提供程序开发效率。

网络摄像机视频流的获取,通过AForge库中的MJPEGStream类实例化对象后,绑定到VideoSourcePlayer对象上。其关键是作为参数传入的URL地址要根据摄像机的要求,添加用户名和密码信息。URL地址形式为:“http://192.168. 1.35:81/videostream.cgi?user=admin&pwd=888888&.mjpg”。

该地址由IP地址、端口号、用户名和密码四部分拼接而成。

在客户端窗体中监视视频的显示采用AForge库的VideoSourcePlayer控件,使用该控件时,操作步骤如下:

(1)实例化对象,并指定VideoSource 属性,表明视频流的来源,其类型为IVideoSource;

(2)注册NewFame事件,每当有新的一帧数据到来时,触发该事件,便于抽帧后做图形处理;

(3)处理完成后,从时间委托中取消NewFrame,停止视频采集。

4 程序结构设计

无论是使用本地摄像机还是网络摄像机,客户端主要完成视频数据采集、显示、与百度平台交互数据,响应用户操作请求几项工作。那么,主程序的工作流程如下:(1)连接摄像机,判断视频数据流返回是否成功;(2)如果连接不成功,则提示用户检查设备或网络;(3)如果连接设备成功,则绑定视频流数据到VidSoucePlayer对象,用于在界面上显示视频以及后续的数据处理结果;(4)连接百度AI平台,完成鉴权操作;(5)如果鉴权不成功,则抛出异常,其中可能是网络故障或者API Key、Secret Key错误,在用户界面给出相应提示;(6)鉴权成功,则启动用于控制抽帧频率的定时器。其中,定时时间间隔的设置应比理论计算值略小,系统要求帧率至少2帧/秒,理论时长为500ms,考虑实际的程序响应耗时,可将该值设置为400ms;(7)后续工作在系统事件响应程序中完成。主程序流程图如图1所示。

系统事件响应程序主要包含由视频显示(VideoSoucePlayer)对象产生的3个事件。一是绘图(Paint)事件。在该事件中,根据识别到的人体坐标位置,绘制跟踪框到视频窗口中,同时,将统计的人流量结果数据绘制到视频中;二是新帧(NewFrame)事件。视频中每来一个新的帧数据,则触发该事件,在其中要判断定时时间是否到,如果定时时间到,则抽取当前帧的数据,将其上传到百度AI平台处理,并获取返回的结果;三是视频窗口中的鼠标单击(MouseClick)事件。该事件提供给用户在视频中通过鼠标绘制一个多边形,

图1 主程序流程图

实现自定义监测区域。这三个事件的结构如图2所示。在系统设计上,考虑到程序包含有用于与客户交互的应用界面、视频流数据获取、网络数据交换等几项操作。所以,要将不同任务交给不同线程处理,保证程序运行流畅。在响应NewFrame事件的处理函数中,采用定时器每隔400ms抽取一帧图像来处理,并用线程池ThreadPool创建新的线程完成网络数据交换工作。

图2 VideoSoucePlayer对象事件

另外,由百度AI平台处理后的结果数据,作为全局变量存储,多个事件处理函数可访问该数据,返回的结果形式为JSON格式的字符串。例如:

{" person_num": 1,

" person_Info ": [{"ID": 58,

"location": {

"width": 160,

"top": 255,

"height": 137,

"left": 300}

}],

"person_count": {"in": 0, "out": 0},

"log_id": 2944060039282210706

}

表示当前帧监控画面中有1个人,人体框左上角顶点坐标位置在(300,255),宽度160 ,高度137,当前帧进入区域的瞬时人数为0,当前帧离开区域的瞬时人数也为0,人体的ID编号为58,帧编号为2944060039282210706。特别注意,返回的进出区域人数是当前帧的瞬时结果,然而,实际工程中往往需要累计一段时间内,总的进出区域人数。实现该功能,只需要在获取平台的JSON数据后,判断当前帧编号与上次是否发生变化,如果帧编号发生改变,则将该帧对应的进出人数分别累加到统计的总数中。

百度AI平台返回结果,虽然可以包含跟踪框渲染后的图片信息,但直接获取该结果,会大大增加网络数据量,影响系统的整体性能。因此,通常只要求返回人体框的坐标和ID信息,然后,在客户端自己绘制跟踪框。该功能是在VideoSourcePlayer的Paint事件处理函数中完成。从全局变量result中取得坐标信息,采用绘制多边形函数DrawPolygon实时绘制跟踪框,同时,将进出区域人数信息绘制到视频显示窗体左上角。

5 测试与分析

客户端测试界面如图3所示。左边区域是当前摄像机的监控画面,右边文本框是实时返回的检测结果数据。根据用户需要,提供了连接本地摄像机或者网络摄像机的选择。为了方便调试,让用户能实时观察人体进出区域时的运动轨迹,给人体框添加了聚类点,当聚类点跨过设定的检测边框时,统计的进出人体数量会有相应变化。

图3 客户端监测界面

实验1:测试人体检测效果。首先,连接本地USB摄像头,分辨率640*480,焦距4mm,置于水平角度,对戴口罩的人体正面,背面,侧面3种姿态,经多次测试,都能正确检测。然后,连接网络摄像机,分辨率640*480,焦距3.6mm,置于2.8米高度,俯视视角,多测测试,证明同样能准确检测出人体目标。其中的一组测试截图如图4所示。该实验说明百度AI平台人体检测算法的是通过头、肩等特征实现,具有较好的适应性。

图4 测试人体检测效果

实验2:采用实验1的网络摄像头做动态监测,将监控画面的下半部分指定为监测区域,测试结果如表1所示。漏检的主要原因是受网络速度影响,导致与百度平台交互数据的过程中,部分帧数据延迟,人体穿越监测区域时,没有形成完整的轨迹。针对这一个问题,有两种方法改善。一是,在客户端, 对每帧数据的人体框做聚类后,自主开发轨迹形成和判断进出区域的算法,只将人体识别算法交给百度AI平台完成;二是,不使用网络在线访问的方式,而采用百度正在测试的离线SDK开发包;

表1 动态监测结果

6 结语

基于百度AI平台提供的API接口,采用C#语言开发人流量监测的客户端程序,是一种实现人流量监测统计的高效方案。介绍了采用AForge库连接摄像机的方法,以及通过Access Token认证后, 与百度平台交换数据的方法。为了保证视频流畅播放和数据交互同步完成,处理好各种系统事件的响应,采用多线程方式优化了程序结构。实验结果表明这种开发方式既能快速实现人流量监测功能,又有较高的准确性。人流量统计准确率达97.5%,并且还可通过2种手段进一步优化提高。另外,采用API方式实现人流量监测,也为算法研究者提供了基础,使其能快速掌握项目的业务逻辑,也为算法优化提供了一个对比的基准。

[1]杨帆.基于人流量检测的改进CN算法[J]. 计算机工程与设计,2020,41(02):411-416.

[2]殷涛,崔佳冬. 视频监控行人流量统计系统的设计[J].电子科技,2019,32(12):48-52.

[3]Chen L,Lu Y,Sheng Q, et al. Estimating Pedestrian Volume Using Street View Images: a Large-scale Validation Test[J]. Computers, Environment and Urban Systems,2020, 81.

[4]王存娥,杨延宁,任新成,等. 室内人流量 监测系统设计[J].自动化仪表, 2018,39(09):49-51.

[5]李佐龙,王帮海,卢增.多尺度特征融合重建的行人检测方法[J].计算机工程与应用,2020(5):14.

[6]李欢,陈先桥,施辉,等. 基于SSD的行人头部检测方法[J].计算机工程与设计, 2020,41(03): 827-832.

[7]曹帅,张晓伟,马健伟.基于跨尺度特征聚合网络的多尺度行人检测[J].北京航空航天大学学报,2020(5):69.

[8]百度AI开放平台.人流量统计动态版[EB/OL].2019-11-25https://ai.baidu.com/ai-doc/ BODY/wk3cpyyog.

TP391.41

A

1672-1047(2020)06-0143-04

10.3969/j.issn.1672-1047.2020.06.38

2020-10-23

冉涌,男,硕士,讲师。研究方向:无线传感器网络、智能信号处理。

[责任编辑:罗幼平]

猜你喜欢
视频流人流量摄像机
边缘实时视频流分析系统配置动态调整算法研究
基于视频流传输中的拥塞控制研究
自动门人流量检测系统设计
提高高职院校图书馆现刊阅览室人流量的策略研究
三级客运汽车站服务能力影响因素分析
铁路货场智能大门集装箱全景图像采集方法研究
新安讯士Q6155-E PTZ摄像机
美国视频流市场首现饱和征兆
安讯士新AXIS M31网络摄像机
如何消除和缓解“摄像机恐惧症”