[ OCR识别 ] find_text_dongle

使用find_text分割文本,并进行OCR识别

read_image (Image, 'ocr/dongle_01')
read_ocr_class_mlp ('DotPrint_NoRej', OCRHandle)
* manual: 手动模式,需要手动设置所有参数
create_text_model_reader ('manual', [], TextModel)
* 字符宽度24像素
set_text_model_param (TextModel, 'manual_char_width', 24)
* 字符高度33像素
set_text_model_param (TextModel, 'manual_char_height', 33)
* 启用点阵打印模式
set_text_model_param (TextModel, 'manual_is_dotprint', 'true')
* 最大文本行数为2set_text_model_param (TextModel, 'manual_max_line_num', 2)
* 不返回标点符号
set_text_model_param (TextModel, 'manual_return_punctuation', 'false')
* 不返回分隔符
set_text_model_param (TextModel, 'manual_return_separators', 'false')
* 字符笔画宽度4像素
set_text_model_param (TextModel, 'manual_stroke_width', 4)
* 消除水平线干扰
set_text_model_param (TextModel, 'manual_eliminate_horizontal_lines', 'true')
* 6个字符 + 1个分隔符 + 8个字符
set_text_model_param (TextModel, 'manual_text_line_structure_0', '6 1 8')
* 8个字符 + 10个字符
set_text_model_param (TextModel, 'manual_text_line_structure_1', '8 10')
* 19个连续字符
set_text_model_param (TextModel, 'manual_text_line_structure_2', '19')


* 固定前缀 1个数字 1个大写字母 3个数字4个十六进制字符
TextPattern1 := '(FLEXID[0-9][A-Z][0-9]{3}[A-F0-9]{4})'
* 3个大写字母 5个数字 可选的任意字符(通常是分隔符) 1个字母+4个数字 1个字母+4个数字
TextPattern2 := '([A-Z]{3}[0-9]{5}.?[A-Z][0-9]{4}[A-Z][0-9]{4})'
Expression := TextPattern1 + '|' + TextPattern2
NumImages := 7
for I := 1 to NumImages by 1
    read_image (Image, 'ocr/dongle_' + I$'02')
    
    binary_threshold (Image, Region, 'max_separability', 'dark', UsedThreshold)
    opening_rectangle1 (Region, RegionOpening, 400, 50)
    erosion_rectangle1 (RegionOpening, RegionOpening, 11, 11)
    connection (RegionOpening, ConnectedRegions)
    select_shape_std (ConnectedRegions, SelectedRegion, 'max_area', 70)
    reduce_domain (Image, SelectedRegion, ImageReduced)
    scale_image_max (ImageReduced, ImageScaleMax)
    * 检测文本行的倾斜角度 35: 文本行高度估计
    * 搜索角度范围±30text_line_orientation (SelectedRegion, ImageScaleMax, 35, rad(-30), rad(30), OrientationAngle)
    rotate_image (ImageScaleMax, ImageRotate, deg(-OrientationAngle), 'constant')
    * 使用前面配置的TextModel检测文本
    find_text (ImageRotate, TextModel, TextResult)
    * 获取检测到的文本行数
    get_text_result (TextResult, 'manual_num_lines', NumLines)

    for J := 0 to NumLines - 1 by 1
        get_text_object (Line, TextResult, ['manual_line',J])
        * 核心OCR识别函数
        * NumAlternatives: 候选字符数量(除了字符识别外,还会根据单词调整候选字符)
        * NumCorrections:   根据单词调整候选字符的次数
        do_ocr_word_mlp (Line, ImageRotate, OCRHandle, Expression, 3, 5, Class, Confidence, Word, Score)
        smallest_rectangle1 (Line, Row1, Column1, Row2, Column2)
        count_obj (Line, NumberOfCharacters)
        
    endfor
    if (I < NumImages)
        stop ()
    endif
endfor

你可能感兴趣的:(Halcon官方示例,ocr,计算机视觉,图像处理)