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


    1、 text_line_orientation

    1. text_line_orientation(Region, // 输入文本行所在区域
    2.                       Image, // 输入图像
    3.                       CharHeight, 
    4.                       OrientationFrom, OrientationTo, // 限定查找角度范围最小、最大角度
    5.                       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

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

    • 说明

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

    3、intersection 

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

    • 说明

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

    4、sort_region

    1. sort_region(Regions, // 输入需要排序的区域
    2. SortedRegions, // 输出排序后的区域
    3. SortMode, // 设置需要排序的方式
    4. Order, // 设置递增还是递减排序
    5. 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

    1. read_ocr_class_mlp(FileName, // 读取文件路径
    2. 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

    1. do_ocr_single_class_mlp(Character, // 输入需要识别的字符区域
    2. Image, // 输入图像
    3. OCRHandle,
    4. Num, // 设置识别数量
    5. Class, // 用MLP对字符进行分类的结果
    6. 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

    1. do_ocr_multi_class_mlp(Character, // 输入需要识别的字符区域
    2. Image, // 输入图像摆正之后的(必须是白底黑字)
    3. OCRHandle,
    4. Class, // 识别出来的结果
    5. 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')的字符串表示该区域已被分类为拒绝类

  • 相关阅读:
    Excel——时间戳与标准北京时间的互相转换
    从入门到进阶 之 ElasticSearch 节点配置 集群篇
    学透shell 带你写常用的100个 shell 脚本(一)定时删除过期文件
    Estimation with Bootstrap
    MFC Windows 程序设计[216]之目录检测例程(附源码)
    开发了一个深度神经网络
    Controllable Multi-Interest Framework for Recommendation 论文阅读笔记
    引用Geoip实现由IP地址获取国家城市等信息
    Elasticsearch:使用 Elasticsearch 进行语义搜索
    行列式展开:行列式等于它的任一行(列)的元素与其对应的代数余子式的乘积之和
  • 原文地址:https://blog.csdn.net/soaipipiop/article/details/127117788