找回密码
 立即注册
查看: 336|回复: 1

2024嵌入式FPGA竞赛国特-最佳创意奖-红外瞳孔追踪系统(教学向)

[复制链接]

2

主题

13

回帖

84

积分

少年

积分
84
发表于 2025-3-18 17:47:38 | 显示全部楼层 |阅读模式
本帖最后由 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拉高,作为信号触发目标追踪模块处理:


  1. module binarization
  2. (
  3.     input               clk          ,  
  4.     input               rst_n        ,   
  5.     input               ycbcr_vs     ,   
  6.     input               ycbcr_hs     ,   
  7.     input               ycbcr_de     ,   
  8.     input   [7:0]       luminance    ,      //pixel_data
  9.     output   reg        post_vs      ,   
  10.     output   reg        post_hs      ,  
  11.     output   reg        post_de      ,   
  12.     output   reg        monoc               // monochrome(1=white,0=black)
  13. );

  14. reg    ycbcr_vs_d;
  15. reg    ycbcr_hs_d;
  16. reg    ycbcr_de_d;

  17. wire  [7:0] try = 8'd220;     //threshold

  18. //binarization
  19. always @(posedge clk or negedge rst_n) begin
  20.     if(!rst_n)
  21.         monoc <= 1'b0;
  22.     else if(ycbcr_vs)begin   
  23.                 if (luminance > try)  //threshold
  24.                         monoc <= 1'b1;
  25.                 else
  26.                         monoc <= 1'b0;
  27.         end               
  28.     else
  29.         monoc <= 1'b0;
  30. end

  31. //lag 1 clocks signal sync
  32. always@(posedge clk or negedge rst_n) begin
  33.     if(!rst_n) begin
  34.         post_vs <= 1'd0;
  35.         post_hs <= 1'd0;
  36.         post_de <= 1'd0;
  37.     end
  38.     else begin
  39.         post_vs <= ycbcr_vs;
  40.         post_hs <= ycbcr_hs;
  41.         post_de <= ycbcr_de;
  42.     end
  43. end

  44. endmodule
复制代码

字数超了,见下一楼


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

0

主题

11

回帖

51

积分

少年

积分
51
发表于 2025-3-21 18:38:11 | 显示全部楼层
期待大佬的下一个作品
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|CrazyFPGA ( 粤ICP备2023025753号 )

GMT+8, 2025-5-2 23:31 , Processed in 0.049964 second(s), 21 queries .

Powered by CrazyFPGA X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表