第29卷第2期 机电产品开发与 新 Vo1.29,No.2 2016年3月 Development&Innovation of Machinery&Electrical Products Mar..201 6 文章编号:1002—6673(2016)02—073-05 基于视频流人体方位和距离检测研究与实现 张勇 , (1.公安部第一研究所,北京102200;2.北京航空航天大学,北京100191) 摘 要:论文介绍了运动目标检测方法和人体皮肤检测方法,并以此为基础实现了人的状态检测,人的角度 检测,人的距离检测。通过大量实验数据测试证明,论文研究内容可以用于智能设备的自动控制,提 高智能设备自觉感知能力,用于智能监控、人机交互、智能家居等领域,有着广阔的应用前景。 关键词:运动目标检测;人体皮肤检测;人的状态检测;人的角度检测;人的距离检测 中图分类号:TP23 文献标识码:A doi:lO.3969/j.issn.1002-6673.2016.02.028 Research and lmplementation of Human Orientation and Distance Detecting Based on Video Stream ZHANG Yons ̄|- 。 (1.First Research Institute ofthe Ministry ofPubhc Security,Beijing 102200,China; 2.School of Computer Science and Engineering,Beihang Umveniyt,Beijing 100191,China) Abstracts:This paper introduces the moving object detection methods and the human skin detection methods.The human state detection and hte human orientation detection and the human disatnce detection are implemented.This research can be used to automatically control the in- telligent devices by the test ofa large number ofexperiment ̄data.It Can improve the awareness ofintelligent equipment,and Can be used in intelligent monitoring,human—computer niteraction,smart home and other ifelsd.The application prospect is very extensive. Key words:moving object detection;human skin detection;human satte detection;human orientation detection;human distnace detection 方法也可以用于人体运动目标检测。当前,常用的运动目 O引言 标检测方法主要分为光流法、背景帧差法和帧间差分法, 基于视频的目标检测与定位技术是计算机视觉的主 不同的情况会采取不同的方法。 要研究方向之一.它是智能监控、人机交互、智能家居、工 1.1背景差分法 业机器人手眼系统等应用的基础和关键技术。随着社会 背景差分法闭是将当前图像与背景模型相减,与背景 智能化.人们对智能设备的需求越来越明显。判断人的状 偏离超过一定阈值的区域即为运动区域。这种算法实现 态、人的角度和人的距离是智能设备工作三个重要技术。 简单.能够较为完整的提取出运动目标的位置、大小、形 判断人的状态可以控制智能设备否启动工作;通过人的 状等信息。特别是摄像机静止的情况。背景差分法是首选 角度可以决定智能设备的工作方向,如智能投影仪的投 方法。但它对光照剧烈变化、背景中对象的扰动和固定对 影方向:通过人的距离可以控制智能设备工作的状态,如 象的移动、阴影影响等特别敏感。因此,背景差分法核心 智能空调人在近场采用低功率工作模式,人在远场采用 问题是如何获得一个较为准确的背景模型,并对其进行 高功率工作模式。本文将解决视频图像中人的状态检测, 不断的更新以保持与实际背景精确相似。 人的角度检测,人的距离检测三个关键问题。 1.2帧间差分法 帧间差分方法[31是图像序列帧中相邻的两帧进行采 1人体运动目标检测 用像素点的灰度值进行相减,通过阈值化提取出运动目 运动检测的目的是在图像序列中将前景运动区域从 标。一种改进的方法是利用三帧差来代替两帧差,这样可 背景中提取出来。人体运动检测是在视频图像序列中将 以更好地适应运动物体的速度变化。由于相邻帧时间间 运动人体区域从背景中提取出来[1】。常用的运动目标检测 隔较短,因此该算法对场景中的动态变化不太敏感,对动 态环境具有较强的自适应性,适合背景固定不变的情况。 修稿日期:2015—03—06 但一般不能完整地提取出运动目标区域,容易在人体内 作者简介i张勇,男,副研究员。研究方向:安全检查系统设计。 部产生空洞和重像现象,对噪声较敏感,要求运动目标速 73 ·测试与控制· 度不能太快。 的椭圆肤色模型成为视频图像中人脸检测首选。经典的 1.3光流法 光流法[31是由Gibson于1950年提出的。光流体现了 一椭圆肤色模型阎,如下式所示。 + sinO :1 (1) 种运动模式。指在空间中,物体在一个观察者例如摄像 。头视角下,产生的观察者和背景之间的明显移动。它是一 种瞬时场,即向量场。每一个向量表示了景物中一个点在 图像中位置的瞬时变化。光流法利用运动目标在图像序 J【Cc=] 其中,a=25.39,b=14.03,ecx:1.60,ecy=2.41,0=2.53, 列间也随着时间而变化的特征,通过计算帧间像素的位 移来提取人的运动。这种方法的优点是摄像机在移动时 也可以能够检测出运动人体目标,但由于外部光线的变 化,即使有时运动人体没有发生变化,也会检测到光流的 出现,即对光照敏感,并且计算量十分复杂,计算量比较 大,不能满足实时视频处理的要求。 通过对以上各种算法的分析,本文采用将背景差分 cx=109.38,cy=15.202。通过计算式(1)左边来判断像素点 是否为肤色点。如果小于l则表示相应的像素点为肤色. 否则为非肤色。在正常情况下,采用此种方法进行肤色分 割时能得到较好的效果。但是.虽然肤色信息在色度上的 聚类效果好。但采用只考虑色度而完全不考虑亮度信息 的方法来检测肤色是不完全正确的。其主要的问题在于 其对亮度太暗或太亮的区域容易出现误判。Rein—Lien 法和帧间差分法相结合的方法。在求取背景时,首先把第 一Hsu等人提出了在YCbC 空间加入亮度补偿的肤色模型[61。 肤色表面是依靠光照条件的,Rein—Lien Hsu介绍一种光 帧图像作为背景,然后在后续各帧图像中通过帧间差 分确定运动目标在两帧间的运动情况。具体方法为:对于 相对静止的区域,背景保持不变:否则用当前值改变背景 区域。理论上。当运动目标完全离开它原来位置时即可得 照补偿技术用“基准白色”使颜色表面正常化.只有当这 些像素足够大(>100)时,就可以把影响中最上面5%的亮 度值看成是基准白色。彩色图像的红、绿、蓝成分经调整 到自适应背景图像。初始背景计算时间短,后续实时背景 计算的时间复杂度低且能适应光照变化等的影响。在此 过程中会用中值滤波器、数学形态学等对图像进行预处 理、除噪等过程。 后以致这些基准白色像素的平均灰度值线性地增加到 255。如果大量的基准白色像素没被检测到或是平均颜色 与皮肤相似,那么这幅图像将不会改变。 3人体目标检测方法 运动目标检测是将前景运动区域从背景中提取出 来,判断有运动物体出现。对运动区域进行人体皮肤检测 判断运动区域是人还是其它动物或是移动的光线背影。 2人体皮肤检测 人体肤色检测属于基于内容的图像检索领域的一个 重要研究方向,其目标是准确地选取图像中的人体皮肤 像素,分割出图像中的肤色块,从而获得图像中肤色区域 这部分工作主要为下面的解决人的状态、人的角度、人的 距离问题做准备。 的大小、位置、形状等信息,为下一步的研究工作做好准备。 3.1人的状态检测 人的状态检测就是判断当前场景中有人还是无人。 2.1颜色空间选择 人体皮肤颜色在特定的颜色空间中的分布具有聚 集性,所以人体肤色具有可分性,从而为利用颜色信息进 行人体肤色检测奠定了理论基础。颜色空间是用数学的 在有人的情况下智能设备启动工作模式,在无人的情况 开启待机模式。人体状态检测流程见图1。 人体状态检测是 原始彩色图像 形式表示和储存颜色的方式。一直以来。为了人体肤色检 测,如何选择一个最佳的颜色空间成为后续工作的关键。 由于各颜色空间是可以相互转换的,不存在一个最优的 肤色检测空间。YCbE,色彩空间具有与人的视觉感知的同 一后面人体角度检测和 人体距离检测的基 得前景灰色图像l l更新背景图像 背景差分法获得前景矩形区域 获得人体矩形区域 滤波处理 础,这一步检测的正 确率直接影响到人体 角度检测和人体距离 性、亮度与色度相互独立及肤色聚类效果好的特点。本 文处理的图像来自视频,其本身使用YCbE 色彩空间,故 本文采用此色彩空间进行肤色检测,在达到良好效果的 同时减少了色彩空间转换的计算所带来的时间复杂度和 相应的误差嗍。 检测的正确率。所以 在人体状态检测过程 中进行了一些图像处 理工作.来提高检测 的正确率。 腐蚀处理 膨胀处理 2.2肤色建模 肤色模型是为了描述肤色在颜色空间的分布而建 立的模型。它是肤色检测的前提。基于YCbC 色彩空间下 标记联通区域 区域特征分析确认人体区域 (1)原始彩色图像 获取。通过CMOS镜 图1人的状态检测流程图 74 ·测试与控制· 头获取彩色图像。 (2)灰度图像获取。将彩色图像灰度处理,灰度化核 心算法公式gray=(Byte)((r*19595+g 38469+b 7472)>>16)。 (3)获得背景图像。在求取背景时,首先把第一帧图 像作为背景,然后在后续各帧图像中通过帧间差分确定 运动目标在两帧间的运动情况。对于相对静止的区域,背 景保持不变;否则用当前值改变背景区域。 (4)获取前景区域。公式为: Si(x,y): 置Currentlmage.Width/2为向右偏。 (4)确定目标区域偏离角度。偏离角度dAngleRate为 0.5 摄像头视角 l(nCenterDistance—Currentlmage.Width /2)/(Currentlmage.Width/2)l。 (5)输出偏离角度信息。偏离方向和偏离角度即为偏 离角度信息。 3.3人的距离检测 通过人的距离检测对于智能设备进行控制.只需确 (3) ,IBi( ,y)一Fi(x,y)l>T 定人的位置是近场还是远场就可以了,不需要明确知道 一…【O,IBi(x,y)一Fi(x,y)l-T 一 式中:Si(x,Y)为检测的目标图像;Fi(x,Y)为当前帧 图像;B (x,Y)为背景图像。 (5)获得人体皮肤区域。在前景区域内通过椭圆肤色 模型公式(1)、(2)进行人体皮肤检测。 (6)滤波处理。滤波采用经典9点中值滤波处理。 (7)腐蚀处理。用3x3的结构元素,扫描图像的每一 个像素,用结构元素与其覆盖的二值图像做“与”操作,如 果都为1,结果图像的该像素为l,否则为0。 (8)膨胀处理。用3x3的结构元素,扫描图像的每一 个像素,用结构元素与其覆盖的二值图像做“或”操作,如 果都为0,结果图像的该像素为O,否则为1。 (9)标记连通区域。图像的连通域标记算法有多种, 这里选择区域增长法标记连通区域。 (10)确定人体区域。对单个连通区域进行特征分析, 满足一定特征参数的区域确认为人体区域。连通区域面 积大于500像素。并且连通区域的长宽比小于3。 3.2人的角度检测 人的角度检测是基于人的状态检测.首先确定有人 存在,并通过以上阐述获得目标区域的矩形。分别对每个 检测到目标区域做如下处理。 第i个目标区域矩形 (1)获得目标区 域的矩形。分别对 获得目标区域的中心点X方向数值 3.1检测的目标区域 进行矩形标记.标 确定目标区域偏离方向 记为rectRegion[i]。 确定目标区域偏离角度 (2)获得目标区域 的中心点X方向数 I 输出偏离角度信息 l值。目标区域中心 图2人的角度检测流程图 点的X方向数值 等于nCenterDistance=rectRegion[i】.X+rectRegion[i】. Width/2。 (3)确定目标区域的偏离方向。用nCenterDistance和 摄像头采集数据中心点位置进行比较。nCenterDistance大 于摄像头采集数据中心点位置Currentlmage.Width/2为 向左偏,nCenterDistance小于于摄像头采集数据中心点位 人的具体距离。对于 不同的智能设备近 场和远场的定义不 同,可以通过调节算 法参数适应不同近 场和远场定义。本文 这里定义人与摄像 头距离小于60cm为 近场.大于60cm为 远场 图3人的位置检测流程图 (1)计算第i个运动目标的面积。运动目标矩形标记 为MoveRegion[i】,第i个运动目标的面积计算如下: f0r(int k=MoveRegion【i].X;k<MoveRegion【i].X+ MoveRegion[i].Width;k++) { f0r(int l=MoveRegion【i].Y;l<MoveRegion[i】.Y+ MoveRegion[i].Height;l++) ( if(nMoveDataBut[k,l】>0) { nArea[i].nMoveArea++; } ) ) (2)计算第j个皮肤目标的面积。皮肤目标矩形标记为 SkinRegion D】,第j个皮肤目标的面积计算如下: f0r(int k:SkinRegion[j].X;k<SkinRegion[j].X+ SkinRegion[j].Width;k++) { f0r(int l:SkinRegion[j].Y;1<SkinRegion[j].Y+ SkinRegion[j].Height;1++) { if(nSkinDataBut[k,l】>0) { nArea[i].nSkinArea++; } ) 75 ·测试与控制· } (3)确定当前运动目标区域中人的状态。 SkinRegion[j].Width/2, 『 4.2人的角度检测测试 l人的角度检测人是以人的状态已经正确检测为基 试条件如下::①不同角度测试。选择不同角度—4o。,一20。, Point pTiget=new Point(rectSkinRegion X+rect· l 础。并且要求人的正面或侧面对着摄像头,测试选择的测 rectSkinRegion[j1.Y+rectSkinRegion[j】.Height/2); l 0。,+20。,+40。;②不同距离测试。选择测试距离50cm, bHavePe。ple:tme; if (rectMoveRegion[i].Contains(pTiget)-----true) I 100em,300em,500cm;③不同高度测试。摄像头的高度, 『 60cm,100cm,120cm。 (4)计算皮肤区域面积/运动区域面积S[k]和运动区 - 域面积/图像面积M【k】。 S[k]=nArea[i].nSkinArea 1.0/nArea[i].nMoveArea; M[k]==nArea[i].nMoveArea 1.0/nlmageArea; (5)计算人的角度。人的角度dM0veObjecAng1eRate由 :3.2计算得到。 (6)确定人的位置。 double dStandB。dyRate:0.29; if(dMove0bjecAndeRate>10) ‘dStandBodyRate.。.=0. 26;; } else if(dMoveObjecAngleRate>5) { dStandBodyRate=0.27; } 当(S[kl>0.8&&S[k】:>dStandBodyRate)人为远场, 否则为近场。 4检测算法测试 本文研究算法主要用于智能设备的自动控制,因此 测试条件选取主要考虑智能设备的应用场景。如设备的 使用地方,设备放置的高度,人机交互的距离,还是设备 的角度等条件。 4.1人的状态检测测试 人的状态检测是后面人的角度检测和人的距离检测 的基础,所有人的状态检测测试要求尽可能充分,选择的 测试条件如下:①不同场景测试。卧室、客厅、餐厅、厨房; ②不同距离测试。选择测试距离20cm,50cm,100em, 200cm;③不同角度测试。选择不同角度一40。,_20o,0o,+20。, 人着篓 直背立面侧。 面,人直立背面,人躺着面iE ,人躺着侧面,人躺I测试次数:不同场景个数X不同距离个数X不同角度 个数×不同高度个数X不同姿势个数=4x4x5x5x6=2400 次。测试结果部分数据见表1,其中x/一正确检测,×一没有 检测,o一没有完整成像(由于人的角度太大和距离太近导 致人体不能完整成像)。 76 l表1人的状态检测测试结果 l编号 场景 距离 角度 高度 姿势 结果 ! 1 直立正面 、/ 2 直立侧面 、/ l3 直立背面 × 60cm l4 躺着正面 0 !5 躺着侧面 0 i 6 躺着背面 0 f l7 直立正面 1v/ 8 直立侧面 、/ 9 直立背面 × 客厅 50era —40。 1oocm 10 躺着正面 o 11 躺着侧面 O 12 躺着背面 0 13 直立正面 、/ 14 直立侧面 、/ 15 直立背面 、/ 120cm 16 躺着正面 0 17 躺着侧面 0 18 躺着背面 0 检测率 V一2056 x-236 o一108 90% 测试次数:不同角度个数X不同距离个数X不同高度 个数=5x4x3=60次。测试结果见表2。 4.3人的距离检测测试 人的距离检测人需要用到人的状态检测和人的角度 检测的结果。并且要求人的正面或侧面对着摄像头.测试 选择的测试条件如下:①不同角度测试。选择不同角 度一40。,一2O。,0。,+20。,+40。;②不同距离测试。选择测试距 离30cm,50cm,100cm,300cm;③不同高度测试。灯具摄像 1 头的高度,60cm,100cm。120cm。 测试次数:不同角度个数 不同距离个数 不同高 :度个数=5x4x3=60次。测试结果见表3。 5结果与分析 将本文研究算法通过Microsoft Visual Studio2008 C# 实现。算法运行效果如图3~图6所示。 本文通过人体运动目标检测,人体皮肤检测,最终实