[X]关闭

[米联客-XILINX-H3_CZ08_7100] FPGA_图像入门连载-24FPGA 实现基于肤色识别的人脸检测

文档创建者:FPGA课程
浏览次数:6
最后更新:2024-10-22
文档课程分类-AMD-ZYNQ
AMD-ZYNQ: ZYNQ-FPGA部分 » 2_FPGA实验篇(仅旗舰) » 8-FPGA图像入门
本帖最后由 FPGA课程 于 2024-10-22 19:58 编辑

​软件版本:VIVADO2021.1
操作系统:WIN10 64bit
硬件平台:适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA
实验平台:米联客-MLK-H3-CZ08-7100开发板
板卡获取平台:https://milianke.tmall.com/
登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!



1 图像肤色识别算法简介
在《human  skin  color  clustering  for  face  detection》一篇文章中,讲解了如何使用肤色识别进行了人脸检测, 算法的推理过程,这里不讲解,感兴趣的可以去看看原文。这里只拿来论文中的结论进行实践,论文中提到了基于 RGB 颜色空间的肤色识别,判别式如下:
R>95and  G>40  and  B>20  and  R>G  and  R>B  and  Max(R,G,B)-Min(R,G,B)>15  and  abs(R-G)>15
基于 YCbCr 颜色空间的肤色识别,将图像转换到 YCbCr 颜色空间,然后按下述计算式判断是否属于皮肤域:
(Cb  >  77  and  Cb7  <   127)    and    (Cr  >   133  and  Cr  <   173) 肤色识别算法计算量小,算法实践简单,缺点也很明显,容易受到外界背景干扰。
具体的计算过程是,将实时的帧图像从 RGB 转换成 YCbCr,然后按照上述的肤色识别计算公式,将肤色的区 域标记,然后进行图像二值化运算,区分出背景和肤色部分,进行膨胀、腐蚀去除噪点,最后将肤色区域进行框选 叠加在实时的视频中。
2设计分析
2.1Verilog 代码分析
  1. // ycbcr0(:,:,1)    =    0.2568*image_in_r + 0.5041*image_in_g + 0.0979*image_in_b + 16;
  2. // ycbcr0(:,:,2)    = -0.1482*image_in_r - 0.2910*image_in_g + 0.4392*image_in_b + 128;
  3. // ycbcr0(:,:,3)    =    0.4392*image_in_r - 0.3678*image_in_g - 0.0714*image_in_b + 128;

  4. // ycbcr0(:,:,1)    = 256*( 0.2568*image_in_r + 0.5041*image_in_g + 0.0979*image_in_b + 16 )>>8;
  5. // ycbcr0(:,:,2)    = 256*(-0.1482*image_in_r - 0.2910*image_in_g + 0.4392*image_in_b + 128)>>8;
  6. // ycbcr0(:,:,3)    = 256*( 0.4392*image_in_r - 0.3678*image_in_g - 0.0714*image_in_b + 128)>>8;

  7. // ycbcr0(:,:,1)    = (66*image_in_r + 129*image_in_g + 25*image_in_b + 4096    )>>8;
  8. // ycbcr0(:,:,2)    = (-38*image_in_r - 74*image_in_g + 112*image_in_b + 32768)>>8;
  9. // ycbcr0(:,:,3)    = (112*image_in_r - 94*image_in_g - 18*image_in_b + 32768 )>>8;

  10. reg [15:0] r_d0;  
  11. reg [15:0] g_d0;
  12. reg [15:0] b_d0;

  13. reg [15:0] r_d1;  
  14. reg [15:0] g_d1;
  15. reg [15:0] b_d1;
  16. reg [15:0] r_d2;  
  17. reg [15:0] g_d2;
  18. reg [15:0] b_d2;

  19. reg [15:0] y_d0;   
  20. reg [15:0] cb_d0;
  21. reg [15:0] cr_d0;

  22. reg [7:0] y_d1;   
  23. reg [7:0] cb_d1;
  24. reg [7:0] cr_d1;

  25. reg [7:0] skin_color_r;  
  26. reg [7:0] skin_color_g;
  27. reg [7:0] skin_color_b;

  28. reg [3:0] hsyn;
  29. reg [3:0] vsyn;
  30. reg [3:0] de;

  31. always@(posedge i_clk ornegedge i_rst_n) begin
  32. if(!i_rst_n) begin
  33. r_d0 <= 16'd0;  
  34. g_d0 <= 16'd0;
  35. b_d0 <= 16'd0;
  36. r_d1 <= 16'd0;  
  37. g_d1 <= 16'd0;
  38. b_d1 <= 16'd0;
  39. r_d2 <= 16'd0;  
  40. g_d2 <= 16'd0;
  41. b_d2 <= 16'd0;
  42. end   
  43. else    begin
  44. r_d0 <= 66    * i_r;  
  45. g_d0 <= 129 * i_g;  
  46. b_d0 <= 25    * i_b;
  47. _d1 <= 38    * i_r;  
  48. g_d1 <= 74    * i_g;
  49. b_d1 <= 112 * i_b;  
  50. r_d2 <= 112 * i_r;   
  51. g_d2 <= 94    * i_g;
  52. b_d2 <= 18    * i_b;
  53. end
  54. end

  55. always@(posedge i_clk ornegedge i_rst_n) begin
  56. if(!i_rst_n) begin
  57. y_d0    <= 16'd0;
  58. cb_d0 <= 16'd0;  
  59. cr_d0 <= 16'd0;
  60. end   
  61. else    begin
  62. y_d0    <= r_d0 + g_d0 + b_d0 + 4096 ;
  63. cb_d0 <= b_d1 - r_d1 - g_d1 + 32768;   
  64. cr_d0 <= r_d2 - g_d2 - b_d2 + 32768;
  65. end
  66. end

  67. always@(posedge i_clk ornegedge i_rst_n) begin
  68. if(!i_rst_n) begin
  69. y_d1    <= 16'd0;
  70. cb_d1 <= 16'd0;  
  71. cr_d1 <= 16'd0;
  72. end   
  73. else    begin
  74. y_d1    <= y_d0[15:8];
  75. cb_d1 <= cb_d0[15:8];
  76. cr_d1 <= cr_d0[15:8];
  77. end
  78. end

  79. always@(posedge i_clk ornegedge i_rst_n) begin
  80. if(!i_rst_n) begin
  81. skin_color_r <= 8'd0;  
  82. skin_color_g <= 8'd0;
  83. skin_color_b <= 8'd0;
  84. end
  85. else if(cb_d1 > 77 && cb_d1 < 127 && cr_d1 > 133 && cr_d1 < 173) begin
  86. skin_color_r <= 8'd255;
  87. skin_color_g <= 8'd255;
  88. skin_color_b <= 8'd255;
  89. end   
  90. else    begin
  91. skin_color_r <= 8'd0;  
  92. skin_color_g <= 8'd0;
  93. skin_color_b <= 8'd0;
  94. end
  95. end
复制代码

2.2 工程结构分析
我们将图像算法的模块做成 IP 后,在vivado 中进行工程的搭建,工程结构如图所示:
d5b0facfdde749caacbda4c82f03cbff.jpg
3 搭建 Vitis-sdk 工程
创建 soc_base  sdk  platform  和 APP  工程的过程不再重复,可以阅读 3-3-01_sdk_base_app。以下给出创建好 soc_base sdk platform 的截图和对应工程 APP 的截图。
3.1 创建 SDK Platform 工程
3c3303bbadaf445ba5aef196cc8ae8b5.jpg

3.2SDK APP 工程
b03b123a7c814108b81951a6ea4cbf63.jpg
4 硬件连接
硬件连接如图所示
92f73f7678724de7a9aba143ebfa12b8.jpg
5 上板实验结果
实验结果如图所示:
021f27eddd94461dbf9446ad9aedbb42.jpg
213b1d934b98497d8986be6e1c42256c.jpg




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则