1)实验平台:正点原子开拓者FPGA 开发板

2)摘自《开拓者FPGA开发指南》关注官方微信号公众号,获取更多资料:正点原子

3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-13912-1-1.html

第五十四章 基于 OV5640 的数字识别实验

数字是人们日常生活中进行信息交流时不可缺少的信息载体,面对大量的数字如何让机器

识别处理,包括身份证号识别、车牌号识别等就成为了一个研究点,同时,数字识别必然涉及

到图像处理,本章我们通过数字特征识别入手对数字识别有一个基本的了解,以及对数字图像

处理有一个基本的认识。本章包括以下几个部分:

54.1 简介

54.2 实验任务

54.3 硬件设计

54.4 程序设计

54.5 下载验证

简介

数字识别一般通过特征匹配及特征判别的方法来进行处理,前者一般适用于规范化的印刷

体字符识别,现今该技术基本成熟,后者多用于手写字符识别,其研究还处于探索阶段,识别

率还比较低。本章我们通过对印刷体数字识别入手,了解特征匹配识别的应用。

数字特征识别是通过对数字的形状以及结构等几何特征进行分析与统计,通过对数字特征

的匹配从而达到对图像中数字的识别,如下图所示:

图 54.1.1 数字几何特征

x1、x2是水平方向的两条直线,与数字长度成特定比例关系,y是竖直方向的直线,占数

字宽度一半,这三条线与数字的交点可以得到数字的特征值。下面以数字0为例,如下图所示:

图 54.1.2 数字0的几何特征

红框是数字的边界,x1取上下边界的2/5处,x2取上下边界的2/3处,y取左右边界的1/2,

可以看到x1与数字0有两个交点,左右(以y为分界)各一个,x2同样与数字0有两个交点,左

右各一个,y与数字0有两个交点。以此统计数字特征实现识别,如下表所示:

表 54.1.1 数字特征表

实验任务

本章我们在开拓者FPGA开发板上实现数字识别,利用4'3寸RGB屏显示OV5640摄像头捕获到

的数字,并将识别到的数字显示在数码管上。

硬件设计

本次实验用到了OV5640摄像头、SDRAM、4'3寸RGB TFT-LCD模块,我们可以在“OV5640摄

像头RGB TFT-LCD显示实验”的基础上搭建本实验。

程序设计

根据实验任务,我们设计如图 54.4.1所示的系统架构,OV5640摄像头采集到的数据通过

写FIFO模块wrfifo写入SDRAM,然后通过读FIFO模块读出,读出的数据在LCD驱动模块的驱动下

进入vip模块,在vip模块内部图像数据先由rgb2ycbcr模块将RGB转化为YCbCr,然后进行二值

化处理,得到二值图像,对二值图像进行水平垂直投影即图像分割,得到各个数字的水平和垂

直边界,将数字边界信息送入特征识别模块进行特征匹配,从而识别图像中的数字,将识别到

的数字送入数码管驱动模块显示在数码管上。LCD显示器显示处理后的二值化图像和图像的边

界。

图 54.4.1 系统架构

了解了整个处理流程后,我们来看一下底层硬件中各个模块的设计思路。由于除vip模块

之外的模块都在先前的实验中介绍过,这里就不多做介绍。

图 54.4.2 vip模块接口定义

vip模块的输入端除了帧数据使能信号pre_frame_de、帧行同步信号pre_frame_hsync、帧

场同步信号pre_frame_vsync外,还有位置坐标信号xpos和ypos和像素pre_rgb,这些信号由LCD

驱动模块输入。输出除了vip模块处理后的帧数据使能信号post_frame_de、帧行同步信号

post_frame_hsync、帧场同步信号post_frame_vsync外,还有一个识别后的数字信号digit,由于开拓者开发板板载6位数码管,每位数码管用压缩的8421BCD编码显示,总共需要4*6=24位,

即digit信号位宽为24位,该信号输出给数码管驱动模块在数码管上显示识别到的数字

vip模块有五个参数,如下图所示:

图 54.4.3 vip模块的参数

NUM_ROW和NUM_COL分别指需识别的数字的行数和列数,这里我们指定识别1行4列的数字;

H_PIXEL和V_PIXEL是图像的水平和垂直像素大小,因为在4'3寸RGB屏上显示,其分辨率为

480*272;DEPBIT是数据的位宽,主要用于确定数字边界大小的位宽,与水平和垂直像素大小

有关。

vip模块是封装层模块,是对图像处理子模块的顶层封装,其内部模块如下图所示:

图 54.4.4 vip模块的子模块

rgb2ycbcr是RGB转YCbCr模块、binarization是二值化模块、projection是投影分割模块、

digital recognition是特征匹配识别模块。下面我们按照处理的先后顺序依次介绍各模块。

1) rgb2ycbcr 模块

rgb2ycbcr模块实现RGB到YCbCr的转换,模块接口如下图所示:

