点击上方“新机器视觉”,选择加"星标"或“置顶”

重磅干货,第一时间送达

OCR(Optical Character Recognition),光学字符识别的英文缩写。

OCR主要步骤

  • 图像预处理

  • 目标区域分割(ROI)

  • 字符识别

  • 结果处理

1. 图像预处理

对原始图像进行灰度化,二值化,模板匹配,降噪,增强等!

2.目标区域分割(ROI)

对预处理后的图像进行ROI提取,分割出单个字符组成的区域

3.字符识别,即模式识别技术

  • 训练OCR,利用大量的模板图片训练出一个字符分类器

  • 使用OCR,将训练好的分类器用于字符分类,类似于手写数字识别!

4.结果处理

将识别完的文字按特定的次序和规则组合输出!


上述4个步骤中,OCR的核心部分自然是第3步,即模式识别技术

模式识别技术

训练分类器

第一步:将分割好的字符区域加入训练集,使用函数

append_ocr_trainf(Character,Image::Class,TrainingFile:)

参数解析:
Character:字符区域
Image:灰度图像
Class:分类标签
TrainingFile:训练集文件名,一般后缀为.trf
功能说明:用于制作训练集,使用与TrainingFile文件相同的训练文件格式,将字符附加到现有文件。如果该文件不存在,则生成新文件。TrainingFile如果未指定扩展名,则默认添加扩展名.trf

第二步:创建分类器,使用函数

create_ocr_class_mlp(::WidthCharacter, HeightCharacter,Interpolation,Features,Characters,NumHidden,Preprocessing,NumComponents,RandSeed:OCRHandle)

参数解析:
WidthCharacter:输入被分割的字符缩放到指定的宽度
HeightCharacter:输入被分割的字符缩放到指定的高度
Interpolation:缩放的插值方式
Features:特征类型,一般选’default’
Characters:分类的特征向量
NumHidden: MLP(多层感知器-人工神经网络)中隐藏层神经元的个数
Preprocessing:矢量特征转换的预处理类型
NumComponents:匹配字符的数量
RandSeed:随机种子
OCRHandle:OCR分类器的句柄
功能说明:创建一个MLP模型并初始化

第三步:训练、保存、清除分类器,使用函数

trainf_ocr_class_mlp(::OCRHandle,TrainingFile,MaxIterations,WeightTolerance,ErrorTolerance:Error,ErrorLog)write_ocr_class_mlp(::OCRHandle,FileName:)clear_ocr_class_mlp(::OCRHandle:)

训练MLP分类器参数解析:
OCRHandle:OCR分类器的句柄
TrainingFile:训练集
MaxIterations:最大迭代次数
WeightTolerance:初始权重公差
ErrorTolerance:初始损失学习率
Error:整个训练集上的均差
ErrorLog:每一次训练的均差记录
功能说明:使用训练集训练模型,

保存分类器模型参数解析:
FileName:输出的模型文件名,不指定扩展名,则扩展名默认为.omc
功能说明:将训练好的模型保存为文件

清除分类器模型功能说明:清除模型,释放缓存

使用分类器

读取、使用训练好的模型分类的函数如下:

read_ocr_class_mlp(::FileName:OCRHandle)do_ocr_single_class_mlp(Character,Image::OCRHandle,Num:Class,Confidence)do_ocr_multi_class_mlp(Character,Image::OCRHandle:Class,Confidence)

读取模型函数参数解析:
FileName:模型文件名,如果未指定扩展名,则默认使用扩展名.omc
OCRHandle:成功读取模型后生成的模型句柄
功能说明:从模型文件中读出模型

模型单个字符识别参数解析:
Character:字符区域
Image:字符图片
Num:输出概率最大的前Num个分类类别
Class:输出类别
Confidence:输出分类的置信度
功能说明:对单个区域进行的字符识别

模型多个字符识别参数解析:
Class:输出的分类数组
功能说明:输出多个字符区域的类别

其它函数

获取训练集信息:

read_ocr_trainf_names (::TrainingFile: CharacterNames, CharacterCount)

