人群的监控与监测已经成为当前的一个重要领域。政府和安全部门都已经开始寻求在公共场所智能监测人群的更先进的方式,从而避免在来不及采取行动之前检测到任何异常活动。但是在有效达成这一目的之前还需要克服一些障碍。例如,如果需要一天 24 小时同时监测整个城市里所有可能的人群活动,仅靠全人工监测是不可能的,尤其在安装有数千部 CCTV 摄像头的情况下更是如此。
这个问题的解决方案在于开发全新的智能摄像头或视觉系统,借助先进的视频分析技术自动监测人群的活动,从而能够立即向中央控制站报告任何异常事件。
设计这种智能摄像头/视觉系统不仅需要标准的成像传感器和光学设备,还需要高性能视频处理器来执行视频分析工作。使用这种功能强大的板载视频处理器的原因在于先进视频分析技术具有较高的处理要求,大多数此类技术通常会使用计算密集型视频处理算法。
FPGA 非常适合于此类高性能要求的应用。借助赛灵思Vivado Design Suite 中高层次综合 (HLS) 功能实现的 UltraFast 设计方法,现在可以为 FPGA 轻松创建理想的高性能设计。此外,赛灵思 MicroBlaze等嵌入式处理器与 FPGA可重配置逻辑的完美融合,让用户现在能够将具有复杂控制流的应用方便地移植到 FPGA 上。
鉴于这种情况,我们使用 Vivado HLS、赛灵思嵌入式开发套件 (EDK) 和 ISE Design Suite 中基于软件的EDA工具,设计出一种用于人群运动分类和监测系统的原型。这种设计方法基于我们所认为的软件控制和硬件加速架构。我们的设计采用低成本的赛灵思 Spartan-6 LX45 FPGA。我们在较短时间内即完成了总体系统设计,其在设计的实时性能、低成本和高灵活性方面均展现出颇有前景的结果。
系统设计
总体系统设计分两个阶段完成。第一阶段是开发人群运动分类算法。在这个算法的验证完成后,接下来是把它实现到 FPGA 中。在开发的第二阶段,我们主要关注基于 FPGA 的实时视频处理应用的架构设计方面。具体工作包括开发实时视频流水线、开发硬件加速器,最后将二者集成并实现到算法控制和数据流中,从而完成系统设计。
下面介绍每个开发阶段,首先从简要介绍算法设计开始,然后详细介绍如何将算法实现到 FPGA 平台上。
算法设计
就人群监视和监控而言,文献中提出了多种算法。大多数此类算法从在人群场景中检测(或布置)特征点
开始,然后随时间推移跟踪这些特征点,采集运动统计数据。随后把这些运动统计数据投射到一些之前预先计算好的运动模型上,用来预测任何异常活动 。进一步改进包括聚集特征点,跟踪这些集群而非单独的特征点。
本文的人群运动分类算法基于相同的概念,除了我们优先使用模板匹配方法进行运动估计,而不是采用 Kanade-Lucas- Tomasi (KLT) 特征跟踪器等传统方法。该模板匹配方法经验证表明,增加一些计算量能显著改善低对比度或对比度不断变化情况下的运动估计。
为将这一方法用于运动估计,我们将视频帧划分为更小矩形贴片组成的网格,然后使用基于加权绝对差之和 (SWAD) 的方法对每个贴片的当前图像和之前图像进行运动计算。每个贴片相应地提供一个运动向量,用于说明该特定位置两帧之间的运动范围和方向。结果就是需要在整个图像上计算超过 900 个运动向量。计算这些运动向量涉及的具体步骤如图1所示。
图1:计算运动向量的步骤,从图像采集开始(上)
此外,我们使用加权高斯内核实现图像中遮挡区和零对比度区的可靠性。而且,用于计算一个运动向量的一个贴片处理工作独立于其它贴片的处理工作,因此该方法非常适合使用 FPGA 上的并行实现方案。
在计算完整个图像上的运动向量后,该算法随即计算它们的统计属性。这些属性包括平均运动向量长度、运动向量数量、运动的主导方向和类似指标。
另外我们还计算了运动向量方向的 360 度柱状图,进一步分析其标准偏差、平均偏差和偏差系数等属性。这些统计属性随后被投射到预先计算好的运动模型上,从而将当前运动分类到几大类别之一。随后我们运用多个帧来解释这些统计属性,从而确认分类结果。
预先计算好的运动模型采用加权决策树分类器的形式构建,其充分考虑了这些统计属性来对所观察到的运动进行分类。例如,如果观察到运动速度快而且场景中有动量突变,同时运动方向随机或超出图像平面,就可以分类为可能的恐慌情况。该算法的开发工作使用微软 Visual C++ 配合 OpenCV 库完成。算法的完整演示请参阅本文文末提供的 Web 链接。