Labview OCR数字识别
::: keywords
labview,OCR,灰度,对比度,数字识别
:::
下载文件
前言
OCR (Optical Character
Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。
本文基于labview设计了一个学号识别系统,可以识别学生卡上学号并保存在文件中,同时也可以识别身份证号、名片电话等。
该系统包含图像获取、图像处理、数据输出,是一个综合性的设计,作为学习labview的阶段性练习。
运行环境
本系统运行在labview2020或2018环境,需要安装labview的视觉组件。
LabVIEW软件
Vision Development
Module(视觉开发模块)NI Vision Acquisition
Software(视觉采集软件)
安装过程
设计原理
图像格式
彩色图像:由RGB三原色数值排列表示一个像素,有RGB888(24位)和RGB565(16位)等格式。其中,24位全彩色图像中的每个像素占据3个byte的空间,分别表示RGB3个通道,总共可以显示2563256^32563种颜色
灰度图:由灰度信息表示一个像素(8位,0-255:0表示最暗色,255表示最亮色),每个像素存放在一个byte空间
二值图像:由二值信息表示一个像素,每个下昂苏存放在一个bit空间
OCR数字识别
OCR(光学字符识别)是指机器自动从图像中识别文本字符的过程,是目标分类和识别的一种应用,包括训练与分类过程,可用于对被测件的识别和分类。
OCR训练过程主要从图像中提取用于字符识别的特征向量,并对各字符图像赋予准确的字符值。具有相同字符值的字符样本图像构成一个字符类,该类可以用其中一个最能代表该类字符的样本图像来代表,称为参考字符。字符训练完成后,就可得到一个用于对字符进行识别的字符集。
OCR对图像中的文本进行读取时,会先将图像中的各个字符图像分割开来,并将字符的特征向量与字符集中保存的特征向量进行对比,选取满足条件的最佳匹配向量所对应的字符值作为读取识别结果。若有必要,也可以通过字符验证过程对OCR的识别质量进行验证。
常见的OCR识别应用包括:药品包装标签识别、IC芯片编码读取、冲压零件上的字符识别、汽车零件编码读取以及车牌识别等。
利用Labview的Vision模块的OCR组件可以实现从训练到识别的过程。
图像处理
机器视觉系统开发过程中常见的特征包括像素灰度、边缘、轮廓和形状、纹理、角点、色彩以及各种与图像颗粒相关的属性等。
本文进行OCR识别的对象为学生卡或其他证件,一般有明显的数字特征,字体之间有明确间隔,字体背景为浅颜色,故获取彩色图像后,需要对其灰度化、增强亮度和对比度处理。这些函数都可以在labview的vision组件中找到
文件存储
利用labview的文件I/O组件可以实现将字符串换行写入txt文件中,实现OCR识别结果的存储。
程序设计
程序流程
程序步骤
相机获取
利用IMAQdx Open Camera
VI开启摄像头,查询相机功能,加载相机配置文件,输入摄像头名称(cam0为笔记本自带摄像头),输出相机引用。利用IMAQ Create VI为图像创建临时内存位置。
摄像头引用节点输入IMAQdx Configure Grab
VI,配置并从缓冲区抓取图像。创建while循环,将图像和引用输入IMAQdx Grab2
VI,输出最新的帧获取到Image Out,并通过Image显示。
图像处理
·
将摄像头实时获取的彩色图像输入IMAQ ExtractSingleColorPlane
VI,输出单通道灰度图。将单通道灰度图输入IMAQ BCGLookup VI
,创建亮度、对比度和gamma矫正输入,调节典型值(80,80,1),获得图像增强后的输出。当环节内有error输出或按下暂停键,停止图像更新,并将最新一帧增强图像输出。
OCR训练
OCR的字符集可由Nl OCR训练器应用程序离线训练得到。
打开软件Vision Assistant 2021 (32-bit)
利用手机、相机拍摄多张彩色、灰色、增强图像,用OCR训练器打开
创建训练集,对图片手动添加数据集并标定
保存为文件studentnumber.abc,验证模型效果
OCR识别
利用IMAQ OCR Create Session VI ,创建OCR会话,返回句柄。
利用IMAQ OCR Read Character Set File
VI读取字符集studentnumber.abc,添加到读取过程使用的训练字符集。Labview的Image可以创建ROI属性节点,框选区域,输出矩形对角坐标。创建鼠标释放事件,当框选结束时,执行对框选区域的OCR识别。
利用IMAQ Clear Overlay VI,清除图像覆盖,保证识别帧为最新一帧。
利用IMAQ OCR Read Text 3
VI,利用训练字符集读取ROI框选图像中的文本,将每个对象与字符集的每个字符比较,选择与对象最匹配的字符,输出为字符串。
文件保存
读取当前路径和文件名,利用**创建路径(函数)**生成路径。
利用打开/创建/替换文件 (函数) ,打开路径对应的Save.txt文件。
利用设置文件位置 (函数) ,设置写入位置为文件末尾。
利用连接字符串 (函数) ,在输出的字符串前添加回车符。
利用写入文本文件 (函数) ,将识别结果写入txt文件。
至此,OCR数字识别程序已完成
实验结果
经测试,对学生卡等白背景数字识别准确率较高,而对银行卡等带颜色背景数字识别有误差。
对于长串数字,若光照和颜色均匀,有较为准确的识别结果。
数据集的完整性对识别结果有明显影响,采集数据时未能找到学号带有数字6的学生卡,故数据集中数字6只有一个,在对银行卡号中的数字6,有高概率误认为数字8.
下载
关注公众号小电动车,回复数字识别获取Labview工程文件
Labview OCR数字识别相关推荐
- java ocr数字识别_Java OCR tesseract 图像智能文字字符识别技术实例代码
接着上一篇OCR所说的,上一篇给大家介绍了tesseract 在命令行的简单用法,当然了要继承到我们的程序中,还是需要代码实现的,下面给大家分享下Java实现的例子. 拿代码扫描上面的图片,然后输出结 ...
- opencv +数字识别
现在很多场景需要使用的数字识别,比如银行卡识别,以及车牌识别等,在AI领域有很多图像识别算法,大多是居于opencv 或者谷歌开源的tesseract 识别. 由于公司业务需要,需要开发一个客户端程序 ...
- c# opencv车牌识别_opencv +数字识别
现在很多场景需要使用的数字识别,比如银行卡识别,以及车牌识别等,在AI领域有很多图像识别算法,大多是居于opencv 或者谷歌开源的tesseract 识别. 由于公司业务需要,需要开发一个客户端程序 ...
- LabVIEW OCR 实现车牌识别(实战篇—3)
目录 1.字符数据集训练 2.识别与验证 在学习本章之前,推荐先学习系列专栏文章:LabVIEW目标对象分类识别(理论篇-5) OCR(光学字符识别)是指机器自动从图像中识别文本字符的过程,OCR机器 ...
- OpenCV实现0到9数字识别OCR
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 使用OpenCV对0到9数字进行识别,实现简单OCR功能,基于CA ...
- OpenCV-Python中的简单数字识别OCR
本文翻译自:Simple Digit Recognition OCR in OpenCV-Python I am trying to implement a "Digit Recogniti ...
- OCR手写数字识别什么软件好用?介绍一种
OCR是指用电子设备检查文本上的资料,然后对图像文件进行分析处理,从而获取文字及版面信息的过程.那OCR手写数字识别有好用的软件吗?当我们需要整理大量手写资料需要整理时,下面这两款软件就派上用场了. ...
- 基于OCR模板匹配的手写英文字母数字识别matlab仿真
目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 OCR技术中使用模板匹配法时首先要建立标准的模板字符库,接着将待识别字符图像与模板字符库中字符进行匹 ...
- 基于LabVIEW的图片上数字识别(特征点)
怎么去识别图片上的一个数字? 我已将代码上传,有需要的在以下地址下载: https://download.csdn.net/download/weixin_45440899/12551412 1) 何 ...
- 手把手教你使用LabVIEW OpenCV DNN实现手写数字识别(含源码)
文章目录 前言 一.OpenCV DNN模块 1.OpenCV DNN简介 2.LabVIEW中DNN模块函数 二.TensorFlow pb文件的生成和调用 1.TensorFlow2 Keras模 ...
最新文章
- hdu4467 graph
- 使用RegularExpressionValidator限制多行文本框的字数
- 【django】自定义中间件
- Java IO 流 设计模式
- Angular应用页面里appId的生成逻辑和位置
- android os跑电量咋关,android 优化耗电量
- php 修改最大上传,php 修改上传文件大小限制实例详解
- ie6对postion:fixed的完美解决方案
- std::map的KEY如果是char*,必须是malloc的
- 蚌埠电大计算机课心得体会,电大心得体会
- 无盘服务器什么意思,无盘网络是什么
- idea风格ui java_IDEA主题美化
- 零基础学习 自动化编程- 第一天 计算机语言
- 用C语言开发NES游戏(CC65) 准备工作
- AWS中国EC2 80端口无法访问
- MyBatis动态SQL
- Jenkins项目配置-Nodejs项目(Vue框架)-全面
- Unity引擎及编辑器C#源代码赏析(一)—目录结构
- mysql怎样发给别人_怎么把数据库发给别人
- LightTools 坐标系定义及旋转方向定义