GitHub - Town-Hong/HLS_FaceDetect
采用Vivado工具软硬件协同开发的方法,将摄像头实时画面采集、人脸肤色检测IP核和VGA显示集成在一个Zedboard嵌入式平台上,完成了系统测试及结果分析。主要工作如下:
(1)使用Vivado高层次综合工具(High-Level Synthesis,HLS)利用C++高级语言在ZYNQ可编程逻辑部分(Programmable Logic,PL)对人脸肤色检测IP核进行编码实现,主要包括:创建YCrCb高斯肤色模型计算肤色相似概率、大津法(OTSU)计算二值化阈值、形态学开运算和IP核硬件端口设计。最终利用HLS针对复杂系统的算术逻辑、资源调用和时间调度提供的优化手段,对人脸肤色检测IP核进行优化。
(2)使用Vivado工具对人脸肤色检测系统进行软硬件协同设计,添加OV7725摄像头图像采集IP、硬件加速的人脸肤色检测IP、DDR3存储IP和VGA显示IP并进行参数配置和端口连线,在ZYNQ处理系统部分(Processing System,PS)使用Vivado SDK进行软件设计,最终搭建了一套完整的实时视频检测通路。
(3)在Zedboard开发板上进行实物连接,对系统进行板上测试和分析检测效果,并通过集成逻辑分析器技术(Integrated Logic Analyzer, ILA)对检测效果做进一步的量化分析和效率评估。最终结果表明,本系统能对人脸肤色区域进行准确的检测,系统稳定且效果良好;提取效率只受工作时钟的影响,在100MHz工作频率下,处理每一帧图像(分辨率640×480)需要3.26ms,已经接近极限效率。
相比RGB颜色空间,肤色在YCrCb颜色空间可以轻松忽略亮度(Y)分量,能直接将三维空间转换为二维,而且在Cr、Cb两个分量肤色具有很好的聚类性。正是因为这些优秀的特性,可以说YCrCb颜色空间就是为肤色表示量身打造的。
转换公式:

根据该肤色高斯分布模型就可以计算出目标像素点与肤色的可能性大小,即相似概率PCr,Cb ,取值范围[0,1],当相似概率越接近1时,目标像素就越可能属于肤色像素。相似概率计算公式:

高斯模型G(m,C) 的参数采用如下数据:

仿真效果: 
ZYNQ-7000嵌入式平台为ARM+FPGA体系架构,集成了ARM双核处理系统与FPGA硬件可编程逻辑。
Zedboard开发板是行业首款面向广大开源社区的基于Zynq-7000可扩展平台(EPP)的低成本开发板,除Zynq-7000外,还可以扩展音频视频模块、12口可编程Pmods、USB OTG 2.0接口、10/100/1000以太网接口、存储器等。

描述系统模型的高级语言C/C++/System C转换到描述RTL级的HDL代码,这种设计方式可以让设计人员不用再去关心底层的硬件实现细节,大大地降低了FPGA开发的难度和周期,使得更多软件开发人员能够越过硬件门槛接触硬件模块的设计。

其中Vivado HLS视频库提供了许多与OpenCV具有相似接口和功能的函数,从而使得OpenCV能与HLS开发软件相互适配,实现FPGA架构中的图像处理功能,可以借助这个库完成视频抽帧,抽像素点,axi4数据转换。
实时视频检测软硬件模块设计如下:

HLS提供了非常多的优化手段,一方面必须根据实际代码语法、算术逻辑的特点,从而选取合适的优化手段,另一方面必须先确定极限优化时延,为实现最优优化制定目标。
开源地址:GitHub - Town-Hong/HLS_FaceDetect
(1)视频数据处理和数据类型的转换
(2)YCrCb高斯模型计算相似概率
(3)OTSU阈值二值化
(4)形态学开运算
(5)IP核数据端口设计——Port-level接口协议
(6)IP核控制端口设计——Block-level接口协议
HLS提供了非常多的优化手段,一方面必须根据实际代码语法、算术逻辑的特点,从而选取合适的优化手段,另一方面必须先确定极限优化时延,为实现最优优化制定目标。通过HLS提供的宏函数完成,模板:#pragma HLS xx
未经优化数据:

优化手段:
(1)初步优化——dataflow优化: #pragma HLS dataflow
(2)对循环的优化 —— PIPELINE优化和FLATTEN优化:#pragma HLS pipeline II=1;#pragma HLS loop_flatten off
(3)对数组的优化——ARRAY_PARTITON
(4)精优化——DEPENDENCE优化和数值位宽优化
最终优化结果:

IP核设计原理+前后连接关系:

最终IP连接图:

实物连线图:

人脸:

手部:原图 -> 仿真图 -> 实时视频检测图