参数解析:
TrainingFile:训练集
CharacterNames:输出分类数组
CharacterCount:训练集字符区域总数

完整示例代码如下(仅作为代码示例,无法运行):

WindowHandle:=3600dev_open_window (0, 0, 512, 512, 'black', WindowHandle)gen_empty_obj (EmptyObject)read_image (Image, 'test1.jpg')rgb1_to_gray (Image, GrayImage)

for Index := 1 to 4 by 1 disp_message (WindowHandle, '手动ROI','window', 12, 12, 'yellow', 'false') draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2) gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2) reduce_domain (GrayImage, Rectangle, ImageReduced1) threshold (ImageReduced1, Region1, 128, 255) concat_obj (EmptyObject, Region1, EmptyObject)endforwords:=['1','2','3','4']*按列位置排序sort_region (EmptyObject, SortedRegions1, 'character', 'true', 'column')

FontName := 'F:\DataSet\Num'TrainingFileName := FontName+'.trf'

for Index1:=1 to 4 by 1 select_obj (SortedRegions1, ObjectSelected1, Index1) append_ocr_trainf (ObjectSelected1, Image, words[Index1-1], TrainingFileName)endfor

read_ocr_trainf_names (TrainingFileName, CharacterNames, CharacterCount)create_ocr_class_mlp (8, 10, 'constant', 'default', CharacterNames, 80, 'none', 10, 42, OCRHandle)trainf_ocr_class_mlp (OCRHandle, TrainingFileName, 200, 1, 0.01, Error, ErrorLog)write_ocr_class_mlp (OCRHandle, FontName)

*导入另一张做测试的图read_image (Image1, 'test2.jpg')threshold (Image1, testwordregion, 125, 255)connection (testwordregion, ConnectedwordRegions)select_shape (ConnectedwordRegions, SelectedwordRegions, 'height', 'and', 50, 250)sort_region (SelectedwordRegions, SortedRegions2, 'upper_left', 'true', 'column')count_obj(SortedRegions2, Number)*开始识别read_ocr_class_mlp (FontName, OCRHandle1)do_ocr_multi_class_mlp (SortedRegions2, Image1, OCRHandle1, Class, Confidence)

*显示结果disp_message(WindowHandle, '识别结果:', 'image', 30, 50, 'white', 'false')for i:=1 to Number by 1 disp_message(WindowHandle, Class[i-1], 'image', 30, 120+40*i, 'yellow', 'false')endfor

Halcon的OCR模型主要有多层神经网络MLP、支持向量机SVM、K最近邻KNN、卷积神经网络CNN四种,以上关于MLP的各类函数,其它模型也有对应的函数,这里就不作详细介绍了。在OCR领域,CNN和MLP应用比较广泛,而SVM在打印体的识别上也可以使用,KNN的计算量和模型原理并不适合用于多属性(点)的算法训练!

 End 

声明:部分内容来源于网络,仅供读者学术交流之目的。文章版权归原作者所有。如有不妥,请联系删除。

