一种基于zynq的人体肤色区域实时检测方法
技术领域
1.本发明属于图像处理领域,具体涉及一种基于zynq的人体肤色区域实时检测方法。
背景技术:2.fpga(field programmable gate array)是在pal、gal等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(asic)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点,由于fpga本身的并行处理机制,使得fpga常常被应用在硬件算法加速方面,在图像处理领域也是应用日益广泛,尤其是在当今要求高的图像处理实时性的背景下,对硬件提出了更严苛的要求。
3.传统的人体肤色检测都是直接在pc上进行采集处理,这将主要产生两大限制:一是在pc携带不方便,不够小型化,同时在实际工程应用中,将整个pc直接搭载在设备上也将成本大大提高;二是在pc上的cpu上进行图像处理会出现偶尔的掉帧,实时性很差,若在pc的gpu上进行图像处理,虽然在性能上完全能持平甚至超过fpga,但是其功耗大也是非常的影响因素。
技术实现要素:4.本发明的目的在于提供一种基于zynq的人体肤色区域实时检测方法。
5.实现本发明目的的技术解决方案为:一种基于zynq的人体肤色区域实时检测方法,包括如下步骤:
6.步骤(1):采集图像;
7.步骤(2):通过人体肤色区域检测ip核对步骤(1)采集的图像数据处理,将颜色空间进行转化,进行动态阈值处理得到肤色区域并进行检测标记;
8.步骤(3):对步骤(2)检测出的肤色部分图像进行剔除最小连通区域算法处理;
9.步骤(4):进行图像数据转存及提取,利用vdma将图像数据写入ddr3,并利用fifo作流水化处理;
10.步骤(5):将处理后图像实时显示在lcd屏上。
11.进一步的,步骤(2)“通过人体肤色区域检测ip核对步骤(1)采集的图像数据处理,将颜色空间进行转化,进行动态阈值处理得到肤色区域并进行检测标记”具体为:
12.步骤(21):需要将ov5640摄像头采集到的图像数据进行预处理,即rgb565—>rgb888:
13.pixel_data[7:0]={source_data[4:0],0}
ꢀꢀꢀ
(1)
[0014]
pixel_data[7:0]={source_data[6:0],0}
ꢀꢀꢀ
(2)
[0015]
式(1)代表r和b两个通道的图像数据转化,式(2)代表g图像数据通道转化,即是提取出高位,底位补0;
[0016]
步骤(22):将步骤(21)转化后的图像数据转化为ycbcr图像数据,并进行肤色提
取,具体为:
[0017]
y=0.299r+0.587g+0.114b
ꢀꢀꢀ
(3)
[0018]
cb=0.564(b-y)
ꢀꢀꢀ
(4)
[0019]
cr=0.713(r-y)
ꢀꢀꢀ
(5)其中y代表亮度信息,cb和cr代表蓝色和红色两通道的色差信息;
[0020]
步骤(23):对转换的三个变量进行阈值判定,当同时满足式(6)、(7)、(8)时,便得到图像分辨标志位skin_flag;
[0021]
y_upper>y>y_lower
ꢀꢀꢀ
(6)
[0022]
cb_upper>cb>cb_lower
ꢀꢀꢀ
(7)
[0023]
cr_upper>cr>cr_lower
ꢀꢀꢀ
(8)
[0024]
步骤(24):将步骤(23)标志位所划分出的区域进行纯白化标记,见下式:
[0025]
temp_pixel=(skin_flag)?255:pixel_data
ꢀꢀꢀ
(9)
[0026]
其中temp_pixel代表处理后的图像像素值,泛指三通道图像数据r、g、b,pixel_data为原像素点像素值。
[0027]
进一步的,步骤(3)“对步骤(2)检测出的肤色部分图像进行剔除最小连通区域算法处理”具体为:
[0028]
设中心点像素(x,y)的搜索区域为数组r,将中心点的搜索方向定为8个方向,即是第一层外扩搜索区域3
ⅹ
3的像素块,以此类推;给出搜索的边界条件,最终得到此中心像素点的搜索区域r;
[0029]
在倾斜方向上:
[0030][0031][0032]
在水平和竖直方向上:
[0033]
x
′
=x+cosθ θ∈θ2
[0034]y′
=y-sinθ θ∈θ2
[0035]
其中x
′
和y
′
为下一个搜索像素点的坐标,其中θ为中心点周围八个角度值,倾斜方向上在θ1中取四个方向的角度值,水平和竖直方向上在θ2中取四个方向的角度值;
[0036]
同时限定阈值判断条件:
[0037]
g(x
′
,y
′
)-g(x,y)<t
[0038]
上式中以前后像素的灰度差作为判断依据,设定阈值t作为区域搜索迭代终止条件;
[0039]
最终得到连通区域r,并进行区域大小剔除:
[0040][0041]
对区域r进行判断,其值是否小于阈值a(连通区域的面积上限值),若小于,则将其剔除;反之,则保留。
[0042]
进一步的,步骤(1)中采用ov5640摄像头进行图像采集。
[0043]
进一步的,步骤(2)中的人体肤色区域检测ip核的接口定义为:将入口input和出口output定义接口类型为axis register both,八个参数rows、cols、y_lower、y_upper、cb_lower、cb_upper、cr_lower、cr_upper接口定义为s_axilite,用优化指令dataflow,对全局的函数处理流程进行流水线处理,ip和核顶层函数返回值接口定义为ap_ctrl_none,此接口用于实现不含任何块级i/o协议的设计。
[0044]
本发明与现有技术相比,其显著优点在于:
[0045]
(1)利用zynq硬件平台对人体肤色区域进行实时检测,通过预先在hls中搭建相应肤色检测算法ip核,并进行c仿真去报功能无误;再考虑相应参数和视频数据流接口定义,同时考虑到数据处理的时序性,采用合理的优化指令对输入输出图像数据进行流水线操作,综合并导出相应ip核;再进行整个系统的ip核框图搭建并进行后续有效性分析和综合分析得到底层硬件平台;整个ip核系统资源占用很低,同时完全能够满足日常实时图像数据采集,标识出的图像数据经过后处理后,再实时存入ddr3中,便于图像数据二次处理,使得其能够衔接到其他诸多领域中,具有广阔的应用前景。
[0046]
(2)本系统是通过zynq进行人体肤色区域检测,所以只需要上电即可开始工作,并实时采集图像,并标识出相应的肤色区域进行显示,同时可以在系统运行过程中进行二次图像处理,系统的可再开发性强。
附图说明
[0047]
图1为本发明系统流程图。
[0048]
图2为详细中间数据流流向说明图。
[0049]
图3为hls人体肤色检测ip核实现流程图。
[0050]
图4为hls阶段仿真测试图。
[0051]
图5为hls阶段仿真测试结果图。
[0052]
图6为系统硬件实现平台,选用zynq芯片型号为xc7z020clg400-2的领航者开发板。
[0053]
图7为实际使用中检测的人体手部肤色区域效果图。
[0054]
图8为hls时序综合结果和zynq资源使用率。
[0055]
图9为hls最终综合后的接口。
具体实施方式
[0056]
以下参照图1,进一步描述本发明的具体技术实施方案,以便于本领域的技术人员进一步地理解本发明,而不构成对其权利的限制。
[0057]
最新的异构芯片技术zynq,采用fpga(pl端)+arm(ps端)的架构能够灵活适应不同的应用要求,从而大大提高了其工程适用性。故本发明主要在zynq上搭建高精度人体肤色区域实时检测系统,整体的系统设计和肤色检测ip核设计是主要的发明点,在系统应用整体数据流优化方式和ip核算法优化指令,大幅度提升了图像处理的准确性和实时性,具有广阔的应用前景。
[0058]
请参阅图1所示,一种基于zynq的高精度人体肤色区域实时检测系统,所述方法包括以下步骤:
[0059]
步骤一:图像采集,利用ov5640摄像头采集图像,并传递给后面进行图像处理;
[0060]
步骤二:在步骤一基础上,进行人体肤色区域检测,此部分将颜色空间进行转化,进行动态阈值处理得到肤色区域并进行检测标记;
[0061]
步骤三:在步骤二的基础上,进行图像后处理,对检测出的肤色部分图像进行剔除最小连通区域等后处理算法处理;
[0062]
步骤四:在步骤三的基础上,进行图像数据转存及提取,利用vdma将图像数据写入ddr3(内存)并利用fifo作流水化处理;
[0063]
步骤五:最后利用lcd屏将处理后图像实时显示在lcd屏上。
[0064]
各步骤的详细实现:
[0065]
步骤一:利用500w像素的ov5640摄像头进行图像采集,并传递给后面进行图像处理。
[0066]
步骤二:通过人体肤色区域检测ip核对步骤一所采集的图像数据进行处理。人体肤色区域检测ip核的开发流程:在图3中,最左侧是hls实现过程中的肤色检测主要算法实现流程图,主要是先将axi4-stream视频流图像数据转换成rgb888图像数据,为了便于图像数据处理计算,,再将rgb888图像数据转化为ycbcr图像数据,将其中的亮度信息和色差信息区分开,ycbcr图像数据便可以由六个独立参数进行阈值判定,得到判定标志位skin_flag,再将相应肤色区域纯白化标识出来,最终再转化回axi4-stream视频流图像数据进行图像数据输出;图3中间是hls仿真流程,主要思想即是利用hls导入的opencv库对待检测的图像(见图4)进行肤色检测算法验证,验证结果见图5,可以分析出此肤色检测算法可行;在图3最右侧列出了此ip核的接口定义,并对利用相应优化指令对函数数据处理进行优化,其中将入口input和出口output定义接口类型为axis register both,八个参数rows、cols、y_lower、y_upper、cb_lower、cb_upper、cr_lower、cr_upper接口定义为s_axilite,便于ps端对相应参数进行配置,用优化指令dataflow,对全局的函数处理流程进行流水线处理,ip和核顶层函数返回值接口定义为ap_ctrl_none,此接口用于实现不含任何块级i/o协议的设计;图8为hls时序综合结果和zynq资源使用率,可以看到,此ip核的资源占用率极低,其留出更多的资源能够实现其他图像处理的二次开发,图9是hls最终综合后的接口列表。
[0067]
其中步骤二中的人体肤色检测算法如下:
[0068]
首先需要将ov5640摄像头采集到的图像数据进行预处理,即rgb565—>rgb888:
[0069]
pixel_data[7:0]={source_data[4:0],0}
ꢀꢀꢀ
(1)
[0070]
pixel_data[7:0]={source_data[6:0],0}
ꢀꢀꢀ
(2)
[0071]
公式(1)代表r和b两个通道的图像数据转化,公式(2)代表g图像数据通道转化,即是提取出高位,地位补0。
[0072]
然后便将上述图像数据转化为ycbcr图像数据,并进行肤色提取,见下式:
[0073]
y=0.299r+0.587g+0.114b
ꢀꢀꢀ
(3)
[0074]
cb=0.564(b-y)
ꢀꢀꢀ
(4)
[0075]
cr=0.713(r-y)
ꢀꢀꢀ
(5)
[0076]
y_upper>y>y_lower
ꢀꢀꢀ
(6)
[0077]
cb_upper>cb>cb_lower
ꢀꢀꢀ
(7)
[0078]
cr_upper>cr>cr_lower
ꢀꢀꢀ
(8)
[0079]
其中y代表亮度信息,cb和cr代表蓝色和红色两通道的色差信息,由于原始rgb图像未区分开亮度信息和色差信息,所以这样转换是为了便于进行图像数据处理;同时对转换的三个变量进行阈值判定,当同时满足公式(6)、(7)、(8)时,便得到图像分辨标志位skin_flag;
[0080]
为了划分出肤色区域,将上面标志位所划分出的区域进行纯白化标记,见下式:
[0081]
temp_pixel=(skin_flag)?255:pixel_data
ꢀꢀꢀ
(9)
[0082]
其中temp_pixel代表处理后的图像像素值,泛指三通道图像数据r、g、b。
[0083]
步骤三:在步骤二的基础上,直接在ip核中开发肤色区域的图像后处理部分,利用fpga的并行化的计算方式,将图像后处理阶段核心算法-剔除最小连通区域算法也通过hls进行开发综合。
[0084]
其中步骤三中的剔除最小连通区域算法如下:
[0085]
设中心点像素(x,y)的搜索区域为数组r,由于fpga的并行计算特点,将中心点的搜索方向定为8个方向,即是第一层外扩搜索区域3
ⅹ
3的像素块,并以此类推。并给出搜索的边界条件,最终得到此中心像素点的搜索区域r。
[0086]
在倾斜方向上:
[0087][0088][0089]
在水平和竖直方向上:
[0090]
x
′
=x+cosθ θ∈θ2
[0091]y′
=y-sinθ θ∈θ2
[0092]
其中x
′
和y
′
为下一个搜索像素点的坐标,其中θ为中心点周围八个角度值,倾斜方向上在θ1中取四个方向的角度值,水平和竖直方向上在θ2中取四个方向的角度值;
[0093]
同时限定阈值判断条件:
[0094]
g(x
′
,y
′
)-g(x,y)<t
[0095]
上式中以前后像素的灰度差作为判断依据,设定阈值t作为区域搜索迭代终止条件;
[0096]
最终得到连通区域r,并进行区域大小剔除:
[0097][0098]
对区域r进行判断,其值是否小于阈值a(连通区域的面积上限值),若小于,则将其剔除;反之,则保留。
[0099]
步骤四:在以上图像处理结束后,将处理后的每一帧图像都实时暂存在ddr3中,方便在系统运行中进行二次开发。系统中主要通过video in to axi4-stream核和axi4-stream to video out核将视频流的数据转换成axi4-stream数据,并通过vdma核分配不同的地址空间,将获取的实时图像暂存在ddr3中,在暂存的同时还把利用fifo对从ddr3中读出的图像进行缓存,实现流水线数据处理,提高fpga的单周期的图像处理能力。
[0100]
步骤五:将步骤四中读出的图像数据实时显示在lcd屏上,通过开发的rgb to lcd
核适配外部不同型号的lcd屏,并驱动lcd屏进行工作显示图像。
[0101]
整体系统ip核的框架:摄像头(ov5640)图像数据采集ip核,rgb565转化为axi4-stream视频流ip核、肤色检测ip核、vdma数据存储ip核(直接访问ps端的ddr3)、axi4-stream视频流转成rgb888图像输出ip核、适配外接不同id的lcd屏的rgb to lcd核,上面时主要的pl端图像数据处理流程线;在ps端控制方面,主要由zynq7 processing system核为pl端提供相应时钟(100mhz),同时为了考虑vtc核和axi4-stream to video out核等的动态时序匹配问题,利用动态时钟生成ip核为上面的几类核提供时钟,从而提高了发系统的稳定性和可靠性;在搭建好ip系统图后,将两端ip核的外接端口引出,并将其与相应板载i/o相互约束,便构成了整个框图,详细数据流传递图说明见图2;
[0102]
最终将上面系统框图进行ip核有效性分析和综合分析,生成底层硬件平台,生成bit流后导入sdk中进行上板验证,验证结果见图7。
[0103]
在经过上述步骤后,导出的bit流,再打开sdk,利用axilite接口对相应ip进行配置,初始化并驱动相应外设进行工作,最后将程序下载进zynq开发板中,进行上板验证。
[0104]
本系统是通过zynq进行人体肤色区域检测,所以只需要上电即可开始工作,并实时采集图像,并标识出相应的肤色区域进行显示,同时可以在系统运行过程中进行二次图像处理,系统的可再开发性强。
技术特征:1.一种基于zynq的人体肤色区域实时检测方法,其特征在于,包括如下步骤:步骤(1):采集图像;步骤(2):通过人体肤色区域检测ip核对步骤(1)采集的图像数据处理,将颜色空间进行转化,进行动态阈值处理得到肤色区域并进行检测标记;步骤(3):对步骤(2)检测出的肤色部分图像进行剔除最小连通区域算法处理;步骤(4):进行图像数据转存及提取,利用vdma将图像数据写入ddr3,并利用fifo作流水化处理;步骤(5):将处理后图像实时显示在lcd屏上。2.根据权利要求1所述的方法,其特征在于,步骤(2)“通过人体肤色区域检测ip核对步骤(1)采集的图像数据处理,将颜色空间进行转化,进行动态阈值处理得到肤色区域并进行检测标记”具体为:步骤(21):需要将ov5640摄像头采集到的图像数据进行预处理,即rgb565->rgb888:pixel_data[7:0]={source_data[4:0],0}
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1)pixel_data[7:0]={source_data[6:0],0}
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)式(1)代表r和b两个通道的图像数据转化,式(2)代表g图像数据通道转化,即是提取出高位,底位补0;步骤(22):将步骤(21)转化后的图像数据转化为ycbcr图像数据,并进行肤色提取,具体为:y=0.299r+0.587g+0.114b
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(3)cb=0.564(b-y)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(4)cr=0.713(r-y)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(5)其中y代表亮度信息,cb和cr代表蓝色和红色两通道的色差信息;步骤(23):对转换的三个变量进行阈值判定,当同时满足式(6)、(7)、(8)时,便得到图像分辨标志位skin_flag;y_upper>y>y_lower
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(6)cb_upper>cb>cb_lower
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(7)cr_upper>cr>cr_lower
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8)步骤(24):将步骤(23)标志位所划分出的区域进行纯白化标记,见下式:temp_pixel=(skin_flag)?255:pixel_data
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(9)其中temp_pixel代表处理后的图像像素值,泛指三通道图像数据r、g、b,pixel_data为原像素点像素值。3.根据权利要求2所述的方法,其特征在于,步骤(3)“对步骤(2)检测出的肤色部分图像进行剔除最小连通区域算法处理”具体为:设中心点像素(x,y)的搜索区域为数组r,将中心点的搜索方向定为8个方向,即是第一层外扩搜索区域3
×
3的像素块,以此类推;给出搜索的边界条件,最终得到此中心像素点的搜索区域r;在倾斜方向上:在倾斜方向上:
在水平和竖直方向上:x
′
=x+cosθ θ∈θ2y
′
=y-sinθ θ∈θ2其中x
′
和y
′
为下一个搜索像素点的坐标,其中θ为中心点周围八个角度值,倾斜方向上在θ1中取四个方向的角度值,水平和竖直方向上在θ2中取四个方向的角度值;同时限定阈值判断条件:g(x
′
,y
′
)-g(x,y)<t上式中以前后像素的灰度差作为判断依据,设定阈值t作为区域搜索迭代终止条件;最终得到连通区域r,并进行区域大小剔除:对区域r进行判断,其值是否小于阈值a(连通区域的面积上限值),若小于,则将其剔除;反之,则保留。4.根据权利要求3所述的方法,其特征在于,步骤(1)中采用ov5640摄像头进行图像采集。5.根据权利要求4所述的方法,其特征在于,步骤(2)中的人体肤色区域检测ip核的接口定义为:将入口input和出口output定义接口类型为axis register both,八个参数rows、cols、y_lower、y_upper、cb_lower、cb_upper、cr_lower、cr_upper接口定义为s_axilite,用优化指令dataflow,对全局的函数处理流程进行流水线处理,ip和核顶层函数返回值接口定义为ap_ctrl_none,此接口用于实现不含任何块级i/o协议的设计。
技术总结本发明涉及一种基于ZYNQ的人体肤色区域实时检测方法。包括如下步骤:步骤(1):采集图像;步骤(2):通过人体肤色区域检测IP核对步骤(1)采集的图像数据处理,将颜色空间进行转化,进行动态阈值处理得到肤色区域并进行检测标记;步骤(3):对步骤(2)检测出的肤色部分图像进行剔除最小连通区域算法处理;步骤(4):进行图像数据转存及提取,利用VDMA将图像数据写入DDR3,并利用FIFO作流水化处理;步骤(5):将处理后图像实时显示在LCD屏上。本发明通过ZYNQ进行人体肤色区域检测,所以只需要上电即可开始工作,并实时采集图像,并标识出相应的肤色区域进行显示,同时可以在系统运行过程中进行二次图像处理,系统的可再开发性强。系统的可再开发性强。系统的可再开发性强。
技术研发人员:于纪言 陈艺 于洪森 冯斌
受保护的技术使用者:南京理工大学
技术研发日:2021.12.31
技术公布日:2022/7/5