首页 > 其他分享 >基于肤色模型的人脸识别FPGA实现,包含tb测试文件和MATLAB辅助验证

基于肤色模型的人脸识别FPGA实现,包含tb测试文件和MATLAB辅助验证

时间:2024-05-14 23:09:03浏览次数:15  
标签:人脸识别 FPGA clk tb 模型 Isave integer 肤色 reg

1.算法运行效果图预览

matlab2022a的测试结果如下:

 

 

 

vivado2019.2的仿真结果如下:

 

 

 

将数据导入到matlab中,

 

 

 

系统的RTL结构图如下图所示:

 

 

 

系统包括中值滤波,RGB转换为ycbcr,人脸检测三个模块

 

2.算法运行软件版本

vivado2019.2

 

matlab2022a

 

3.算法理论概述

       肤色模型通常定义在特定的颜色空间中,常见的有RGB、HSV、YCbCr、Lab等。在这些颜色空间中,YCbCr因其能较好地分离亮度(Y)和色度信息(Cb和Cr),常被用于肤色检测。肤色模型可以是简单的阈值方法,也可以是复杂的概率模型,如高斯模型或混合高斯模型。

 

       对于给定的像素点Cbi​,Cri​),可以通过计算其在肤色模型下的概率密度值来判断是否属于肤色区域。如果该值超过某一阈值T,则认为该像素属于肤色区域:

 

 

 

       在肤色检测之前,通常需要对图像进行预处理,如灰度化、去噪、光照补偿等,以减少环境因素的干扰。对于彩色图像,首先将其从RGB空间转换至YCbCr空间:

 

 

 

       基于肤色模型,肤色分割通常采用阈值法或概率判决法。阈值法直接设定Cb和Cr的阈值范围,如:

 

 

 

       基于肤色模型的人脸识别技术利用了肤色在色彩空间中的统计特性,通过构建肤色概率模型实现人脸区域的初步定位。尽管这种方法对于复杂背景和光照变化敏感,但通过适当的预处理、后处理及模型优化,可以有效提升识别准确率。

 

 

 

 

4.部分核心程序

