当前位置: 首页 > news >正文

Halcon学习---光学字符识别(OCR)

1、 text_line_orientation

text_line_orientation(Region, // 输入文本行所在区域
                      Image, // 输入图像
                      CharHeight, 
                      OrientationFrom, OrientationTo, // 限定查找角度范围最小、最大角度
                      OrientationAngle) // 输出计算文本行的旋转角度
  • 定义:决定了单个文本行或段落相对于水平图像轴的方向。如果要确定单个文本行的方向,则OrientationFrom和OrientationTo的范围应该在-pi/4到pi/4的区间内

  • 说明

  • Region:指定文本行所在的图像区域,该区域仅用于减少工作面积。文本行由操作符text_line_orientation本身分割。如果传递了多个区域,则方向角的数值存储在元组中,元组中值的位置对应于输入元组中区域的位置

  • CharHeight:指定区域region中现有文本行的大约高度

  • 搜索区域可以由参数OrientationFrom和OrientationTo限制,因此也会影响操作符的运行时间

  • 如果输入参数设置正确,操作符text_line_orientation返回值TRUE,否则将引发异常

  • 应用:通过计算出的角度OrientationAngle和像affine_trans_image这样的操作符,可以旋转图像的区域,使文本线水平地位于图像中,这可以简化OCR应用程序的字符分割

2、 partition_rectangle

partition_rectangle(Region, // 要分区的区域
                    Partitioned, // 输出分区
                    Width, Height) // 单个矩形的宽高
  • 定义:将输入区域划分为给定宽高的矩形,矩形在分区中返回

  • 说明

  • 该区域总是被分割成大小大致相等的矩形。如果要求的矩形大小不能做到这一点,则调整宽度和高度,使结果矩形的大小大致相等
  • 如果区域小于给定的大小,它的输出保持不变
  • 只有当区域的大小至少是由参数给出的矩形的1.5倍时,才进行分区

3、intersection 

intersection(Region1, // 区域1与区域2中的所有区域相交
             Region2, // Region1与之相交的区域
             RegionIntersection) // 返回交集的结果
  • 定义:交集计算Region1中的区域与Region2中的区域的交集

  • 说明

  • Region1中的每个区域与Region2中的所有区域相交
  • 在Region1的各个区域与统一的区域相交之前,Region2的所有区域在内部被统一为一个区域
  • RegionIntersection中region的顺序与Region1中region的顺序相同
  • 注意:允许空输入区域。因为空的结果区域是可能的,所以应该适当地设置系统标志'store_empty_region'

4、sort_region

sort_region(Regions, // 输入需要排序的区域
            SortedRegions, // 输出排序后的区域
            SortMode, // 设置需要排序的方式
            Order, // 设置递增还是递减排序
            RowOrCol) // 设置按照行排列还是列排列
  • 定义:根据区域的相对位置对区域进行排序

  • 说明:除“字符”之外的所有排序方法都使用区域的一个点。在参数RowOrCol = 'row'的帮助下,这些点将根据它们的行排序,然后根据它们的列排序。通过使用'column',列值将首先被使用

  • 注意SortMode参数的设置

  • 'character':区域被视为字符,可以水平或垂直读取。它们按照RowOrCol给出的读取方向排序,规范如下:

    • 'row':行,读取方向首先从左到右,然后从上到下

    • 'col':列,阅读方向首先从上到下,然后从左到右

  • 'first_point':按照第一个点排序,一个区域的第一行的最前面的点

  • 'last_point':按照最后一个点排序,一个区域的最后一行最后一列的那个点

  •  'upper_left':外接矩形的左上角

  •  'upper_right':外接矩形的右上角

  • 'lower_left':外接矩形的左下角

  •  'lower_right':外接矩形的右下角

5、read_ocr_class_mlp

read_ocr_class_mlp(FileName, // 读取文件路径
                   OCRHandle) // OCR句柄
  • 定义:从文件中读取OCR分类器

  • 说明

  • read_ocr_class_mlp读取与write_ocr_class_mlp一起存储的OCR分类器

  • 由于OCR分类器的训练可能花费相对较长的时间,因此分类器通常在离线过程中进行训练,并使用write_ocr_class_mlp将其写入文件。在在线过程中,使用read_ocr_class_mlp读取分类器,然后使用do_ocr_single_class_mlp或do_ocr_multi_class_mlp进行分类

  • HALCON自带训练好的文件:Document(文档字体)、Industrial(工业字体)、DotPrint(点状字体)。选择的文件如果有NoRej表示允许出错,如果选择Rej对字符的要求将更严格,正确率也更高

  • 预先训练的OCR分类器是拿白底黑色字符训练的,所以识别时也要拿白底黑色的字符区域去进行识别

  • 注意:如果参数有效,操作符read_ocr_class_mlp返回值TRUE。如果有必要,将引发异常

  • 使用OCR助手,选择字体-点击放大镜后可以查看到当前支持识别的字体内容