函数无法识别_Halcon OCR识别相关推荐

  1. 发票扫描识别 发票ocr识别

    关键词:发票扫描识别 发票ocr识别 增票识别 发票识别录入 发票识别接口 一.发票扫描识别系统应用背景 对于一些大型集团公司来讲,目前主要采用的依旧是分散式财务管理模式,而这就造成了企业财务管理效率 ...

  2. 营业执照识别/营业执照OCR识别API

    关键词:营业执照识别 营业执照云识别 营业执照ocr识别 营业执照ocr识别API 安卓营业执照识别 ios营业执照识别 营业执照识别/营业执照OCR识别API是一款基于服务器平台开发的营业执照OCR ...

  3. 行驶证识别/行驶证OCR识别全方位解析

    本文全面解析行驶证OCR识别,包括什么是行驶证OCR识别.如何选择行驶证识别软件.如何操作行驶证识别软件,以及该软件应用的领域等. 一.了解行驶证识别/行驶证OCR识别 行驶证OCR识别技术,也叫行驶 ...

  4. 行驶证识别/行驶证ocr识别了解详细信息

    本文详细解析行驶证OCR识别,包括什么是行驶证OCR识别.如何选择行驶证识别软件.如何操作行驶证识别软件,以及该软件应用的领域等. 一.行驶证识别/行驶证OCR识别是什么 行驶证OCR识别技术,也叫行 ...

  5. 户口本识别/户口本OCR识别

    居民户口本是我国公民的重要证件,用于登记住户人员的姓名.籍贯.出生日期.具体职称.职业等内容的簿册.应用于新生儿建档.户口迁移.个人信贷申请.社会救济金申请等政务办理场景.传统模式下,大多数企业采取人 ...

  6. 将电子版照片信息或者扫描件快速识别导出 OCR识别技术

    OCR作为最早实用化的人工智能技术之一,已在产业中得到广泛应用.中安未来OCR技术经过多年的市场应用和技术积累,已推出文档识别.证照识别.票据识别.名片识别等全方位文字识别产品与服务,广泛服务于各行业 ...

  7. 出院小结识别——在线OCR识别测试链接及效果

    亲测出院小结在线OCR识别,支持入院日期.出院日期.入院天数.自述症状发生时间1.既往病史-检查描述.现疾病-检查描述.现疾病-治疗描述.现疾病-入院诊断1.现疾病-出院诊断1.现疾病-出院诊断2等字 ...

  8. 发票识别/票据OCR识别浅析

    发票是整个财务系统中不可或缺的部分,也是让财务人员非常头疼的问题.而随着技术的更新发展,人工智能的概念,发票识别的出现,已经为公司的财务系统指明了道路,为财务人员节省了大量的时间和成本. 今天我们就讲 ...

  9. 车牌识别/车牌OCR识别应用场景

    随着人们生活水平的不断提高,机动车辆数量大幅度增加,与之相配套的高速公路.城市路网及停车场越来越多,显著提高了人们对交通控制的要求.其中车牌作为车辆独一无二的身份证,是检测是否违规.收取停车费用的重要 ...

  10. matlab ocr识别算法,ocr识别MATLAB

    [实例简介] 可以运行,主要是MATLAB.识别率不是很高.可以修改符合自己的代码 [实例截图] [核心代码] OCR(1) ├── 107215817chess_Matlab.zip ├── 778 ...

最新文章

  1. 怎么在手机上下载python模块_python下载模块然后怎么安装
  2. 旷视 IPO 在即,看清“AI 第一股”的商业真相
  3. hdu 5505(GT and numbers)
  4. c语言编写程序x的y次方,C语言变为编程y = x-x立方/ 3! + x五次方力量/ 5! -x7th power / 7!...
  5. git push -u origin master 上传出错问题
  6. 【Geek软技能】程序员,为什么写不好一份简历?
  7. mysql数据库二进制_Mysql数据库简单安装(二进制)
  8. scrapy爬个小网站
  9. 波波老师: 解决微服务的数据一致性分发问题?
  10. RocketMQ(三)RocketMQ入门样例
  11. VScode输入英文感叹号!没有提示模板!!
  12. Intellij IDEA 神级插件
  13. win10九月十五更新补丁导致共享打印机无法连接
  14. android7.0版本适配(一):应用间文件文件共享——FileProvider
  15. 集装箱编号校验码规则及java程序的实现
  16. Android手机拍照功能实现
  17. 4.9 GHz异帧干扰问题研究
  18. 小米路由器安装mysql_小米路由器安装和设置方法(图文教程)
  19. uClinux操作系统移植
  20. OpenCVSharp异常--OpenCVSharp.NativeMethods的初始值异常

热门文章

  1. 苹果运营商中移动苹果互盼“在一起” 最快Q3推4G移动版iPhone
  2. [AutoSAR] BSW模块的服务层,重点关注OS部分
  3. python函数使用说明
  4. staticmethod自己定制
  5. Codeforce 1175 D. Array Splitting
  6. 吴恩达机器学习笔记23-神经网络:表述--非线性假设(Non-linear Hypotheses)
  7. React骚操作——jsx遇到template-directive
  8. ls在系统中常用的选项与用法
  9. eclipse经常出现弹窗Refreshing workspace
  10. jQuery动画的实现