HALCON OCR识别实战




简介:这一篇将训练,识别文字,将图片上的图案识别为字符串并存储


待处理图片:


1.ROI与预处理

 

视觉识别文字之前,需要首先使用一组文字来对神经网络进行训练,这里使用原图来划分ROI区域进行识别

 

训练时候为了减少数据过多的标注时间的消耗,只每个符号划分一个对应图案出来

 HALCON OCR识别实战_第1张图片

 

 

在划分好后,做reduce_domain 得到的结果,在这一结果上使用threshold算子进行二值化即可

HALCON OCR识别实战_第2张图片


该部分的代码

#pre process
read_image (Ocrfind, 'C:/Users/xxxx/Desktop/halcon/class 2/ocrfind.bmp')
gen_rectangle1 (ROI_0, 502, 659.031, 772, 1142.79)
reduce_domain (Ocrfind, ROI_0, ImageReduced)
threshold (ImageReduced, Regions1, 0, 80)
erosion1(Regions1, Regions1, RegionErosion, 1)
connection (Regions1, ConnectedRegions)


2.标注与训练

在使用connection算子划分区域后,需要为区域打上标签,另外还需要调用count_obj算子来获取区域数量,用于之后循环的参数


HALCON OCR识别实战_第3张图片

 ClassNames1 := ['1','0','1','1','3','7','5','6','7','6','-','-','.','.']


区域的排序是从数字到符号,从左到右,第一排到最后一排


在调整参数准备妥当后,我们可以创建并且生成一个训练文件用于之后的训练,这里使用create_ocr_class_mlp算子和trainf_ocr_class_mlp算子

 

 

 

create_ocr_class_mlp算子需要自行进行修改的部分已经在图片中标注,分别是字符的宽度和高度,都有哪些字符,隐藏的MLP单元



HALCON OCR识别实战_第4张图片

示例代码:

create_ocr_class_mlp (100, 100, 'constant', 'default', ['0','1','2','3','4','5','6','7','8','9','.','-'], 80, 'none', 12, 42, OCRHandle)
trainf_ocr_class_mlp(OCRHandle, 'C:/Users/xxxx/Desktop/halcon/class 2 train/train_characters_ocr_manadj.trf', 200, 1, 0.01, Error, ErrorLog)

3.训练文件的修正

 

在完成训练文件生成后,可以在目录下找到该文件,打开HALCON主界面菜单栏的可视化一栏,选择工具-----OCR训练文件浏览器

 

在训练文件浏览器窗口,点击菜单栏文件----加载训练文件,打开刚才生成的训练文件

 

 

查看并对标签和图片进行修正,在完成修正后保存文件,用于后面创建和训练神经网络时候调用



HALCON OCR识别实战_第5张图片


4.验证


完成训练后,使用这一文件去识别训练过程中扣下来的文字


HALCON OCR识别实战_第6张图片


训练流程整体代码:

#pre process
read_image (Ocrfind, 'C:/Users/sinzo/Desktop/halcon/class 2/ocrfind.bmp')
gen_rectangle1 (ROI_0, 502, 659.031, 772, 1142.79)
reduce_domain (Ocrfind, ROI_0, ImageReduced)
threshold (ImageReduced, Regions1, 0, 80)
erosion1(Regions1, Regions1, RegionErosion, 1)
connection (Regions1, ConnectedRegions)

#get how many
count_obj (ConnectedRegions, Number)


 ClassNames1 := ['1','0','1','1','3','7','5','6','7','6','-','-','.','.']


#generator NN Model

create_ocr_class_mlp (100, 100, 'constant', 'default', ['0','1','2','3','4','5','6','7','8','9','.','-'], 80, 'none', 12, 42, OCRHandle)
trainf_ocr_class_mlp(OCRHandle, 'C:/Users/sinzo/Desktop/halcon/class 2 train/train_characters_ocr_manadj.trf', 200, 1, 0.01, Error, ErrorLog)

#ocr
ocrNumbers[Number] := 0
for index:= 1 to Number by 1
    select_obj (ConnectedRegions, testRegion, index)
    do_ocr_multi_class_mlp (testRegion, ImageReduced, OCRHandle, Class, Confidence)
    dev_clear_window()
    dev_display (testRegion)
    disp_message(200000, Class, 'window', 12, 12, 'red', 'true')
    ocrNumbers[index-1] := Class
    disp_message (200000, Class, 'window', 12, 12, 'black', 'true')
endfor
stop()








你可能感兴趣的:(影像相关)