1.利用Halcon内置模型进行识别
1.工牌识别ocr
1排序
*对连通域区域集合进行字符模式排序,适合单行/多行字符,按选定规则重排区域顺序
*参数1: 输入 待排序的区域集合ConnectedRegions2
*参数2: 输出 排序完成后的区域集合SortedRegions
*参数3: 输入 排序基准特征:'character'字符排序模式
*参数4: 输入 是否升序 'true'=升序,'false'=降序
*参数5: 输入 按哪个坐标排序 'row'按行坐标;'column'按列坐标
sort_region (ConnectedRegions2, SortedRegions, 'character', 'true', 'row')
2选中模型
*读取训练好的MLP多层感知机OCR分类器文件,加载OCR模型句柄
*参数1: 输入 OCR模型文件路径及名称 'Document_NoRej.omc'
*参数2: 输出 OCR模型句柄OCRHandle,后续识别算子使用
read_ocr_class_mlp ('Document_NoRej.omc', OCRHandle)
3进行识别
*使用MLP OCR模型一次性对多个字符区域批量执行字符识别
*参数1: 输入 排序完成的字符区域集合SortedRegions
*参数2: 输入 用于识别的图像ImageInvert
*参数3: 输入 OCR模型句柄OCRHandle(read_ocr_class_mlp加载得到)
*参数4: 输出 识别出的字符数组Class
*参数5: 输出 对应每个字符的置信度数组Confidence,范围0~1
do_ocr_multi_class_mlp (SortedRegions, ImageInvert, OCRHandle, Class, Confidence)
2.识别准度技巧
1.自己创建画布指定区域绘制为白色

*将区域绘制到图像上,填充指定灰度值
*参数1: 输入 待绘制的区域SortedRegions
*参数2: 输入 绘制的底图ImageReduced
*参数3: 输出 绘制完成后的结果图像ImageResult
*参数4: 输入 填充的灰度值255(白色)
*参数5: 输入 绘制模式,'fill'代表填充整个区域
paint_region (SortedRegions, ImageReduced, ImageResult, 255, 'fill')
2.膨胀一下识别字符可以准一点
2.Halcon训练模型
1.创建训练文件 xxx.trf
* 1.创建训练文件 xxx.trf
* 参数一:输入需要训练的字符区域
* 参数二:输入该区域对应的图片
* 参数三:输入需要训练的类别
* 参数四:输入训练文件名称或路径
write_ocr_trainf (SortedRegions, ImageReduced,\
class, 'train_ocr')
* 读trf文件中的类别信息
* 参数一:输入训练文件名称或者路径
* 参数二:输出的训练文件中训练类别
* 参数三:输出每个训练类别下的字符数量
read_ocr_trainf_names ('train_ocr', CharacterNames, CharacterCount)
2.创建一个mlp分类器
* 2.创建一个mlp分类器
* mlp是机器学习模型(人工神经网络模型)
* 参数一:输入字符宽度
* 参数二:输入字符高度
* 参数三:字符缩放样式
* 参数四:输入用于分类的特征
* 参数五:输入要识别的字符集中所有字符
* 参数六:对MLP隐藏单元数
* 参数七:用于转换特征向量的预处理类型
* 参数八:变换特征个数
* 参数九:随机数生成器种子值
* 参数十:输出OCR分类器的句柄
create_ocr_class_mlp (8, 10, 'constant',\
'default',\
class,\
80, 'none', 10, 42, OCRHandle)
3.开始训练
* 3.开始训练
* 参数一:输入OCR分类器句柄
* 参数二:OCR训练的trf文件路径
* 参数三:输入优化算法的最大迭代次数(训练200轮)
* 参数四:MLP权重差的阈值
* 参数五:MLP平均误差阈值
* 参数六:训练数据MLP模型中的平均误差
* 参数七:...迭代次数的函数
trainf_ocr_class_mlp (OCRHandle, 'train_ocr.trf',\
200, 1, 0.01, Error, ErrorLog)
4.写omc模型文件
* 4.写omc模型文件
* 参数一:输入字符模型句柄
* 参数二:输入输出的字符模型保存路径
write_ocr_class_mlp (OCRHandle, 'gushi')