Halcon光学字符训练与识别

待识别原图
在这里插入图片描述
识别过程:
阈值处理后:
在这里插入图片描述
开始分割处理
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
着色字符:
在这里插入图片描述
排序后:
在这里插入图片描述
识别结果:
在这里插入图片描述

Halcon HDevelop代码:

dev_update_off ()
dev_close_window ()
* read_image (Image, 'ocr/wafer_semi_font_01')
dev_open_window (0, 0, -1, -1, 'black', WindowHandle)
* dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)read_image (Image, 'd:/Desktop/vision/ZN_TXT01.png')
*read_image (Image, 'd:/Desktop/vision/chuanchuan.png')
get_image_size (Image, Width, Height)*dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
* dev_set_draw ('margin')
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_line_width (2)
* dev_set_color ('green')
*dev_set_colored (12)*以顏色填充方式顯示字符,實心
dev_set_draw ('fill')* Characters must be black-on-white, i.e., dark characters on a light background*反转图片,使前景为白色,便于处理invert_image (Image, ImageInvert)*     mean_image (Image, ImageMean, 31, 31)
*     dyn_threshold (Image, ImageMean, RegionDynThresh, 0.1, 'light')*使用阈值分割,提取前景threshold (ImageInvert, Region, 155, 255)*   fill_up_shape (Region, RegionFillUp, 'area', 100, 10)*膨脹,筆畫加粗
*     dilation_circle (Region, Reg_dil, 1.5)  *字符筆畫泛暈,加粗筆畫,橫向和豎直方向擴展面積*將單個字符暈染連成一塊closing_rectangle1 (Region, RegionClosing1, 12, 27)*  opening_rectangle1 (RegionClosing1, RegionOpening1,1, 3)
*   fill_up_shape (RegionClosing1, RegionFillUp, 'area', 100, 10)*畫個方塊,rad裡面是旋轉角度gen_rectangle2 (Rectangle, 10, 10, rad(110), 3, 7.3)*將上面的方塊用於區域的連接closing (RegionClosing1, Rectangle, RegionClosing2)*填充算子,將整個字符區域填充  
*    fill_up(RegionClosing1,RegionFillUp)    
*     closing_rectangle1 (RegionClosing1, RegionClosing2, 20, 20)*以9度閉合畫圓圈closing_circle (RegionClosing2, IntermedCharacters, 9) connection (IntermedCharacters, ConnPatterns)*選中區域變形為方形
shape_trans (ConnPatterns, CharBlocks, 'rectangle1')
*这个算子 是根据文字单体大小 用矩形将文字区分开来(为后面求交集做准备)
partition_rectangle (CharBlocks, CharCandidates, 60,150)*求交集 顏色模塊在前,原字符再后,才能單獨著色交集后的單體字符intersection (CharCandidates, Region, RegionIntersection)  
dev_clear_window()*dev_clear_obj(CharCandidates)
dev_display(RegionIntersection)*排序
sort_region (RegionIntersection, FinalCharacters, 'character', 'true', 'row')
dev_display(FinalCharacters)*-----此行上面识别图片中字符到单字符着色正确-----*开始训练*****************计算字符个数count_obj (FinalCharacters, Number)*创建训练文件*******标签words:=['四','川','省','成','都','市','锦','州','路','达','府','院']TrainFile:='D:/testWords.trf'FontFile:='D:/testWords.omc'dev_set_check('~give_error') *delete_file(TrainFile) *dev_set_check('~give_error')*生成训练文件for i:=1 to Number by 1 select_obj(FinalCharacters, SingleWord, i) currentChar:=words[i-1]append_ocr_trainf(SingleWord,Image,currentChar,TrainFile) endfor*读取训练文件read_ocr_trainf_names(TrainFile, CharacterNames, CharacterCount)*这里采用halcon预训练模型;第二次及以后训练先将文件名改为FontFile,调用已训练的参数继续训练*read_ocr_class_mlp('HandWritten_0-9.omc', OCRHandle)*自己创建神经网络分类器create_ocr_class_mlp (8, 10, 'constant', 'default', CharacterNames, 80, 'none', 10, 42, OCRHandle)*训练trainf_ocr_class_mlp (OCRHandle, TrainFile, 200, 1, 0.01, Error, ErrorLog)*保存参数到自己命名的分类器文件write_ocr_class_mlp(OCRHandle, FontFile) *释放内存*clear_ocr_class_mlp(OCRHandle)**------------下面是识别代码---------------------------------------*開始識別read_ocr_class_mlp (FontFile, OCRHandle)do_ocr_multi_class_mlp (FinalCharacters, Image, OCRHandle, Class, Confidence)*顯示識別的字符到最小的單字符個體矩形左下角smallest_rectangle1 (FinalCharacters, Row11, Column1, Row2, Column21)disp_message (WindowHandle, Class, 'image', Row2, Column1+10, 'green', 'false')*释放内存clear_ocr_class_mlp(OCRHandle)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部