::: keywords
labview,OCR,灰度,对比度,数字识别
:::
下载文件

前言

OCR (Optical Character
Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。

本文基于labview设计了一个学号识别系统,可以识别学生卡上学号并保存在文件中,同时也可以识别身份证号、名片电话等。

该系统包含图像获取、图像处理、数据输出,是一个综合性的设计,作为学习labview的阶段性练习。

运行环境

本系统运行在labview2020或2018环境,需要安装labview的视觉组件。

  1. LabVIEW软件

  2. Vision Development
    Module(视觉开发模块)

  3. NI Vision Acquisition
    Software(视觉采集软件)

安装过程

设计原理

图像格式

  1. 彩色图像:由RGB三原色数值排列表示一个像素,有RGB888(24位)和RGB565(16位)等格式。其中,24位全彩色图像中的每个像素占据3个byte的空间,分别表示RGB3个通道,总共可以显示2563256^32563种颜色

  2. 灰度图:由灰度信息表示一个像素(8位,0-255:0表示最暗色,255表示最亮色),每个像素存放在一个byte空间

  3. 二值图像:由二值信息表示一个像素,每个下昂苏存放在一个bit空间

OCR数字识别

OCR(光学字符识别)是指机器自动从图像中识别文本字符的过程,是目标分类和识别的一种应用,包括训练与分类过程,可用于对被测件的识别和分类。

OCR训练过程主要从图像中提取用于字符识别的特征向量,并对各字符图像赋予准确的字符值。具有相同字符值的字符样本图像构成一个字符类,该类可以用其中一个最能代表该类字符的样本图像来代表,称为参考字符。字符训练完成后,就可得到一个用于对字符进行识别的字符集。

OCR对图像中的文本进行读取时,会先将图像中的各个字符图像分割开来,并将字符的特征向量与字符集中保存的特征向量进行对比,选取满足条件的最佳匹配向量所对应的字符值作为读取识别结果。若有必要,也可以通过字符验证过程对OCR的识别质量进行验证。

常见的OCR识别应用包括:药品包装标签识别、IC芯片编码读取、冲压零件上的字符识别、汽车零件编码读取以及车牌识别等。

利用Labview的Vision模块的OCR组件可以实现从训练到识别的过程。

图像处理

机器视觉系统开发过程中常见的特征包括像素灰度、边缘、轮廓和形状、纹理、角点、色彩以及各种与图像颗粒相关的属性等。

本文进行OCR识别的对象为学生卡或其他证件,一般有明显的数字特征,字体之间有明确间隔,字体背景为浅颜色,故获取彩色图像后,需要对其灰度化、增强亮度和对比度处理。这些函数都可以在labview的vision组件中找到

文件存储

利用labview的文件I/O组件可以实现将字符串换行写入txt文件中,实现OCR识别结果的存储。

程序设计

程序流程

程序步骤

相机获取

  1. 利用IMAQdx Open Camera
    VI
    开启摄像头,查询相机功能,加载相机配置文件,输入摄像头名称(cam0为笔记本自带摄像头),输出相机引用。

  2. 利用IMAQ Create VI为图像创建临时内存位置。

  3. 摄像头引用节点输入IMAQdx Configure Grab
    VI
    ,配置并从缓冲区抓取图像。

  4. 创建while循环,将图像和引用输入IMAQdx Grab2
    VI
    ,输出最新的帧获取到Image Out,并通过Image显示。

图像处理

·

  1. 将摄像头实时获取的彩色图像输入IMAQ ExtractSingleColorPlane
    VI
    ,输出单通道灰度图。

  2. 将单通道灰度图输入IMAQ BCGLookup VI
    ,创建亮度、对比度和gamma矫正输入,调节典型值(80,80,1),获得图像增强后的输出。

  3. 当环节内有error输出或按下暂停键,停止图像更新,并将最新一帧增强图像输出。

OCR训练

OCR的字符集可由Nl OCR训练器应用程序离线训练得到。

  1. 打开软件Vision Assistant 2021 (32-bit)

  2. 利用手机、相机拍摄多张彩色、灰色、增强图像,用OCR训练器打开

  3. 创建训练集,对图片手动添加数据集并标定

  4. 保存为文件studentnumber.abc,验证模型效果

OCR识别

  1. 利用IMAQ OCR Create Session VI ,创建OCR会话,返回句柄。

  2. 利用IMAQ OCR Read Character Set File
    VI
    读取字符集studentnumber.abc,添加到读取过程使用的训练字符集。

  3. Labview的Image可以创建ROI属性节点,框选区域,输出矩形对角坐标。创建鼠标释放事件,当框选结束时,执行对框选区域的OCR识别。

  4. 利用IMAQ Clear Overlay VI,清除图像覆盖,保证识别帧为最新一帧。

  5. 利用IMAQ OCR Read Text 3
    VI
    ,利用训练字符集读取ROI框选图像中的文本,将每个对象与字符集的每个字符比较,选择与对象最匹配的字符,输出为字符串。

文件保存

  1. 读取当前路径和文件名,利用**创建路径(函数)**生成路径。

  2. 利用打开/创建/替换文件 (函数) ,打开路径对应的Save.txt文件

  3. 利用设置文件位置 (函数) ,设置写入位置为文件末尾。

  4. 利用连接字符串 (函数) ,在输出的字符串前添加回车符。

  5. 利用写入文本文件 (函数) ,将识别结果写入txt文件。

至此,OCR数字识别程序已完成

实验结果

经测试,对学生卡等白背景数字识别准确率较高,而对银行卡等带颜色背景数字识别有误差。

对于长串数字,若光照和颜色均匀,有较为准确的识别结果。

数据集的完整性对识别结果有明显影响,采集数据时未能找到学号带有数字6的学生卡,故数据集中数字6只有一个,在对银行卡号中的数字6,有高概率误认为数字8.

下载

关注公众号小电动车,回复数字识别获取Labview工程文件

Labview OCR数字识别相关推荐

  1. java ocr数字识别_Java OCR tesseract 图像智能文字字符识别技术实例代码

    接着上一篇OCR所说的,上一篇给大家介绍了tesseract 在命令行的简单用法,当然了要继承到我们的程序中,还是需要代码实现的,下面给大家分享下Java实现的例子. 拿代码扫描上面的图片,然后输出结 ...

  2. opencv +数字识别

    现在很多场景需要使用的数字识别,比如银行卡识别,以及车牌识别等,在AI领域有很多图像识别算法,大多是居于opencv 或者谷歌开源的tesseract 识别. 由于公司业务需要,需要开发一个客户端程序 ...

  3. c# opencv车牌识别_opencv +数字识别

    现在很多场景需要使用的数字识别,比如银行卡识别,以及车牌识别等,在AI领域有很多图像识别算法,大多是居于opencv 或者谷歌开源的tesseract 识别. 由于公司业务需要,需要开发一个客户端程序 ...

  4. LabVIEW OCR 实现车牌识别(实战篇—3)

    目录 1.字符数据集训练 2.识别与验证 在学习本章之前,推荐先学习系列专栏文章:LabVIEW目标对象分类识别(理论篇-5) OCR(光学字符识别)是指机器自动从图像中识别文本字符的过程,OCR机器 ...

  5. OpenCV实现0到9数字识别OCR

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 使用OpenCV对0到9数字进行识别,实现简单OCR功能,基于CA ...

  6. OpenCV-Python中的简单数字识别OCR

    本文翻译自:Simple Digit Recognition OCR in OpenCV-Python I am trying to implement a "Digit Recogniti ...

  7. OCR手写数字识别什么软件好用?介绍一种

    OCR是指用电子设备检查文本上的资料,然后对图像文件进行分析处理,从而获取文字及版面信息的过程.那OCR手写数字识别有好用的软件吗?当我们需要整理大量手写资料需要整理时,下面这两款软件就派上用场了. ...

  8. 基于OCR模板匹配的手写英文字母数字识别matlab仿真

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 OCR技术中使用模板匹配法时首先要建立标准的模板字符库,接着将待识别字符图像与模板字符库中字符进行匹 ...

  9. 基于LabVIEW的图片上数字识别(特征点)

    怎么去识别图片上的一个数字? 我已将代码上传,有需要的在以下地址下载: https://download.csdn.net/download/weixin_45440899/12551412 1) 何 ...

  10. 手把手教你使用LabVIEW OpenCV DNN实现手写数字识别(含源码)

    文章目录 前言 一.OpenCV DNN模块 1.OpenCV DNN简介 2.LabVIEW中DNN模块函数 二.TensorFlow pb文件的生成和调用 1.TensorFlow2 Keras模 ...

最新文章

  1. hdu4467 graph
  2. 使用RegularExpressionValidator限制多行文本框的字数
  3. 【django】自定义中间件
  4. Java IO 流 设计模式
  5. Angular应用页面里appId的生成逻辑和位置
  6. android os跑电量咋关,android 优化耗电量
  7. php 修改最大上传,php 修改上传文件大小限制实例详解
  8. ie6对postion:fixed的完美解决方案
  9. std::map的KEY如果是char*,必须是malloc的
  10. 蚌埠电大计算机课心得体会,电大心得体会
  11. 无盘服务器什么意思,无盘网络是什么
  12. idea风格ui java_IDEA主题美化
  13. 零基础学习 自动化编程- 第一天 计算机语言
  14. 用C语言开发NES游戏(CC65) 准备工作
  15. AWS中国EC2 80端口无法访问
  16. MyBatis动态SQL
  17. Jenkins项目配置-Nodejs项目(Vue框架)-全面
  18. Unity引擎及编辑器C#源代码赏析(一)—目录结构
  19. mysql怎样发给别人_怎么把数据库发给别人
  20. LightTools 坐标系定义及旋转方向定义

热门文章

  1. 谷歌搜索算法分析及应对策略
  2. HTML5-fishc 学习笔记
  3. 肌电|表面肌电应用的新进展
  4. Maven dependency plugin使用
  5. GitHub 离线安装包下载
  6. latex tabular 单元格里换行
  7. 计算机博弈程序python_程序员大神们的经典编程语录
  8. 关于java就业的简历模板,工作一年java简历模板
  9. 内网通免广告/积分码
  10. 如何安装vs2010助手?