Halcon图像处理-OCR字符识别,训练字库

 

//第一个汉字训练trf文件
*采集图像
read_image (Hanzi, '汉字训练.png')
*每个汉字的名字 define the name for chars
Name := ['汉','字','训','练']
*预处理 + 抠图
rgb1_to_gray (Hanzi, GrayImage)
scale_image (GrayImage, ImageScaled, 1.12832, 0)
binary_threshold (ImageScaled, Region, 'max_separability', 'dark', UsedThreshold)
connection (Region, ConnectedRegions)
dilation_circle (Region, RegionDilation, 10)
connection (RegionDilation, ConnectedRegions1)
intersection (ConnectedRegions1, Region, RegionIntersection1)
sort_region (RegionIntersection1, sortCharacters1, 'character', 'true', 'column')
dev_clear_window ()
dev_display (RegionIntersection1)

gen_rectangle1 (ROI_0, 13.494, 8.01224, 376.171, 555.988)

* gen_rectangle1 (ROI_0, 16.5044, 7.22461, 118.531, 554.568)
* gen_rectangle1 (ROI_0, 27.5583, 38.1548, 192.117, 519.065)
reduce_domain (Hanzi, ROI_0, ImageReduced)
reduce_domain (RegionIntersection1, ROI_0, ImageReduced1)
sort_region (ImageReduced1, sortCharacters, 'character', 'true', 'column')

*逐个显示每一个文字区域,可以不用显示
dev_display (sortCharacters)
count_obj (sortCharacters, Number)
gen_empty_obj (FinalChars)
for index := 1 to Number by 1
    select_obj (sortCharacters, selectChars, index)
    dev_clear_window ()
    dev_display (selectChars)    
    concat_obj (FinalChars, selectChars, FinalChars)
endfor
stop ()
*输入一个新的trf文件路径

Path_trf_ALL := 'Mytrain190103.trf'
*分别给每一个被训练的字符定义标识
NameForAll := []
for n := 0 to 3 by 1    
    for nn := 1 to 3 by 1        
        NameForAll := [NameForAll,Name[n]]
    endfor    
endfor
stop ()
*创建trf文件
write_ocr_trainf (FinalChars, Hanzi, NameForAll, Path_trf_ALL)

read_ocr_trainf_names (Path_trf_ALL, CharacterNames, CharacterCount)

create_ocr_class_mlp (8, 10, 'constant', 'default', CharacterNames, 80, 'none',26, 42, OCRHandle)
*训练文件
trainf_ocr_class_mlp (OCRHandle, Path_trf_ALL, 200, 1, 0.01, Error1, ErrorLog1)

do_ocr_multi_class_mlp (sortCharacters1, Hanzi, OCRHandle, Class, Confidence)

area_center (sortCharacters1, Area, Row, Column)

dev_display (Hanzi)
for J := 0 to |Row| - 1 by 1
    disp_message (3600, Class[J], 'image', Row[J] + 15, Column[J] +2, 'blue', 'false')
endfor
clear_ocr_class_mlp (OCRHandle)

****************************************************************************************
//追加新的训练字符

read_image (NewHanzi, '追加.png')

rgb1_to_gray (NewHanzi, GrayImage)
scale_image (GrayImage, ImageScaled, 2.00787, -82)
binary_threshold (ImageScaled, Region, 'max_separability', 'dark', UsedThreshold)
dilation_circle (Region, RegionDilation, 5)
connection (RegionDilation, ConnectedRegions)
intersection (ConnectedRegions, Region, RegionIntersection)
sort_region (RegionIntersection, sortChars, 'character', 'true', 'column')

count_obj (sortChars, Number)
gen_empty_obj (FinalChars)
for index := 1 to Number by 1
    select_obj (sortChars, selectChars, index)
    dev_clear_window ()
    dev_display (selectChars)    
    concat_obj (FinalChars, selectChars, FinalChars)
endfor
stop ()

Path_trf := 'Mytrain190103.trf'
NewName := ['追','加']
*create trf file  one by one 名字逐个的付给被训练的字符 

rrow := 3
rcolum := 2

i := 1
for index := 1 to rcolum by 1   
    dev_clear_window ()
    count := rrow*index
    for row_1 := i to count by 1 
              select_obj (FinalChars, ObjectSelected1, row_1)
        append_ocr_trainf (ObjectSelected1, ImageScaled, NewName[index-1], Path_trf)
        dev_clear_window ()
        dev_display (ObjectSelected1)        
    endfor
    i := i+rrow
