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')的字符串表示该区域已被分类为拒绝类