个人也是刚开始学习Halcon在练习过程中发现新手练习需要一些简单的例程可以能够尽快的做出东西出来,这样可以提升学习的乐趣,halcon的例程虽然很多,但是初学者却不懂得如何去选择其中简单的例子来学习。
针对这个情况我结合自己学习的心得分享给大家 ,希望能够一起探讨学习。
这次例程是一个汉字识别的例程主要是利用OCR识别,创建分类器和训练分类器.这个方法也是后续学习过程中 颜色识别和木板纹理识别最很常用的一种深度学习方式。
在这里read_image (Image20200425115323, 'C:/Users/CSCA/Desktop/halcon练习/halcon练习用图片/批注 2020-04-25 115323.png')
*灰度化
rgb1_to_gray (Image20200425115323, GrayImage)
*二值化 选中我们需要的那个区域或者文字
threshold (GrayImage, Regions, 0, 249)
*此处非常的重要 首先通过connection看看所断开的区域 字体是否是一个
*如果不是同一个 就需要用闭运算和膨胀来扩大像素点 使其连接到一起 因为 二值化后的是一个区域
closing_circle (Regions, RegionClosing, 3.3)
*断开 使每个字都是不同的颜色
connection (RegionClosing, ConnectedRegions)
*计算两个区域的交集 也很重要 可以将扩大像素点后的字符变得更加容易分别
intersection (ConnectedRegions, Regions, RegionIntersection)
*对字符进行一个排序 输出一个经过排序的区域 SorttedRegions
sort_region (RegionIntersection, SortedRegions, 'character', 'true', 'column')
*元组中对象的数目
count_obj (SortedRegions, Number)
*遍历排序后的区域 从对象元组中选择对象 第二项是输出的字符
for i := 1 to 5 by 1
* select_obj (SortedRegions, ObjectSelected, i)
select_obj (SortedRegions, SingleWord, i)
endfor
*创建一个words的元组来存放我们已知的汉字
words:=['编','著','杨','家','鑫']
*生成一个trf文件 保存路径为TrainFile
TrainFile:='C:/Users/CSCA/Desktop/halcon练习/word0.trf'
*将字符添加到训练文件中
for i := 1 to 5 by 1
select_obj (SortedRegions, SingleWord, i)
*第一项表示想要训练的角色
*第二项表示字符的灰度值
*第三项是字符的类(名称)
*第四项是训练文件的路径(名称)
*主要作用是将汉字与SingleWord产生一种关系绑定起来
append_ocr_trainf ( SingleWord, GrayImage, words[i-1],TrainFile )
endfor
FontFile:='C:/Users/CSCA/Desktop/halcon练习/word.omc'
*查询哪些字符存储在训练文件中
*第一项是输入
*第二项表示读取的字符的名称 是输出
read_ocr_trainf_names (TrainFile , CharacterNames, CharacterCount)
NumHidden:=30
*使用多层感知器创建OCR分类器
*第四项是 要读取的字符集的所有字符 输出一个句柄
create_ocr_class_mlp (8, 10, 'constant', 'default', CharacterNames, 80, 'none', 10, 42, OCRHandle)
*训练OCR分类器
trainf_ocr_class_mlp (OCRHandle, TrainFile, 200, 1, 0.01, Error, ErrorLog)
*将OCR分类器写入文件FontFile中 此时已经训练结束
write_ocr_class_mlp (OCRHandle, FontFile)
*清除OCR分类器
clear_ocr_class_mlp (OCRHandle)
*从文件中读取OCR分类器
read_ocr_class_mlp ('C:/Users/CSCA/Desktop/halcon练习/word.omc', OCRHandle1)
*使用OCR分类器对多个字符进行分类
*第一项表示要识别的字符
*第四项就是用MLP对字符进行分类的结果
do_ocr_multi_class_mlp (SortedRegions, GrayImage, OCRHandle1, Class, Confidence)插入代码片