endfor
stop ()

read_ocr_trainf_names (Path_trf, CharacterNames, CharacterCount)

create_ocr_class_mlp (8, 10, 'constant', 'default', CharacterNames, 80, 'none', 10, 42, OCRHandle_test)

trainf_ocr_class_mlp (OCRHandle_test, Path_trf, 200, 1, 0.01, Error, ErrorLog)

do_ocr_multi_class_mlp (FinalChars, NewHanzi, OCRHandle_test, Class_test, Confidence)
area_center (FinalChars, Area, Row, Column)

dev_display (NewHanzi)
for J := 0 to |Row| - 1 by 1
    disp_message (3600, Class_test[J], 'image', Row[J] + 15, Column[J] +2, 'blue', 'false')
endfor
*清楚句柄:OCRHandle_test
clear_ocr_class_mlp (OCRHandle_test)
stop ()

//测试2:使用单个字符逐个识别

read_ocr_trainf_names (Path_trf, CharacterNames_single, CharacterCount)

create_ocr_class_mlp (8, 10, 'constant', 'default', CharacterNames_single, 80, 'none', 10, 42, OCRHandle_single)

trainf_ocr_class_mlp (OCRHandle_single, Path_trf, 200, 1, 0.01, Error, ErrorLog)

area_center (FinalChars, Area, Row_single, Column_single)
count_obj (FinalChars, Number_single)
* read_ocr_class_mlp (FontName, OCRHandle)
dev_display (NewHanzi)
for i := 1 to Number_single by 1
    select_obj (FinalChars, ObjectSelected_single, i)
     *单个读取识别
    do_ocr_single_class_mlp (ObjectSelected_single, NewHanzi, OCRHandle_single, 1, Class_single, Confidence)
    disp_message (3600, Class_single, 'image', Row_single[i-1]+10, Column_single[i-1], 'red', 'false')
endfor
*清除句柄:OCRHandle_single
clear_ocr_class_mlp (OCRHandle_single)

//测试3:将训练文件保存为omc文件

read_ocr_trainf_names (Path_trf, CharacterNames_omc, CharacterCount)

create_ocr_class_mlp (8, 10, 'constant', 'default', CharacterNames_omc, 80, 'none', 10, 42, OCRHandle_omc)

trainf_ocr_class_mlp (OCRHandle_omc, Path_trf, 200, 1, 0.01, Error1, ErrorLog1)

path_omc := 'Mytrain190103_omc_file'
write_ocr_class_mlp (OCRHandle_omc, path_omc)


read_ocr_class_mlp (path_omc, OCRHandle_omc)
*直接识别字符,为简单方便这里使用多个识别
do_ocr_multi_class_mlp (FinalChars, NewHanzi, OCRHandle_omc, Class, Confidence1)

area_center (FinalChars, Area, Row_omc, Column_omc)

dev_display (NewHanzi)
for J := 0 to |Row| - 1 by 1
    *在图形窗口显示识别汉字
    disp_message (3600, Class[J], 'image', Row_omc[J] + 15, Column_omc[J] +2, 'blue', 'false')
endfor
clear_ocr_class_mlp (OCRHandle_omc)

********************************************************************************************************
//测试训练的文件

dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image (ImageTestOmc, '测试训练文件.png')
rgb1_to_gray (ImageTestOmc, GrayImage)
scale_image (GrayImage, ImageScaled, 1.25616, 0)
binary_threshold (ImageScaled, Region, 'max_separability', 'dark', UsedThreshold)
dilation_circle (Region, RegionDilation, 8)
connection (RegionDilation, ConnectedRegions)
intersection (ConnectedRegions, Region, RegionIntersection)
sort_region (RegionIntersection, FinalChars, 'character', 'true', 'row')

path_Myomc := 'Mytrain190103_omc_file'

read_ocr_class_mlp (path_Myomc, OCRHandle)
*识别文字
do_ocr_multi_class_mlp (FinalChars, ImageScaled, OCRHandle, Class, Confidence)
*显示测试结果  获取每一个字符的坐标
area_center (FinalChars, Area, Row, Column)
dev_display (ImageTestOmc)
dev_set_color ('red')
for index := 1 to |Row| by 1 
    set_tposition (WindowHandle, Row[index-1]+80, Column[index-1])
    write_string (WindowHandle, Class[index-1])
*     disp_message (WindowHandle, Class[index-1], 'window', Row[index-1], Column[index-1]-100, 'black', 'true')
endfor
clear_ocr_class_mlp (OCRHandle)

 

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值