本帖最后由 Even 于 2025-3-18 17:49 编辑
致谢 特此感谢B站大磊FPGA的多目标帧差法视频,这是我写出这个作品的基础;我的老师刘宁,他给了我最初的灵感;我的队友hqy和zcy,他们是这个项目团队不可缺少的一环;CrazyBingo对于FPGA图像处理的贡献,我参考的很多代码都有他的影子。
前言 本人为南邮大三电科学生,技术有限,能获此殊荣噱头占比更多,算是用简单的逻辑实现了比较花哨的效果。不过FPGA代码都是我一行行敲出来的,除摄像头HDMI输出demo外未用IP核,除大磊FPGA多目标帧差外未参考其他代码。项目完成后成就感还是相当足的。这将近两个月的时间FPGA图像处理方面的编程思维开阔了不少,期望以后能更进一步。作品部分演示效果已在B站发布视频,期待一键三连加关注(づ ̄3 ̄)づ╭❤️~ 一、硬件基础(仅本项目使用,非必须)易灵思Ti60F100,红外补光灯,VS-SC130GS(特制装载红外窄带滤波片摄像头),云台,眼球模型(开源项目),及部分3D打印支架等杂项。
二、系统框图及基本说明
上图为设计主要模块或功能,本篇文章仅解释说明本人编写的关键模块。
不同的厂家对摄像头基本上都会提供历程,也就是读写视频流这一步最终输出行、场同步,像素时钟,de,以及数据信号(需注意代码中行、场同步信号等是高有效还是低有效),这是基础不过多赘述,小白可看正点原子RGB-LCD彩条显示实验。
该项目通过红外窄带滤波摄像头的得到的图像受自然光,灯光等外界干扰小,基本取决于人为的红外补光灯。由此,眼部因暗瞳效应产生的光斑极为明显,再通过一定的图像处理手段,可通过光斑定位深色瞳孔,从而捕获眼动方向。基本如下:
可控阈值二值化:对采集到的像素进行可控阈值二值化处理,以突出瞳孔等反射的亮斑。
多目标追踪定位:运用多目标追踪算法,定位并筛选出两个瞳孔亮斑的位置。
深色瞳孔提取:在瞳孔亮斑的一定相对位置处提取深色瞳孔,并进行目标追踪。
瞳孔坐标计算:得到瞳孔的坐标后,实时与参考点(眨眼或外部设定)对比,计算出眼球的方向。
实时画框叠加:FPGA 将获取到的相关坐标信息实时画框叠加到原始视频流中,通过 HDMI接口输出实时的视频流。
三、主体模块说明
1.binarization首先通过二值化,当亮度超过人为设定阈值之后将monoc拉高,作为信号触发目标追踪模块处理:
- module binarization
- (
- input clk ,
- input rst_n ,
- input ycbcr_vs ,
- input ycbcr_hs ,
- input ycbcr_de ,
- input [7:0] luminance , //pixel_data
- output reg post_vs ,
- output reg post_hs ,
- output reg post_de ,
- output reg monoc // monochrome(1=white,0=black)
- );
-
- reg ycbcr_vs_d;
- reg ycbcr_hs_d;
- reg ycbcr_de_d;
-
- wire [7:0] try = 8'd220; //threshold
-
- //binarization
- always @(posedge clk or negedge rst_n) begin
- if(!rst_n)
- monoc <= 1'b0;
- else if(ycbcr_vs)begin
- if (luminance > try) //threshold
- monoc <= 1'b1;
- else
- monoc <= 1'b0;
- end
- else
- monoc <= 1'b0;
- end
-
- //lag 1 clocks signal sync
- always@(posedge clk or negedge rst_n) begin
- if(!rst_n) begin
- post_vs <= 1'd0;
- post_hs <= 1'd0;
- post_de <= 1'd0;
- end
- else begin
- post_vs <= ycbcr_vs;
- post_hs <= ycbcr_hs;
- post_de <= ycbcr_de;
- end
- end
-
- endmodule
复制代码
字数超了,见下一楼
|