6、do_ocr_single_class_mlp

do_ocr_single_class_mlp(Character, // 输入需要识别的字符区域
                        Image, // 输入图像
                        OCRHandle,
                        Num, // 设置识别数量
                        Class, // 用MLP对字符进行分类的结果
                        Confidence) // 可信度 值范围0~1
  • 定义:识别单个区域OCR使用OCR分类器OCRHandle计算由区域character和图像Image给出的字符的最佳Num类,并返回Class中的类和Confidence中的类的相应置信度(概率)

  • 说明

  • 因为do_ocr_single_class_mlp可能返回多个类,所以Character只包含单个区域(单个字符)

  • 如果要在一个调用中对多个字符进行分类,则必须使用do_ocr_multi_class_mlp

  • 在大多数情况下应该使用do_ocr_multi_class_mlp,除非应该显式检查次优类

7、do_ocr_multi_class_mlp

do_ocr_multi_class_mlp(Character, // 输入需要识别的字符区域
                        Image, // 输入图像摆正之后的(必须是白底黑字)
                        OCRHandle,
                        Class, // 识别出来的结果
                        Confidence) // 可信度 值范围0~1
  • 定义:使用OCR分类器对多个字符进行分类,使用OCR分类器OCRHandle为区域Character和灰度值Image给出的每个字符计算最佳类,并返回class中的类和Confidence中的类的相应置信度(概率)

  • 说明

  • 与do_ocr_single_class_mlp相反,do_ocr_multi_class_mlp可以在一次调用中对多个字符进行分类,因此通常比使用do_ocr_single_class_mlp对单个字符进行分类的循环要快

  • 然而,do_ocr_multi_class_mlp只能返回每个字符的最佳类。因为可将置信度解释为概率(参见classify_class_mlp和evaluate_class_mlp),因此很容易检查一个字符是否被分类了太多的不确定性,这通常不是一个缺点,除非类重叠太多,以至于在许多情况下必须检查第二好的类才能决定字符的类

  • 在这些情况下,应该使用do_ocr_single_class_mlp

  • 在调用do_ocr_multi_class_mlp之前,必须使用trainf_ocr_class_mlp对分类器进行训练

  • 注意:Class中数字'\032'(或者显示为'\0x1A')的字符串表示该区域已被分类为拒绝类

相关文章:

  • 【电商数仓】数仓搭建之DIM维度层(商品、优惠券、活动、地区、时间维度表)
  • class11:cookie和session
  • 一些常用的刷题网站
  • Python自动化小技巧11——excel文件的文字内容筛选
  • ArrayList的源码分析
  • 不支持TLS的设备如何实现游客登录加密通信方案
  • 【Pandas 数据分析3-2】Pandas 数据读取与输出 - Excel
  • TiDB Dashboard 实例性能分析 - 持续分析页面
  • Spring Boot 集成 Redis 配置 MyBatis 二级缓存
  • 9 二叉树-添加
  • SSM进阶-搭建Dubbo
  • STM32F103 CAN通讯实操
  • JAVA-----注释、字面量、关键字、制表符
  • numpy数组的变形、级联操作、聚合操作、常用的数学函数以及矩阵相关
  • ActiveMQ(二)
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Docker入门(二) - Dockerfile
  • Java应用性能调优
  • Linux快速复制或删除大量小文件
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Netty源码解析1-Buffer
  • Redis学习笔记 - pipline(流水线、管道)
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 给Prometheus造假数据的方法
  • 后端_ThinkPHP5
  • 欢迎参加第二届中国游戏开发者大会
  • 每天一个设计模式之命令模式
  • 听说你叫Java(二)–Servlet请求
  • 学习ES6 变量的解构赋值
  • 交换综合实验一
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #Lua:Lua调用C++生成的DLL库
  • $.ajax中的eval及dataType
  • %check_box% in rails :coditions={:has_many , :through}
  • (4) PIVOT 和 UPIVOT 的使用
  • (6)设计一个TimeMap
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (pytorch进阶之路)扩散概率模型
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (蓝桥杯每日一题)love
  • (一)kafka实战——kafka源码编译启动
  • .NET 中让 Task 支持带超时的异步等待
  • .NET成年了,然后呢?
  • .NET大文件上传知识整理
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • /etc/sudoers (root权限管理)