halcon的三种分类器,即MLP(神经网络)、SVM(支持向量机)、GMM(高斯混合模型)。三种都代表什么就不说了,新人的我只能告诉大家百度吧!
halcon自己的OCR库是不能识别汉字的,需要自己创建,现在有一张图,如下
要求:将汉字“在线编程与调试”这七个字训练,然后保存为OCR库。
直接附上代码:
read_image (Image, 'C:/Users/LWJ/Desktop/AS_1/汉字识别.jpg')
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
rgb1_to_gray (Image, GrayImage)
dev_display (Image) //在这里添加显示是为了导出C#后能显示原图像观察
name := ['在','线','编','程','与','调','试']
*创建OCR的svm训练分类器
create_ocr_class_svm (8, 10, 'constant', 'default',name, 'rbf', 0.02, 0.05, 'one-versus-one', 'normalization', 10, OCRHandle)
threshold (GrayImage, Regions, 215, 255)
*当一个汉字被分为不同区域时,需联合(增加像素的方法)成完整的一个汉字
dilation_circle (Regions, RegionDilation, 2.8)
*分割出不同的汉字
connection (RegionDilation, ConnectedRegions)
*取联合区域ConnectedRegions与二值化区域Regions的交点,实现选择出清晰的汉字
intersection (ConnectedRegions, Regions, RegionIntersection)
*选择形状特征区域,即有选择性的识别汉字
select_shape (RegionIntersection, SelectedRegions, 'area', 'and', 588.07, 956.88)
*区域提取排序
sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column')
*循环保存样本
for i := 1 to |name| by 1
*选择区域SortedRegions中的对象
select_obj (SortedRegions, ObjectSelected, i)
if(i==1)
*将训练的字符存储到字符文件中
write_ocr_trainf (ObjectSelected, GrayImage, name[i-1], 'train_ocr')
else
*向培训文件中添加字符
append_ocr_trainf (ObjectSelected, GrayImage, name[i-1], 'train_ocr')
endif
dev_clear_window ()
dev_display (SortedRegions)
stop ()
endfor
*训练OCR分类器
trainf_ocr_class_svm (OCRHandle, 'train_ocr', 0.001, 'default')
*保存训练结果
write_ocr_class_svm (OCRHandle, '1.osc')
总结:重点在于把完整的一个汉字分割出来,即取两个区域的交点。保存字符文件的步骤需熟练。
接下来就是放不同的图片根据刚刚创建的分类器识别,步骤是图像采集——》图像预处理——》提取分类器——》显示