图 54.4.5 rgb2ycbcr模块接口定义

可以看到输入为rgb565,输出为ycbcr,内部进行rgb565到YCbCr的转换,依据OV5640的官

方手册,转换公式如下:

图 54.4.6 RGB888转YCbCr

需要注意的是这里的RGB为RGB888,所以我们需要将RGB565转换为RGB888。可以采用高位

填充低位的方式,如下图所示:

图 54.4.7 RGB565转RGB888

只所以进行色彩空间的转换,是因为后面我们需要根据亮度信息进二值化处理,而YCbCr

色彩空间的特点是将亮度和色度分离开,从而适合于图像处理。后面我们根据亮度信息Y进行

二值化。

2) binarization 二值化模块

binarization是二值化模块,图像二值化的目的是最大限度的将图象中感兴趣的部分保留

下来,在很多情况下,也是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。

模块接口如下图所示:

图 54.4.8 binarization模块接口定义

根据输入的color转换为相应的二值化图像输出,输出的monoc为像素的二值化后的信息,

1代表白色,0代表黑色,monoc_fall是像素变化的标志信号,即由1变为0。

3) projection 投影分割模块

projection是投影分割模块,实现对二值化后的图像的水平垂直投影,从而实现对图像的

分割。模块接口如下图所示:

图 54.4.9 projection模块接口定义

该 模 块 输 出 投 影 后 得 到 的 边 界 信 息 , row_border_data_rd 是 行 边 界 信 息 ,

col_border_data_rd是列边界信息,这些信息存放在自定义的ram里面,如下图所示:

图 54.4.10 自定义存储边界信息的ram接口

当 外 面 模 块 需 要 读 取 边 界 信 息 时 , 只 需 要 通 过 给 定 地 址 row_border_addr_rd 和

col_border_addr_rd就可得到边界地址信息,需要说明的是对于row_border_addr_rd而言,当

row_border_addr_rd[0]为0时存放的是行上边界信息,为1时存放的是行下边界信息,对于

col_border_addr_rd,当col_border_addr_rd[0]为0时存放的数字的左列边界信息,为1时存

放的是右列边界信息。num_col是采集到的数字列数,num_row是采集到的数字行数,

project_done_flag是投影完成标志,表明可以进行后期处理。

4) digital recognition 特征匹配识别模块

digital recognition是特征匹配识别模块,根据投影分割模块对分割后的单个数字进行

特征匹配识别。模块接口如下图所示:

图 54.4.11 digital recognition模块接口定义

该模块最主要的输出是识别到的数字digit和color_rgb,可以看到这里的digit是16位的,

这是因为我们识别的1行4列的数字,每个数字用压缩的8421BCD编码表示,需要4*4=16位,digit

的位宽是自动匹配的,不需要关心。输出的color_rgb信息显示在RGB显示屏上,为二值化后的

图像和图像中数字的边界。

该模块主要用到我们在简介中介绍到的数字特征,由于获取数字特征的x1和x2是边界的小

数如2/5(0.4)、2/3(0.6667),而Verilog HDL不直接支持小数的使用,所以需要对这些小

数进行处理,FPGA中对于小数的处理通常有三种方法:

方法1:将小数乘某个数(一般为2的指数)得到一个整数,再将乘积除以该整数,一般通

过移位实现除的效果,如0.25,乘以4得到1,乘积右移2位(除以4)即可,我们在RGB转YCbCr

时就用到了此方法;

方法2:将小数进行定点化处理。所谓的定点化就是人为的确定用多少位来表示小数,即

把1多少等分。如果我们用6个位来表示小数,相当于将1分成2^6=64等份,每份为1/64=

0.015625,如果我们想用此表示2/5,只需要知道2/5中有多少个1/64(0.015625),2/5除以

1/64为25.6,约等于26,26用二进制表示为011010,所以2/5即0.4的6位定点化为011010。

方法3:使用IP核。使用软件提供的处理浮点数的IP核或乘除IP核。

识别数字的方法使用的是简介部分的数字特征表,特征匹配的Verilog HDL实现如下:

图 54.4.12 特征匹配

介绍完了vip整个模块,我们还需要对lcd驱动模块进行相应的修改,关键的修改点如下:

图 54.4.13 修改lcd驱动模块

只所以需要修改是因为之前我们使用的是lcd_de信号,现在我们需要使用lcd_hs和lcd_vs

信号。

下载验证

首 先 我 们 打 开 数字识别工 程digital_recognition , 在 工 程 所 在 的 路 径

下 打 开digital_recognition/par文件夹,在里面找到“digital_recognition.qpf”并双击

打开。注意工程所在的路径名只能由字母、数字以及下划线组成,不能出现中文、空格以及特

殊字符等。工程打开后如下图所示:

图 54.5.1 数字识别实验工程

将下载器一端连电脑,另一端与开发板上对应端口连接,接上OV5640和4.3寸RGB显示屏后,

