基于FPGA的车牌识别

news/2024/11/17 16:36:19/

基于FPGA进行车牌识别

  • 基于FPGA进行车牌识别
    • 1. 文件说明
    • 2. 程序移植说明
    • 3. 小小的编程感想

本项目的原理讲解视频已经上传到B站“基于FPGA进行车牌识别”。
本项目全部开源,见我本人的Github仓库“License-Plate-Recognition-FPGA”。


1. 文件说明

小技巧:下载整个Github文件夹:http://tool.mkblog.cn/downgit/#/home

1. 工程及源代码

里面包含了大磊FPGA的源代码,以及我自己的源代码。

其中,大磊FPGA的源代码包括一些的数字图像处理的模块。我自己的源代码则直接将Vivado 2022.1工程“ov5640_fun4_lcd_up3”放了上去,同时将工程中的比特流源代码及硬件约束文件单独拿了出来,需要的同学可以快速查看。

2. 软件处理

里面包括整个开发过程所用到的图片库,以及我自己写的MATLAB仿真源代码。这些汽车图片都是我在校园里拍的。

3. 基于FPGA的车牌识别.pdf

就是我在B站演示的PPT,需要自取。

4. 图库

本markdown文档中用到的图片,大家基本用不到所以不用看。

2. 程序移植说明

本人在开发时使用到的硬件:

  • FPGA开发工具:Vivado 2022.1。
  • 开发板:正点原子达芬奇PRO。
  • 摄像头:正点原子OV5640。
  • LCD显示屏:正点原子800*480显示屏。

首先,如果使用的硬件和本人一样,那么就可以直接打开Vivado下载比特流(开源文件夹中“工程及源代码\我自己的工程备份\比特流备份\ov5640_fun4_lcd.bit”),就可以看到我在视频中所演示的现象。

若配件不一样,或者使用其他版本的Vivado或者Altera那边的Quartus,可能打不开这个工程,就需要工程迁移。但好在本项目几乎用的都是纯Verilog,以及一些常见的IP核(clk、BRAM、FIFO、MIG),所以我直接将所有的源代码和约束文件都提取出来放在了“.\工程及源代码\我自己的工程备份\源代码及约束文件”,并且我下面将给出各个IP核的配置界面,以供大家参考。

1-1 时钟模块-clk_wiz_0配置
1-2 DDR3模块-mig_7series_0配置
  • 第一页默认。
  • 第三页默认。
  • 第四页选DDR3。
  • 第八页默认。
  • 第九页:Fixed Pin Out.
  • 第十页:选择“Read XDC/UDF”,然后选取工程文件夹中的“ddr3_xdc.ucf”,再点击“Validate”即可。
  • 第十一页及之后就按照默认选项“同意”即可。
1-3 DDR3模块-rd_fifo配置
  • DDR3模块-wr_fifo配置:与rd_fifo一样,只不过名称不一样。
1-4 数字图像处理模块-blk_mem_gen_0配置
1-5 Sobel边缘检测模块-cordic配置
1-6 水平投影模块-projection_ram配置

3. 小小的编程感想

  1. 摄像头的信号。开发新的模块时,注意场同步信号vsync是低电平有效,而行同步信号href和行有效信号clken都是高电平有效。并且clken和href左对齐,且clken每两个时钟周期才有效一次(这是因为摄像头一次只能传输8bit数据,但是一个像素的数据为RGB565共16bit)。
  2. 卡了很久的bug:上电后画面总是停留在第一帧,然后就不动了。原来是没有给模块输入正常的时钟信号…
  3. 奇怪的硬件bug:上电后工作完全正常,但是过个两三分钟画面就会卡住不动了。最后我也不知道咋回事,打算第二天再看,结果第二天这个问题就突然好了。😂

http://www.ppmy.cn/news/76450.html

相关文章

CTPN论文翻译与思考

CTPN: Detecting Text in Natural Image with Connectionist Text Proposal Network 文章目录 CTPN: Detecting Text in Natural Image with Connectionist Text Proposal Network摘要关键词1. 引言1.1 贡献 2. 相关工作3. 连接文本提议网络3.1 在细粒度提议中检测文本3.2 循环…

TwinCAT ENI 数据详解

使用倍福TwinCAT工具可以生成ENI,先对ENI的cyclic frame数据进行解释说明 需要提前了解EtherCAT报文格式,可参考下面文章 EtherCAT报文格式详解_ethercat listtype 1_EtherCat技术研究的博客-CSDN博客https://blog.csdn.net/gufuguang/article/details/…

shell 数组遍历的3种方法

shell数组的基本知识请参阅我的上一篇博客shell 数组 首先创建一个数组 array( A B C D 1 2 3 4) 1.标准的for循环 for(( i0;i<${#array[]};i)) do #${#array[]}获取数组长度用于循环 echo ${array[i]}; done; 2.for … in 遍历&#xff08;不带数组下标&#xff09;&…

【环境安装】Linux环境中docker安装redis

一、找到一个合适的docker的redis的版本 可以去docker hub中去找一下 https://link.juejin.cn/?targethttps%3A%2F%2Fhub.docker.com%2F_%2Fredis%3Ftab%3Dtags 二、使用docker安装redis 我这里安装了具体的某个版本 docker pull redis // 下载最新版Redis镜像 (等同于 : d…

JavaWeb15 - 线程数据共享和安全 -ThreadLocal

1. 什么是 ThreadLocal ThreadLocal 的作用&#xff0c;可以实现在同一个线程数据共享, 从而解决多线程数据安全问题.ThreadLocal 可以给当前线程关联一个数据(普通变量、对象、数组)set 方法 [源码!]ThreadLocal 可以像 Map 一样存取数据&#xff0c;key 为当前线程, get 方法…

WIN提权补丁提权,at,sc,psexes提权

win提权分为web和本地提权 web提权就是getshell后&#xff0c;权限是网站权限&#xff0c;要进行提权 本地提权是本地用户进行提权 本地用户的权限大于网站权限&#xff0c;所以本地提权成功概率比web提权概率大 因为我们做渗透测试&#xff0c;一般都是从网站入侵。所以大…

码蹄杯语言基础:基本输入输出(C语言)

​ 码蹄集网站地址&#xff1a;https://www.matiji.net/exam/ojquestionlist ⭐MT1001程序设计入门 欢迎来到程序设计的世界&#xff0c;请编写一个简单程序&#xff0c;输出2行字符&#xff0c;第一行为“This is my first program!”&#xff0c;第二行为“Coding is fun!”…

敏捷项目管理阶段框架-适应、结束阶段实践

适应阶段实践 通过持续的反馈和适应以调整项目&#xff0c;交付价值 迭代评审会议、迭代回顾会议 展示评审、技术评审、速度、燃尽图 展示与评审 团队完成特定功能时&#xff0c;团队定期展示工作产品&#xff0c;展示后&#xff0c;PO接受或拒绝故事 迭代结束时展示频繁交付…