*加载图片并对图片进行预处理(直方图均衡(增加图片亮度),线性变换,阈值处理
*【目的:把汉字区域选择出来,文字区域与其他干扰区域不连接】
dev_close_window ()
read_image (Image, 'C:/Users/gwd/Desktop/驱油用表面活性剂的......png')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
* 灰度化
rgb1_to_gray (Image, GrayImage)
*画出一个矩形把需要识别的文字抠图
gen_rectangle1 (ROI_0, 210, 125, 326, 405)
reduce_domain (GrayImage, ROI_0, ImageReduced)
*进行二值化, 阈值操作初步筛选
threshold (ImageReduced, Regions, 92, 252)
*进行闭运算【形态学】,【目的:把汉字区域选择出来,文字区域与其他干扰区域不连接】
closing_rectangle1 (Regions, RegionClosing1, 1.5, 2.5)
connection (RegionClosing1, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, ['area','row','column'], 'and', [0,220.56,142.06], [1000,311.01,500])
*在选择的文字区域上与阈值化后的区域有交集的部分形成显得更精确的文字区域
*【把文字区域膨胀后多余的部分删除】并进行排序
intersection (SelectedRegions, Regions, RegionIntersection)
sort_region (RegionIntersection, SortedRegions, 'character', 'true', 'row')
dev_display (SortedRegions)
count_obj (SortedRegions, Number)
*在阈值化后的区域上把与选择的文字区域有交集的部分选择出来(所有文字形成一个区域),
*形成区域的外接平行矩形并从原图中截取出来,
*最后再进行颜色反转把白色文字转成黑色文字
**************
intersection (Regions, SelectedRegions, RegionIntersection1)
shape_trans (RegionIntersection1, RegionTrans, 'rectangle1')
reduce_domain (Image, RegionTrans, ImageReduced1)
invert_image (ImageReduced1, ImageInvert)
*定义训练文字变量和训练文件
words:=['驱','油','用','表','面','活','性','剂','的','界','面','化','学','与','界','面','流','变','学']
TrainFile :='C:/Users/gwd/Desktop/quyouyong.trf'
*把训练文字变量区域与训练文字变量关联起来(通过区域找到相应图片中的文字把图片与文字变量联系起来)
*并把联系存放在训练文件中【逐字添加】
for i:=1 to Number by 1
select_obj (SortedRegions, ObjectSelected, i)
append_ocr_trainf (ObjectSelected, ImageInvert, words[i-1],TrainFile)
*将单个字符区域、单个字符图像和对应的字符文本联系写入TrainingFile 文件
dev_display (ObjectSelected)
endfor
* 读取训练文件
read_ocr_trainf_names (TrainFile, CharacterNames, CharacterCount)
* 创建模型
create_ocr_class_mlp (8, 10, 'constant', 'default', CharacterNames, 80, 'none', 10, 42, OCRHandle)
* 训练模型
trainf_ocr_class_mlp (OCRHandle, TrainFile, 200, 1, 0.01, Error, ErrorLog)
*识别
do_ocr_multi_class_mlp (SortedRegions, ImageInvert, OCRHandle, Class, Confidence)
* 显示
smallest_rectangle1 (ObjectSelected, Row1, Column1, Row2, Column2)
for i:=1 to Number by 1
disp_message (WindowHandle, Class, 'Image', 0, 0, 'red', 'true')
stop ()
endfor
基于Halcon学习的OCR识别【二】
于 2022-01-15 16:32:26 首次发布