`timescale 1ns / 1ps
 
module TEST();
 
reg i_clk;
reg i_rst;
reg [7:0] Isave[0:220000];
integer fids;
 
 
integer dat; 
integer Pix_begin;
integer Sizes;
 
 
initial 
begin
	fids = $fopen("D:\\FPGA_Proj\\FPGAtest\\code\\test.bmp","rb");
	dat  = $fread(Isave,fids);
	//有效像素起始位置
	Pix_begin = {Isave[13], Isave[12], Isave[11], Isave[10]};
	//尺寸
	Sizes     = {Isave[5], Isave[4], Isave[3], Isave[2]};
 
	$fclose(fids);
end
 
initial 
begin
i_clk=1;
i_rst=1;
#1000
i_rst=0;
end 
 
always #5  i_clk=~i_clk;
 
 
integer jj=0;
reg [7:0]R;
reg [7:0]G;
reg [7:0]B;
always@(posedge i_clk) 
begin
	R<=Isave[jj+2];//这个datas可以用于输入到FPGA的后期处理
	G<=Isave[jj+1];//这个datas可以用于输入到FPGA的后期处理
	B<=Isave[jj];//这个datas可以用于输入到FPGA的后期处理
	jj<=jj+3;
end
 
 
wire [7:0]o_Rmed,o_Gmed,o_Bmed;
wire [7:0]o_Y;// Y 
wire [7:0]o_Cr;// Y 
wire [7:0]o_Cb;// Y 
wire [7:0]o_face_check;
 
 
tops tops_u(
.i_clk (i_clk),
.i_rst (i_rst),
.i_R   (R),
.i_G   (G),
.i_B   (B),
.o_Rmed       (o_Rmed),
.o_Gmed       (o_Gmed),
.o_Bmed       (o_Bmed),
.o_Y          (o_Y),// Y 
.o_Cr         (o_Cr),// Y 
.o_Cb         (o_Cb),// Y 
.o_face_check (o_face_check)
);
 
integer fout1;
initial begin
 fout1 = $fopen("face.txt","w");
end
 
always @ (posedge i_clk)
 begin
    if(jj<=65536*3+54 & jj>54)
	$fwrite(fout1,"%d\n",o_face_check);
	else
	$fwrite(fout1,"%d\n",0);
end
endmodule

  

标签:人脸识别,FPGA,clk,tb,模型,Isave,integer,肤色,reg
From: https://www.cnblogs.com/matlabworld/p/18192474

相关文章

  • Unraid 使用 Docker Compose 安装 Immich 套件无法启用人脸识别的原因及修复方法
    原因问题原因是官方教程中的docker-compose.yml指明的机器学习组件immich-machine-learning中的container_name也就是docker-compose.yml中不同service可以互访的媒介hostname与immich-server默认设置中的机器学习服务器url的hostname不匹配造成的。解决方法......
  • FPGA/EDA实验箱-竞赛普及版(ALTERA)
    型号:XQEP4CE-TEBV6.11、产品概述FPGA/EDA实验箱是一款FPGA教学实验系统,由FPGA开发板、显示屏、下载器、应用模块及相关实验配件组成;FPGA开发板采用底板+核心板的设计架构,核心板板采用是六层PCB设计,采用大容量管脚更多的BGA封装,F484封装,使整个核心板的性能和稳定性有了很大的提......
  • 基于FPGA的贪吃蛇游戏 之代码解析
    基于FPGA的贪吃蛇游戏之代码解析1. 代码结构代码结构包含7格.v文件。  下面依次解析。   2. 代码解析(1) seg_display.v数码管的译码模块是最熟悉,最简单的模块了。这里是共阳极的数码管,用case语句编码即可。从上图可以看到,这个模块被例化了3次,分别驱动3个数码......
  • 数据分享|python分类预测职员离职:逻辑回归、梯度提升、随机森林、XGB、CatBoost、LGB
    全文链接:https://tecdat.cn/?p=34434原文出处:拓端数据部落公众号分析师:ShilinChen离职率是企业保留人才能力的体现。分析预测职员是否有离职趋向有利于企业的人才管理,提升组织职员的心理健康,从而更有利于企业未来的发展。解决方案任务/目标采用分类这一方法构建6种模型对职......
  • GETbmpinfo
    /*************************************************/***@filename: GETbmpinfo*@brief实现对BMP图片位图信息的获取*@[email protected]*@date2024/05/11*@version1.0:在下坂本,有何贵干*@property:none*@notenone*CopyRigh......
  • m基于FPGA的MPPT最大功率跟踪算法verilog实现,包含testbench
    1.算法仿真效果其中Vivado2019.2仿真结果如下:   使用matlab进行显示如下:   2.算法涉及理论知识概要       在太阳能光伏系统中,最大功率点跟踪(MaximumPowerPointTracking,MPPT)是提高能量转换效率的关键技术之一。爬山法(HillClimbingAlgorithm,HCA)......
  • FPGA的DDS部分学习
    这边是32个采样点的正弦波信号,通过DAC输出,也就是数模转换出来的。如果每1ms输出一个信号,也就是DAC以1000HZ输出,那么下面这样一个完整的正弦信号需要32个点。也就是32ms所以输出一个完整周期正弦波信号的频率为1000/32HZ(f=1/T,这边完整周期信号的时间周期是32ms,1/32ms就是1000/32H......
  • docker安装海量数据库VastbaseG100
    安装海量数据库VastbaseG100过程较为繁琐,中途容易遇到许多报错,这里提供一个2.2build15版本的docker镜像,可方便安装。默认的license只有3个月有效期,仅供开发学习使用。1.拉取镜像dockerpullthankwhite/vastbase_g100:2.2.152.创建容器dockerrun-d--namevastbase\-p5......
  • FPGA实现Canny算法(Verilog)
    在边缘检测算法里面Sobel是比较简单的一个算法,但是其检测出来的边缘往往是比较粗的,效果不是很好,因为我们最理想的边缘肯定就是一个宽度为1的细线。Canny算法在此基础上进行了改进,通过使用边缘的梯度信息进行非最大值抑制(NMS)和利用双阈值,这些措施消除了假性边缘,提高了边缘检测的......
  • RequestBodyAdvice用法详解-参数加解密示例
     在实际项目中,我们常常需要在请求前后进行一些操作,比如:参数解密/返回结果加密,打印请求参数和返回结果的日志等。这些与业务无关的东西,我们不希望写在controller方法中,造成代码重复可读性变差。这里,我们讲讲使用@ControllerAdvice和RequestBodyAdvice、ResponseBodyAdvice来对请......