Halcon编程实验-(5)汉字识别【目的:OCR识别训练应用】

程序及流程

1.图像矫正

2.对文字连通域进行区域提取分离
在这里插入图片描述
3.制作字符集,既形成trf文件,字符图像与字符进行关联
在这里插入图片描述

4.神经网络训练过程,生成omc文件
在这里插入图片描述
5.利用训练结果中的omc文件,识别并显示
在这里插入图片描述

环境

自己拍的一张图片,无其他影响因素
在这里插入图片描述

相关代码

//创建窗口
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

//文件读取
read_image (Image, 'X:/Halcon/汉字识别.jpg')

//预处理
rgb1_to_gray (Image, GrayImage)
scale_image (GrayImage, ImageScaled, 1.97674, -213)//图像线性变换

//区域图像分割提取
threshold (ImageScaled, Regions, 0, 2)
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, ['area','width','height'], 'and', [0,149.75,155.33], [53299.5,225.89,210.15])

//图像矫正
union1 (SelectedRegions, RegionUnion)//合并所有区域
shape_trans (RegionUnion, RegionTrans, 'rectangle2') //变换区域形状,rectangle2:最小外接矩形
orientation_region (RegionTrans, Phi)//区域方向计算,得到弧度Phi
area_center (RegionTrans, Area, Row, Column)
vector_angle_to_rigid (Row, Column, Phi , Row, Column, rad(180), HomMat2D)
affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor')//区域矫正操作
affine_trans_image (Image, ImageAffineTrans, HomMat2D, 'constant', 'false')//图像矫正操作

//对文字连通域进行区域提取分离
reduce_domain (ImageAffineTrans, RegionAffineTrans, ImageReduced)//对矫正后的图形进行区域裁剪
rgb1_to_gray (ImageReduced, GrayImage1)
threshold (GrayImage1, Regions1, 0, 80)
connection (Regions1, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 7803.64, 14949.4)
sort_region (SelectedRegions1, SortedRegions, 'first_point', 'true', 'column')//连通域排序操作
count_obj (SelectedRegions1, Number)//获得连通域数量,既文字数量

//制作字符集,既形成trf文件,字符图像与字符进行关联
words :=['编','著','罗','超']
TrainFile :='X://Halcon//word.trf'
for Index := 1 to Number by 1
    select_obj (SortedRegions, SingleWord, Index)//拿出单独连通域
    append_ocr_trainf (SingleWord, ImageAffineTrans, words[Index-1],TrainFile)//关联文字连通域与字符
endfor

//生成omc文件
FontFile :='X://Halcon//word.omc'
read_ocr_trainf_names (TrainFile, CharacterNames, CharacterCount)

//神经网络训练过程------------------------
*创建神经网络分类器
create_ocr_class_mlp (10, 30, 'constant', 'default', CharacterNames, 80, 'none', 10, 42, OCRHandle)
*训练分类器
trainf_ocr_class_mlp (OCRHandle, TrainFile, 200, 1, 0.01, Error, ErrorLog)
*保存omc文件
write_ocr_class_mlp (OCRHandle, FontFile)
*清除句柄
clear_ocr_class_mlp (OCRHandle)
//----------------------------------------

*识别文字
read_ocr_class_mlp (FontFile, OCRHandle1)//读取训练参数(omc文件)
do_ocr_multi_class_mlp (SortedRegions, ImageReduced, OCRHandle1, Class, Confidence)//ocr识别操作,输入图形为矫正裁剪过的图像

//显示识别结果
dev_display (ImageAffineTrans)
dev_display (SortedRegions)
for i := 1 to |Class| by 1
disp_message (WindowHandle,Class[i-1], 'image', Row+200 , Column+ i*200, 'blue', 'true')   
endfor

实验结果

在这里插入图片描述

原创文章 30 获赞 17 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_32939413/article/details/104540480