连接电源线并打开电源开关。接下来我们下载程序,验证数字识别功能。

工程打开后通过点击工具栏中的“Programmer”图标打开下载界面,通过“Add File”按

钮选择digital_recognition /par/output_files目录下的“digital_recognition.sof”文件。

在程序下载界面点击“Hardware Setup”,在弹出的对话框中选择当前的硬件连接为“USB

Blaster[USB-0]”。然后点击“Start”将工程编译完成后得到的sof文件下载到开发板中,如

图所示:

图 54.5.2 程序下载完成界面

下载完成后,我们将下图中的数字图片合适的放在OV5640摄像头前面。

图 54.5.3 需识别的数字

从下图实验结果中我们可以看到RGB显示屏上显示出捕获到的数字,并框出数字的边界,

数码管显示2345。

图 54.5.4 实验结果

至此,我们的数字识别实验就完成了。

fpga驱动rgb液晶屏_正点原子开拓者FPGA开发板资料连载第五十四章基于的数字识别实验...相关推荐

  1. stm32 文件系统dma大小_「正点原子NANO STM32F103开发板资料连载」第二十二章 DMA 实验...

    1)实验平台:[正点原子] NANO STM32F103 开发板 2)摘自<正点原子STM32 F1 开发指南(NANO 板-HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 ...

  2. 判断按键值_「正点原子NANO STM32开发板资料连载」第十六章电容触摸按键实验...

    1)实验平台:ALIENTEK NANO STM32F411 V1开发板2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第十六章电容 ...

  3. 实验5-9 使用函数输出水仙花数_正点原子STM32F407探索者开发板资料连载第五十三章 手写识别实验

    1)实验平台:alientek 阿波罗 STM32F767 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第五十三章 手写识别实 ...

  4. stm32f407 spi3 mosi没有输出_正点原子STM32F407探索者开发板资料连载第56章 USB 读卡器实验

    1)实验平台:alientek 阿波罗 STM32F767 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第五十六章 USB 读 ...

  5. stm32 ucosii消息队列 串口_正点原子STM32F407探索者开发板资料连载第六十三章 UCOSII 实验...

    1)实验平台:alientek 阿波罗 STM32F767 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 http://weix ...

  6. dev c++怎么调试_「正点原子NANO STM32开发板资料连载」第十八章 USMART 调试组件...

    1)实验平台:ALIENTEK NANO STM32F411 V1开发板2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第十八章 U ...

  7. 【正点原子探索者STM32F407开发板例程连载+教学】第43章 sd卡实验-SDIO

    第四十三章  SD卡实验         1.硬件平台:正点原子探索者STM32F407开发板  2.软件平台:MDK5.1  3.固件库版本:V1.4.0  很多单片机系统都需要大容量存储设备,以存 ...

  8. 看门狗寄存器c语言代码_「正点原子NANO STM32F103开发板资料连载」第十一章 看门狗实验...

    1)实验平台:[正点原子] NANO STM32F103 开发板 2)摘自<正点原子STM32 F1 开发指南(NANO 板-HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 ...

  9. stm32看门狗_「正点原子NANO STM32开发板资料连载」第十一章 独立看门狗实验

    1)实验平台:ALIENTEK NANO STM32F411 V1开发板2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第十一章 独 ...

最新文章

  1. maven项目中,如何导出项目所有的jar
  2. 当程序员有了程序员女友后...... | 每日趣闻
  3. Go语言中的Struct
  4. BoBo接入云信,直播互动“连麦抢麦”分分钟搞定
  5. JVM实用参数(七)CMS收集器
  6. centos7配置Docker镜像加速器
  7. excel导入到mysql
  8. [NFrog]工具(NHibernate)终于成形了
  9. 程序员“不会”修电脑的原因
  10. 51nod 博弈论水题
  11. C语言编写的算数小游戏(附源码)
  12. 有关微博营销的社交营销打法
  13. Mac环境下使用XMAPP 安装testlink
  14. 富邦速配民营银行管理层动荡浪潮之下,振兴银行再迎新帅
  15. 用svm预测信用卡诈骗
  16. Java数据结构与算法
  17. 混乱是怎样炼成的——《C解毒》试读
  18. 为什么叫vanilla neural network?
  19. 网上期货开户合约签署流程
  20. 就这样,我走完了程序员的前五年,共勉!

热门文章

  1. 我是越来越喜欢做产品了
  2. Javascript中闭包的作用域链
  3. linux 常用命令集
  4. 浅析堡垒机概念及工作原理(转)
  5. 编译linux3内核,与busybox,用qemu模拟运行
  6. .net安装部署中添加卸载程序简单方法
  7. 第一次有人把“分布式事务”讲的这么简单明了
  8. Kingbase金仓查看和剔除连接
  9. 初探HTML5的本地存储
  10. Struts 2(一):初识Struts