FPGA驱动摄像头实现人脸识别(基于肤色)

FPGA驱动摄像头实现人脸识别(基于肤色)

验证平台:黑金AX309 OV5640
时至今日图像处理已经得到了广泛应用,今天我们来讲一讲利用FPGA结合摄像头来实现一个简单的人脸识别(当然误检率很高,因为是基于肤色的,颜色相近就会被检测)。
话不多说咱们先来简单的分析一下整个检测的流程。咱们是采用VGA进行最终的识别结果显示,也就是画框。摄像头驱动部分就不在多说。流程如下。

RGB数据
转YCBCR
二值化
滤波
识别区域
画框
VGA显示

①:RGB数据转换为TCBCR
公式如下:
Y’ = 0.257R’ + 0.504G’ + 0.098*B’ + 16

Cb’ = -0.148R’ - 0.291G’ + 0.439*B’ + 128

Cr’ = 0.439R’ - 0.368G’ - 0.071*B’ + 128

当然FPGA处理整形数据较为容易:
所以我们可以将数据整日左移八位,在进行计算,最后在右移回去即可。
②:二值化
所谓二值化,就是讲整个图像转化为黑白图,当然,为了提取到人脸数据,我们需要将人脸部分显示为白色,其余部分为黑色,这就要我们设置一个阈值(关于如何提取到肤色的值,我们可以利用PS去提取RGB数据,在通过计算即可),在这里我们设置的阈值为
77 < Cb < 127 133 < Cr < 173
当然可以根据实际需要进行计算修改
才阈值范围内的RGB赋值为FFFF,否则为0,这样就把二值化了,且提取出来了我们希望识别的像素。
在这里插入图片描述

③:滤波
二值化后的图形进行显示的时候,我们会发现,出去我们的肤色部分外,还有许多位置一直在变动的白色的点,这些就是摄像头采集过程中,环境中的噪声干扰的结果。这些小点会干扰到我们的识别,所以我们要设计一定的算法进行滤波。常用的就是 腐蚀 -> 膨胀。当然我们也可以设计一种类似于“四舍五入”的方法,将少数次出现的点滤除掉即可,这样滤波的结果虽然不是很好,但也可以满足我们的需要。
④:识别区域
接下来我们就要开始检测我们的人脸区域了,前面我们已将人脸部分的像素进行了二值化处理,所以我们只需要锁定白色点坐标XY方向的最值就可以。
当然为了减少波动,我们可以采取隔帧计算的方法,以减少区域的不稳定,也可以避免由于延时导致的黑屏问题。
⑤:画框
得到了坐标之后,我们只需要将VGA显示部分的数据,进行略微更改,即当行场扫描到达我们的最值坐标后,更改RGB的值(例如11111_000000_00000红色),就可以吧我们的面部圈出来了。
在这里插入图片描述

当然这只是一个大致的过程,有哪里不懂的话可以评论区留言,源码评论区2021.10.31更新源码,评论区自取

FPGA摄像头获取数据的过程如下:首先,摄像头通过初始化设置进行配置。然后,FPGA摄像头获取一帧一帧的图像数据,并将ov7670数据流转换成所需的RGB565数据流。接下来,数据被存入写FIFO模块。当写FIFO模块中存储的数据达到一定数量(例如8)时,发出SDRAM写请求。一旦SDRAM写请求通过,数据将被读取并存储起来。同时,读FIFO模块会读取SDRAM中的数据,并经过读FIFO缓存后送入VGA显示模块进行显示。写控制模块和读控制模块会控制SDRAM读写地址的增加,以实现数据的连续读写。\[1\] #### 引用[.reference_title] - *1* *3* [基于FPGA的OV7670摄像头实时检测](https://blog.csdn.net/mxh3600/article/details/126733682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [FPGA之OV7725摄像头采集与VGA显示实验--4--摄像头数据输出VAG协议分析](https://blog.csdn.net/weixin_54358182/article/details/126681942)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蛋蛋壳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值