halcon ocr(汉字)训练识别

halcon ocr(汉字)训练识别

dev_update_off ()
dev_close_window ()
*加载图片并对图片进行预处理(直方图均衡(增加图片亮度),线性变换,阈值处理
*【目的:把汉字区域选择出来,文字区域与其他干扰区域不连接】
read_image (Image, 'F:/Download/images/汉字.jpg')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
rgb1_to_gray (Image, GrayImage)
equ_histo_image (GrayImage, ImageEquHisto)
scale_image (ImageEquHisto, ImageScaled, 2.25664, -273)
threshold (ImageScaled, Regions, 25, 255)
dev_display (Regions)

*对阈值处理后的图片进行膨胀,区域分离,特征选择【把每个文字单独形成一个独立区域,并选择出来】
closing_rectangle1 (Regions, RegionClosing,3,2.5)
connection (RegionClosing, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions1, ['row1','column1'], 'and', [244,118], [337.3,421.22])

*在选择的文字区域上与阈值化后的区域有交集的部分形成显得更精确的文字区域
*【把文字区域膨胀后多余的部分删除】并进行排序
intersection (SelectedRegions1,Regions,RegionIntersection1)
closing_rectangle1 (RegionIntersection1, RegionClosing1, 1, 2)
sort_region (RegionClosing1, SortedRegions1, 'character','true', 'row')
dev_display (SortedRegions1)
count_obj (SortedRegions1, Number)

*在阈值化后的区域上把与选择的文字区域有交集的部分选择出来(所有文字形成一个区域),
*形成区域的外接平行矩形并从原图中截取出来,
*最后再进行颜色反转把白色文字转成黑色文字
intersection (Regions,SelectedRegions1,RegionIntersection2)
shape_trans (RegionIntersection2, RegionTrans, 'rectangle1')
reduce_domain (Image, RegionTrans, ImageReduced)
invert_image (ImageReduced, ImageInvert)

*定义训练文字变量和训练文件
words:=['驱','油','用','表','面','活','性','剂','的','界','面','化','学','与','界','面','流','变','学']
TrainFile:='G:/Halcon/words.trf'

*把训练文字变量区域与训练文字变量关联起来(通过区域找到相应图片中的文字把图片与文字变量联系起来)
*并把联系存放在训练文件中【逐字添加】
for i:=1 to Number by 1
    select_obj (SortedRegions1, ObjectSelected, i)
    append_ocr_trainf(ObjectSelected,ImageInvert,words[i-1],TrainFile)
    *将单个字符区域、单个字符图像和对应的字符文本联系写入TrainingFile 文件
    dev_display (ObjectSelected)
    disp_continue_message (WindowHandle, 'black', 'true')
    stop ()
endfor

*此处是因为
words:=['驱','油','用','表','面','活','性','剂','的','界','化','学','与','流','变']
FontFile:='G:/Halcon/words.omc'

*创建神经网络分类器,并进行训练,最后将训练结果文件存放在FontFile中
read_ocr_trainf_names (TrainFile, CharacterNames, CharacterCount)
*查询.trf训练文件中存储有哪些字符,以及每个字符在训练器中的数量。
create_ocr_class_mlp (8, 10, 'constant', 'default',words, 80, 'none', 15, 42, OCRHandle)
*创建神经网络分类器 810分别是要识别的字符的宽度和高度,80是神经网络的隐藏层,15转化后的特征数量,
*42 ,随机数种子
trainf_ocr_class_mlp (OCRHandle, TrainFile, 200, 1, 0.01, Error, ErrorLog)
*训练神经网络分类器 Maxepochs:200 最大迭代数 1:MLP权重更新阈值 0.01:两次迭代的loss值差的阈值
write_ocr_class_mlp (OCRHandle, FontFile)
*将训练好的分类器模型保存到FontFile中
clear_ocr_class_mlp (OCRHandle)
*清除训练文件句柄

*进行分类识别测试
dev_display(SortedRegions1 )
read_ocr_class_mlp (FontFile, OCRHandle1)
*读取训练好的分类模型文件 句柄为OCRHandle1
do_ocr_multi_class_mlp (SortedRegions1, ImageInvert, OCRHandle1, Class, Confidence)
*将选中的文字区域在暗字图片上进行分类识别

*把分类识别的字体显示在相应的文字下方
smallest_rectangle1 (SortedRegions1, Row1, Column1, Row2, Column2)
for i:=1 to Number by 1
    disp_message (WindowHandle, Class[i-1], 'window', Row2[i-1], Column1[i-1]+(Column2[i-1]-Column1[i-1])/6.5, 'yellow', 'false')
    stop ()
endfor
disp_message (WindowHandle, Class, 'window', 12, 12, 'green', 'false')

原图(百度得来)
在这里插入图片描述
阈值处理后的图片
在这里插入图片描述
汉字区域独立
在这里插入图片描述
将膨胀后的文字区域删除
在这里插入图片描述
将要识别的文字图片从原图中截取出来并进行处理
在这里插入图片描述
进行数据增强的步骤
在这里插入图片描述
最后结果识别
在这里插入图片描述
总览
原图
在这里插入图片描述
结果
在这里插入图片描述
给个赞吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值