基于SVM向量机创建自己的OCR汉字库

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')

总结:重点在于把完整的一个汉字分割出来,即取两个区域的交点。保存字符文件的步骤需熟练。
接下来就是放不同的图片根据刚刚创建的分类器识别,步骤是图像采集——》图像预处理——》提取分类器——》显示

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值