闲庭信步使用图像验证平台加速FPGA的开发:第三十三课——车牌识别的FPGA实现(5)车牌字符的识别

(本系列只需要modelsim即可完成数字图像的处理,每个工程都搭建了全自动化的仿真环境,只需要双击top_tb.bat文件就可以完成整个的仿真,大大降低了初学者的门槛!!!!如需要该系列的工程文件请关注知识星球: 成工fpga, https://t.zsxq.com/DMeqH,关注即送200GB学习资料,链接已置顶!)

前面四堂课最终完成了车牌字符的分割,也就是能够定位每个字符的位置,这样的话,就可以对这些字符进行识别的,字符的识别需要两个模块,一个是字符特征值的提取,一个是通过卷积完成模版的匹配

对于字符特征的提取,我们用处理后的图片进行说明,就是我们有了车牌中每个字符的位置信息,就可以对每个字符进一步的分割,本例分割成8行5列共40个网格,再对每个网格中的像素点进行统计,根据设定的阈值让每个网格取0或者取1,每个字符就能得到5x8=40个网格的统计值,这些值放在二维数组里面,这个数组存储的值就是字符的特征值。由于有8个字符要提取特征值,最后把所有字符的特征值放在一个数组里面,那就是5x8x8的三维数组

在\src\char_recognization文件夹下新建char_feature_extraction.sv文件,首先确定每个字符的左右边界,每个字符的宽度和高度,每个字符分割成5x8个网格每个网格的高度和宽度

其中计算div_width和div_height时,用到一个求余数的function,实现方式如下,有了余数,就可以对网格精确的细分。

其中求每个网格高度的位置信息可以直接使用除法计算,如下图注释掉的代码;如果要避免除法的运算,可以根据网格高度的信息用加法来进行判断。

同理为了获取每个网格宽度的位置信息,也可以直接用除法进行计算,注意这儿使用的是generate,就是8个模块同时运行,也就是要使用8个除法器,如下注释的部分。当然也可以避免使用除法器,直接根据每个网格的宽度信息通过加减来进行判断。

然后就是对每个网格中像素值为1的点进行统计,分别存放到数组对应的位置。

当完成车牌字符所有网格的统计后(在char_bottom + 1的那一行),对数组的进行0/1归一化,这儿用的方法很简单,就是如果网格中为1的像素点超过1/2,判定这个网格的特征值是1,否则是0,当然这个1/2的值是可以变动的,比3/5。至此,车牌中所有字符的特征值都统计完成

完成了车牌字符的特征值统计,下一步就要将新统计的特征值和事先准备好的模版进行匹配。在\src\char_recognization文件夹下新建char_template_matching.sv文件,在这个文件中,有事先设定好的字母,数组和汉字字符的模块,这些都是大磊老师他们提供的,我们可以直接拿过来用。

如下就是一些模版。

特征值的比对思路比较简单,就是数字和字母的字符分别和34个CHAR的模版进行比对并分别进行打分,每次比较完毕后如果得分高于上一次比对的得分就更新得分值,并更新得分最高模版的标号;34个模块比对完毕后就可以得到得分最高的那个模版,也就是匹配的结果。汉字匹配的思路也是完全一样的 。如下主要是通过状态机完成模版的比对,MATCH_JUDGE状态用来判断是CHAR的比对还是CHINESE的比对;CHINESE_MATCH状态进行汉字的比对,CHAR_MATCH状态进行数字和字母的比对;MATCHING状态下完成每个字符和一个模版的一次比对;SCORE状态下完成每次比对得分的更新和得分最高模版编号的记录。INDEX状态控制完成8个字符的比对。分析下来大家可以看出来,模版的比对是非常花时间的。

如下主要实现中文模版比对的相关控制。

如下主要实现字母和数字模版比对的相关控制。

使用plate_char_cnt信号控制8个字符分别和相应的模版进行比对。

如下实现每个字符的5x8次比对。

如下实现每个模版匹配完毕后最高分的更新和最高分对应模版编号的更新。

如下主要实现每个要匹配的字符和每次要匹配的模块分别放到compare_char和compare_temp数组中。

最后输出8个字符分别对应的模块编号

\src\char_recognization文件夹下的char_recognization.sv文件完成对char_feature_extraction和char_template_matching模块的例化。

在\src\char_recognization文件夹下新建char_recg_out.sv文件,用来将划分的网格信号在图片中显示出来。首先获取每个字符的区域信息。

通过计算获取每个网格的信息,因为这个文件主要用于显示,不是工程必须得文件,所以这儿时间使用了除法。

在top文件夹下例化了plate_location,location_out,char_segmentation,char_sgm_out,char_recognization,char_recg_out等模块。

在tb_image_sim文件的initial块中,完成相应图片的保存。

双击sim文件夹下的top_tb.bat文件,完成系统的自动化仿真。

完成三幅图像的处理和保存,处理时间较长,modelsim的Transcript有如下的打印信息。

最后我们打开img/output文件夹,就可以看到相关的图片。

相关推荐
智商网输送线配件4 小时前
2026 自动化流水线配件采购难题破解:小批量混批与非标定制的供应链实测
大数据·人工智能·自动化·智商网·流水线设备配件
iPad协议个微协议5 小时前
微信自动回复从关键词到 AI:WechatApi 如何连接消息、模型和人工
微信·自动化·微信开发·wechatapi·个人微信号二次开发
liulilittle6 小时前
mock 规范总纲
ai·自动化·llm·mock·测试·tools
liulilittle8 小时前
麻将结算全链路语义(SETTLE_SEMANTICS)
ai·自动化·llm·mock·lua·测试
jingli98 小时前
恶意退款怎么办、仅退款怎么申诉:六类恶意退款识别特征+取证证据链+反制全流程(商家实操版)
人工智能·自动化·用户运营
苍苍竹林寺9 小时前
Module Builder——Gem200之Alarm模块
自动化·半导体·eap
jingli99 小时前
微信自动回复怎么设置?重复问题怎么自动回答——私域FAQ自动应答搭建全流程(关键词匹配+知识库+语义AI,2026实操版)
人工智能·自动化·用户运营
微信ipad协议开发9 小时前
教培机构微信自动化:从招生引流到社群运维的完整链路
微信·机器人·自动化·教育电商
liulilittle10 小时前
麻将服务器崩溃补偿与异常处理语义(CRASH_SEMANTICS)
ai·自动化·llm·mock·lua·测试·tools
NailiConveyor10 小时前
输送线方案设计的工程基础|布局与接口的技术考量|控制系统架构要点
大数据·自动化·制造·业界资讯