邸昱卿,张云伟
(昆明理工大学 信息工程与自动化学院,云南 昆明 650000)
众所周知,吸烟对人的健康有害。根据专家学者的相关研究,抽烟产生的烟雾中含有将近70 种致癌物[1]。烟草中的尼古丁极易导致人上瘾,而尼古丁使心血管系统疾病的危险性大大增加,中风、心脏病等疾病的发作几率也会增加[2]。普通人群吸二手烟的危害同样不可小视,专家指出,普通人和抽烟者在一起吸二手烟超过15 min,其受到的对健康的伤害即等于吸一手烟的伤害[3],孕妇吸二手烟还会增加胎儿畸形、早产等风险。吸烟不仅对人的健康有害,也是造成火灾、爆炸等事故发生的安全隐患之一,对于森林、仓库、厂房等环境,吸烟引发的火灾会造成不可挽回的生命和财产损失。
鉴于吸烟的危害,世界各地都在采取禁烟措施。我国有关卫生部门发布了《公共场所控制吸烟条例》,明确规定,在所有公共场所严禁吸烟[4]。基于计算机视觉的吸烟行为识别算法可以充分利用现有的监控设备资源实现吸烟行为识别,对禁烟控烟政策的推行具有重要意义。
目前,吸烟行为识别的方法可以分为两大类,一类是非视觉的方式,另一类是利用计算机视觉进行检测的方式。其中,非视觉方式包括烟雾探测器、基于WiFi 信号的吸烟识别和基于穿戴设备的吸烟行为识别;视觉方式包括基于吸烟烟雾的识别和基于烟支目标检测的识别。
烟雾探测器通过检测吸烟所产生的烟雾来达到吸烟识别的目的。但使用烟雾探测器检测吸烟有以下缺点:对于空旷场景,烟雾易飘散稀释,难以被烟雾探测器检测到,并且空气中有许多其他粒子,容易引起烟雾探测器的误判。基于穿戴设备上的传感器的吸烟识别的原理一般为通过个人佩戴的手环等设备采集人手部的活动数据,对人手部的活动数据如加速度、移动方向、距离等进行分析,判断人物是否存在抽烟行为,但这种方法难以适用于一般场景下的大众吸烟行为识别,因为该方法需要人佩戴设备才能检测,所以该方法只适用于实验室环境进行吸烟行为识别。基于WiFi 信号的吸烟行为识别由于WiFi 信号的不稳定性和检测的不精确性,同样难以对抽烟行为进行有效识别。
随着计算机视觉的发展,传统的烟雾传感器检测逐渐被基于视频监控系统的图像检测方法代替,解决烟雾探测器在空旷环境下检测烟雾困难的问题。
基于吸烟烟雾特征识别吸烟行为的方法将香烟烟雾视为前景目标,利用前景分割算法将前景与背景分离,再依据烟雾的形状、颜色、纹理等特征进行识别。胡春海等使用多特征融合方法,将烟雾的动态特征和颜色特征组成特征向量,摆脱了单一特征不稳定的局限[5]。汪祖云等为了识别出租车司机的吸烟行为,先基于颜色特征提取烟雾,再采用烟雾质心相对角度正弦变化和烟雾变化速率作为特征进行识别[6]。刘远丁提取吸烟烟雾的纹理特征和HOG 特征进行分析,基于特征融合方法识别吸烟时产生的烟雾[7]。对香烟烟雾进行检测的方法存在香烟烟雾易扩散、浓度低、边缘不明显等问题,而且室内的背景大多是白色,与吸烟产生的烟雾颜色相近,不容易区分,而室外的背景一般比较复杂,存在较多干扰因素。
本文提出的吸烟识别方法主要由三个模块组成,分别是人体关键点检测模块、吸烟姿态特征提取模块以及吸烟行为判别模块。人体关键点检测模块负责检测图像中的人体关键点,吸烟姿态特征提取模块负责提取用于判别是否存在吸烟姿态的有效特征,吸烟行为识别模块根据提取到的特征对是否存在吸烟行为进行判断。
OpenPose 关节点检测算法可以实现人体姿态、手部动作以及面部特征点等的估计,对单目标和多目标人物均具有较高的实用性和稳定性[11]。
OpenPose 采用自下而上的方法进行关键点检测,该检测算法由置信度算法以及局部亲和算法构成,即两个并行的卷积神经网络。这两个网络分别负责估计人体关键节点位置和检测肢体的亲和度。OpenPose 识别人体关键点的核心为部分亲和场,它可以描述骨架中像素点的走向。图像经过卷积产生人体骨架热图,部分亲和场可以通过人体骨架热图进行识别,检测出人体各个关键点。然后根据检测到的人体关键点,使用部分亲和场对人体关键点之间的连接进行检测。最后,经过多次的迭代,可以得到最终检测的人体骨架。
OpenPose 首先通过VGG 模型提取图像的基础特征,提取输入图像的特征得到特征图集F。接着对L(p)与S(p)进行回归分析,L(p)表示部分亲和场,用来标注特征点在躯体中的方向;S(p)表示关节点响应,即特征点在躯体中的坐标。初始化时,使用贪婪算法对关节点的置信度与亲和度进行计算,然后进行多次迭代分析,将L、S及原始输入组合,计算损失并进行下一阶段训练。在之后的每个阶段都融合上一阶段的预测和原始图像特征图集F并且进行一次损失计算,预测下阶段的置信度与亲和度,式(1)展示了迭代流程。
式中:ρ,φ均为模型内部参数,可根据需要进行修改,用于调整亲和度迭代效果和置信度。进行多阶段拟合和修正后,生成多个关键点置信度与亲和度,最终骨架关键点提取结果选取其中亲和度最高的点。最后使用匈牙利算法将两个并行的卷积神经网络汇总,生成人体关键点和姿态,如图1 所示为人体骨骼关键点标注。
图1 OpenPose 人体关键点检测
吸烟作为一个典型人体行为,其姿态具有代表性,身体各部位会呈现相对有规律的姿势。因此,准确定义吸烟姿态,对于吸烟行为识别具有重要作用。本文定义吸烟者正在抽吸时的姿态为吸烟姿态,即抽烟者手中拿着烟并把烟送到嘴部的姿态。
检测吸烟数据集图片的人体骨架,分析这些坐标发现,当抽烟者由香烟拿在手中的未抽吸状态转换到抽吸姿态时,抽烟者的手腕与鼻子之间的距离会明显减小,同时大臂与小臂的夹角也会明显减小。考虑抽烟者的手腕关节点与鼻子关节点像素点距离和手臂弯曲角度小于一定阈值时,有可能是吸烟姿态。但是由于视频中人物尺度不确定,所以手腕关节点与鼻子关节点像素点之间的距离阈值难以确定。因此本文根据人体的比例,采用比值的方法,使阈值难以确定的问题得以解决。
现阶段,事业单位的财务管理已经从以往的记账核算不断拓展延伸,更加强调对事业单位各项活动尤其是经济活动的全过程和全方位监督管理,这就要求应该按照事业单位财务管理职能转变的实际需要,进一步调整优化财务管理工作流程,促进提升事业单位财务管理工作的效能水平。
如图1 所示,假设由OpenPose 算法检测到的人左右胯部关键点坐标分别为(x1,y1)和(x2,y2),左手腕和右手腕关键点的坐标分别为(x3,y3)和(x4,y4),鼻子关键点的坐标为(x5,y5),记左侧肘部关键点坐标为(x6,y6),左侧肩部关键点坐标为(x7,y7),右侧肘部关键点坐标为(x8,y8),右侧肩部关键点坐标为(x9,y9),脖子关键点的坐标为(x10,y10)。如图2 所示,定义左胯到脖子关键点的距离l1和右胯到脖子关键点的距离l2,其计算如式(2)和式(3)所示,定义左手腕到鼻子关键点的距离l3和右手腕到鼻子关键点的距离l4,其计算如式(4)和式(5)。l1与l2的平均值l5计算如式(6)所示,如果由于关键点检测不准等原因导致左胯或右胯关键点没有检测到,则只取检测到的单边胯部关键点来计算l5,即l5=l1或l5=l2。定义r1和r2分别表示判断人左边和右边是否存在吸烟姿态的比例指标,其计算如式(7)和式(8)所示。如果由于关键点检测不准确等原因导致分母l5的值为0,则令l5为1。
图2 吸烟姿态特征定义
如图2 所示,记从左侧肘部到左侧肩部的方向向量为d1=(x7-x6,y7-y6),从左侧肘部到左侧手腕部的方向向量为d2=(x3-x6,y3-y6),从右侧肘部到右侧肩部的方向向量为d3=(x9-x8,y9-y8),从右侧肘部到右侧手腕部的方向向量为d4=(x4-x8,y4-y8)。因此可以通过如下式(9)、式(10)计算出左侧大臂与小臂的夹角α1与右侧大臂与小臂的夹角α2:
当一名抽烟者由香烟拿在手中的未抽吸状态转换到抽吸姿态时,分析r和α特征变化情况。当抽烟者的状态发生变化时,这两种特征均会发生明显的变化。由未抽吸转化为抽吸状态时,由于手距离嘴部更近,所以r会明显减小,同时大臂与小臂的夹角也会明显减小,α会明显减小。因此,在抽烟过程中,通过抽烟者这两种特征的变化情况,可以较准确地判断吸烟者是否处于正在抽吸姿态。
根据大量观察并结合对人体关键点的检测结果可得,未抽烟姿态在正常状态时大臂与小臂的夹角一般大于一定角度或r大于一定值,吸烟姿态小臂与大臂的夹角小于一定角度且r小于一定值,因此本文定义吸烟姿态的判别准则如下:
(1)当姿态检测器计算出人的小臂与大臂的夹角小于α0度且r小于r0,认为处于吸烟姿态;
(2)当姿态检测器计算出人的小臂与大臂的夹角大于α0度或r大于r0,认为处于未吸烟姿态。
由于目前缺乏吸烟公共数据集,因此本文自建吸烟数据集,录制了人物抽烟视频共32 段,视频帧率为30 f·s-1,视频总时长为38′24″。对视频进行筛选并随机选取其中的吸烟图像共100 张,作为本文的验证数据集,对吸烟识别准确率进行验证。100张图像中,每张图像都包含一个人物,人物双手都打上了标签。其中一只手和嘴重合为抽吸姿态,标记为正样本,另一只手不是抽烟姿态的样本或者手中拿烟但并没有抽吸的样本标记为负样本。最终标签共200 个,其中正样本85 个,负样本115 个。
使用查准率P和查全率R评估提取视频中吸烟姿态帧的准确率和召回率,如式(11)和式(12)所示:
式中:TP表示吸烟行为检测正确的样本数量,FP表示不是吸烟行为但被检测为吸烟行为的样本数量,FN表示存在吸烟行为但被检测为不是吸烟行为的样本数量。
在Windows10 系统上搭建实验环境,CPU 为Intel(R) Core(TM) i5-10400F,GPU 为NVIDIA GeForce RTX 2060,深度学习框架为Pytorch。使用MSCOCO 2017 公共数据集对OpenPose 人体姿态检测模型进行训练。
对单人吸烟视频进行分析,每隔10 帧选择一帧图片进行分析。如图3 所示的各帧图像对应图4和图5 曲线中的横坐标对应帧。以x轴表示视频当前帧数,y轴为r值,画出实时曲线图,如图4 所示,左手的r1和右手的r2用不同曲线表示。此视频为完整的吸烟过程视频,其中r1表示左手离嘴部的距离,r2表示右手离嘴部的距离。视频中,人物左手自然下垂,显示在图中即为r1值较大且一直没有太大变化,右手拿烟并不断抽吸。当抽吸时,r2值比较小,说明右手离嘴部较近,正在把烟支放到嘴部。当手拿着烟不吸烟时,右手也是自然下垂的,因此r1和r2接近,且都较大。从实验过程可以发现,吸烟者共有7 次抽烟动作,与实际情况一致,曲线尾部左右手的r1和r2基本一致,并且处于居中的大小,是因为此时吸烟行为已结束,左右手重叠,正在准备扔掉烟支。实验结果表明,本文的吸烟姿态判别算法可以较好地区分吸烟和非吸烟动作。
图3 吸烟视频帧示例
图4 r 值随帧数变化曲线
对以上相同视频进行处理,计算大臂与小臂的夹角α值随帧数的变化,得到如图5 所示的结果。图5 中,x轴表示视频的帧数,y轴表示角度。曲线α1表示左手大臂与小臂的夹角,曲线α2表示右手大臂与小臂的夹角。可以看到,由于抽烟者左手未拿烟,处于自然下垂状态,因此,从α1曲线可以得出左手大臂与小臂的夹角很大,稳定在160°左右。吸烟者是右手拿烟并进行抽吸,因此α2曲线所显示的右手的大臂与小臂的夹角有很起伏明显的变化,当抽烟者处于拿烟状态,并且手臂自然下垂并未抽吸时,大臂与小臂的夹角很大;当抽烟者往嘴里递烟时,大臂与小臂的夹角会明显减小;当处于正在抽吸状态时,大臂与小臂几乎重叠。因此,正在抽吸时,大臂与小臂的夹角接近0°。由此可见,利用角度判断吸烟姿态的方法同样具有很高的可靠性,可以明显区分正在抽吸的姿态与未抽吸的姿态。
图5 α 值随帧数变化曲线
通过验证数据集测试r0和α0的范围的最佳取值,得到表1 的测试结果。实验中所设定的r0的范围和α0的范围用标准编号1 ~9 表示。当r0或α0增加时,由于对于抽烟行为检测的标准放宽,使得查准率下降,查全率上升。其中标准9 的查全率最高,适合应用于非常严格把控吸烟的场所,但相应地其对应的查准率较低;标准1 的查准率最高,达93.0%,但其查全率为77.6%,容易漏掉很多吸烟行为。相比之下,用标准5 来判定吸烟行为的效果最为折中,查准率为83.0%,查全率为85.9%。现实应用中,可以根据实际需求来确定使用哪个标准来检测吸烟行为。
表1 参数对模型的影响
本文提出了一种基于人体关键点的吸烟行为识别方法。通过OpenPose 模型提取人物关键点坐标,设定大臂与小臂的夹角和手腕到鼻子的相对距离比值作为特征,并建立了人物吸烟姿态判别准则。实验表明,本文提出的方法可以有效分辨视频中的吸烟姿态与未吸烟姿态,所提出的吸烟行为识别方法准确率可达83.0%,召回率可达85.9%。