FPGA 开源工作室
基于 FPGA 的数字识别的实现二
作者:OpenS_Lee
1 背景知识
1.1 基于 FPGA 的数字识别的方法
通常,针对印刷体数字识别使用的算法有:基于模版匹配的识别方法、基于 BP 神
经网络的识别方法、基于数字特征的识别方法等。下文将对这几种算法进行讨论以及比较。
1>模版匹配法
模版匹配法是一种被较早应用的数字识别算法,该算法的关键是对所要识别
的所有数字进行模版构建,之后将图像中的数字与所有的数字模版一一进行比较,
计算出图像中数字与每个模版的相似度,根据所计算出的相似度结果进行识别。
其中相似度最高的模版即为我们所要识别的结果。模版匹配法的对数字的大小、
结构形状的规范化程度要求很高,数字的规范化程度对识别的准确率有着直接的
影响。该算法原理较为简单,但计算复杂度过大,同时不利于 FPGA 的实现。
2>神经网络识别算法
神经网络识别的方法是模仿动物神经网络的特征,对信息进行分布式并行处
理的一种算法。神经网络识别算法具有一定的抗干扰能力,但为了保证识别的准
确率,该算法需要负责并且大量的计算,来对神经网络进行训练,而过于复杂的
计算不利于 FPGA 对该算法的实现。
3>数字特征识别算法
基于数字特征的识别算法其核心是通过对数字的形状以及结构等几何特征
进行分析与统计,通过对数字特征的识别从而达到对图像中数字的识别。
1.2 基于数字特征算法实现数字识别
我们采用基于数字特征的算法进行数字的识别,通过图像采集模块采集到图像,进行灰
度化,二值化,然后进行数字特征的提取和统计来完成对数字的识别,最终显示到数码管上,
完成图像信息到数字信息的转化。
图 1 0-6 数字特征标线
FPGA 开源工作室
图 2 7-8 数字特征标线
图 3 5 数字特征
数字特征信息的提取基于打印体,如上图 1,图 2,图 3 所示,以图 3 数字 5 举例,红框
是数字 5 的水平和竖直的上下左右边界。X1 在竖直方向的 2/5 处的水平线,x2 在竖直方向
的 2/3 处的水平线,y 在水平方的 1/2 处的水直线。我们以此特征来统计 x1,x2,y 与数字 5
的交叉点。
以交叉统计法来区分 0-9 数字的特征如下表 1:
FPGA 开源工作室
表 1
0-9 数字特征统计表
数字
与 y 交叉点个数 与 x1 交 叉 点 个
与 x2 交 叉 点 个
分类
数
数
0
1
2
3
4
5
6
7
8
9
2
1
3
3
2
3
3
2
3
3
2
1
1
1
2
1
1
1
2
2
2
1
1
1
1
1
2
1
2
1
A
B
C
C
D
C
E
F
G
H
由于 2,3,5 的数字特征统计表一样,无法区分所以我们继续增加数字特征以区分 2,3,5。
如表 2:
数字
2
3
5
表 2
2,3,5 数字特征统计
与 x1 的交叉点位置
与 x2 的交叉点位置
(左,右)
(左,右)
右
右
左
左
右
右
分类
I(C)
J(C)
K(C)
这样通过数字统计完全区分开数字 0-9。然后利用 FPGA 系统搭建实时数字识别系统。
如图 1 所示,交通摄像头对公路上移动的汽车进行实时的定位,随着小汽车的移动,
FPGA 开源工作室
红色框也跟随小汽车移动,实时将小汽车框起来。
1.3 目标跟踪方法
基于实时物体移动的静态图像背景中移动目标检测是计算机视觉领域的研究热点,在安
防、监控、智能交通、机器智慧、以及军事领域等社会生活和军事防御等诸多领域都有较大
的实用价值。移动目标检测的实质是从实时图像序列中将图像的变化区域从整体图像中分割
提取出来。由于图像的后期处理,比如移动目标的分类、跟踪、测距、判断大小以及行为动
作分析等,主要考虑的是移动目标区域的像素信息,所以对移动目标的准确检测和有效分割
是整个检测跟踪系统的重要基础。
目前逐渐形成三种运动目标的检测算法:
图 4 公路上的运动汽车
1)帧间差分法 是采用视频序列中的相邻两帧图像做差的方法,来检测视频序列中
的移动目标。但是受运动目标和背景变化的影响,检测过程中有可能出现伪目标或者目标中
出现“空洞”,在目标运动不是太快时可以有效的检测到目标。
2)背景减除法首先在没有目标的场景中获取背景图像,然后利用实时视频序列和背
景图像做差,来实现地移动目标的检测。如何获得背景是背景减除法的关键。
3)光流法是通过给图像中每个像素点赋予一个速度矢量的方法建立光流场,利用光
流场中矢量运动的连续性来检测移动目标。该方法的计算量通常很大,难以实现实时性的检
测。
本节将基于 FPGA 的目标跟踪以及统计学的特征统计来实现对数字的位置实时定位以
及数字识别,不在局限于数字在屏幕中的位置,也不局限数字的大小。
2 基于 FPGA 的数字识别的实现
FPGA 开源工作室
图 5 基于 ov5640 的 FPGA 实时数字识别系统
如图 5 所示,我们图像采集使用 ov5640 cmos 500W 像素摄像头,将采集到的彩色
RGB 图像首先存入 SDRAM 中,然后由 TFT 显示控制端读出图像数据,读出 RGB 图像数
据后,我们首先进行 RGB 转 Ycbcr 算法操作,然后对灰度图像进行阈值分割,形成二值图
像,对二值数字图像进行边界追踪的基础上进行数字识别,最终将边界显示在 TFT5 寸屏幕
上,将识别的数字信息显示在数码管上。
图 6 边界追踪数字识别的三大主要核心模块
如图 6 所示,以 TFT 屏的显示时序为基准,首先进行边界追踪,识别数字边界后,我
们在边界的基础上进行统计特征的数字识别。
FPGA 开源工作室
图 7 边界追踪模块
如图 7 所示,hcount 为列计数器,vcount 为行计数器,TFT_VS_fall 和 TFT_VS_rise
分别是帧下降沿标志和帧上升沿标志,frame_cnt 为帧计数器,hcount_l 和 hcount_r 分别是
识别后数字的左右边界,vcount_l 和 vcount_r 分别是数字的上下边界。Th_flag_fall 和
th_flag_rise 分别是灰度图像阈值后的下降沿和上升沿标志。
FPGA 开源工作室
图 8 数字识别模块
如图 8 所示基本的边界信息均来自数字边界识别模块,数字识别模块主要的到数字统
计学的两横一竖(x1,x2,y)与数字的交点信息,以及其他补充信息。
主要代码解释:
Top 层:
FPGA 开源工作室