分享Halcon字符识别相关代码:
其中内容包括字符检测、字符筛选、字符识别、字符显示等部分
************字符识别部分***********
***字符极性***
LightDark1 := 'dark'
***字符库文件***
Classifier:='train/char.omc1'
read_image(TestImage, 'image/test5.png')
count_channels (TestImage, Channels1)
if (Channels1 == 3)
rgb1_to_gray (TestImage, GrayImage1)
elseif (Channels1 != 3 and Channels1 != 1)
access_channel(TestImage, GrayImage1, 1)
else
GrayImage1:=TestImage
endif
get_image_size (GrayImage1, Width1, Height1)
dev_set_draw ('margin')
*框选识别区域
for Rindex := 1 to 10 by 1
dev_clear_window ()
dev_open_window (0, 0, Width1, Height1, 'black', WindowHandle1)
dev_display (GrayImage1)
disp_message(WindowHandle1, '框选字符区域\n 单击右键!', 'window', 12, 12, 'red', 'false')
draw_rectangle1 (WindowHandle1, Row1, Column1, Row2, Column2)
gen_rectangle1(Rectangle1, Row1, Column1, Row2, Column2)
*字符区域
reduce_domain (GrayImage1, Rectangle1, ImageReduced1)
*阈值分割,提取前景
auto_threshold (ImageReduced1, Regions1, 10)
count_obj (Regions1, Number1)
if (LightDark1=='dark')
select_obj (Regions1, RObjectSelected, 1)
elseif (LightDark1=='light')
select_obj (Regions1, RObjectSelected, Number1-1)
endif
*设置字符膨胀参数
dilation_rectangle1 (RObjectSelected, RegionDilation1, 1, 1)
*设置字符粘连参数
Radius1:=0.5
*执行开运算,消除粘连
opening_circle (RegionDilation1, RegionOpening1, Radius1)
*分割字符
connection (RegionOpening1, ConnectedRegions1)
*字符宽度范围
WidthMin1:=0
WidthMax1:=200
select_shape (ConnectedRegions1, WSelectedRegions1, 'width', 'and', WidthMin1, WidthMax1)
*字符高度范围
HeightMin1:=0
HeightMax1:=200
select_shape (WSelectedRegions1, HSelectedRegions1, 'height', 'and', HeightMin1, HeightMax1)
*字符面积范围
AreaMin1:=0
AreaMax1:=4000
select_shape (HSelectedRegions1, ASelectedRegions1, 'area', 'and', AreaMin1, AreaMax1)
*字符角度范围
PhiMin1:=-45
PhiMax1:=45
select_shape (ASelectedRegions1, PSelectedRegions1, 'phi', 'and', PhiMin1, PhiMax1)
*矩形框显示字符位置
shape_trans (PSelectedRegions1, RegionTrans1, 'rectangle1')
*计数
count_obj (PSelectedRegions1, CharacterNums1)
*排序
sort_region(PSelectedRegions1, SortedRegions1, 'character', 'true', 'column')
*读取已训练分类器
read_ocr_class_mlp(Classifier, OCRHandle1)
*送入分类器字符识别
do_ocr_single_class_mlp (SortedRegions1, ImageReduced1, OCRHandle1, 1, Class1, Confidence)
*显示字符识别结果
set_display_font (WindowHandle1, 35, 'mono', 'false', 'false')
ArrayConfidence := []
ArrayClass := []
for IndexCharacter := 1 to CharacterNums1 by 1
select_obj (SortedRegions1, CharacterSelected, IndexCharacter)
do_ocr_single_class_mlp(CharacterSelected, TestImage, OCRHandle1,1, Class, Confidence)
ArrayConfidence := [ArrayConfidence,Confidence]
ArrayClass := [ArrayClass,Class]
endfor
disp_message (WindowHandle1, ArrayClass, 'image', 0, 0, 'green', 'false')
stop()
endfor
测试结果: