halcon OCR總結

目錄

1.使用仿射變換-極座標轉換 對字體進行矯正

1.1字體傾斜(不水平)

1.2斜體

1.3圓環字

2.識別

2.1自動文本閱讀器

2.2手動文本閱讀器

2.3Blob分析

2.3.1步驟:

2.3.2識別方式


1.使用仿射變換-極座標轉換 對字體進行矯正

  1. 字體傾斜(不水平)
  2. 斜體
  3. 圓環字

1.1字體傾斜(不水平)

* 字體傾斜(不水平)
text_line_orientation (Label, Image, 25, -0.523599, 0.523599, OrientationAngle)
hom_mat2d_identity (HomMat2DIdentity)
hom_mat2d_rotate (HomMat2DIdentity, -OrientationAngle, 0, 0, Deskew)
affine_trans_image (Image, ImageDeskew, Deskew, 'constant', 'false')
affine_trans_region (Label, LabelDeskew, Deskew, 'nearest_neighbor')

1.2斜體

    

* 斜體
text_line_slant (Image, Image, 50, rad(-45), rad(45), SlantAngle)
hom_mat2d_identity (HomMat2DIdentity)
hom_mat2d_slant (HomMat2DIdentity, -SlantAngle, 'x', 0, 0, HomMat2DSlant)
affine_trans_image (Image, ImageRectified, HomMat2DSlant, 'constant', 'true')

1.3圓環字

polar_trans_image_ext (Image, ImagePolar, Row, Column, 0, rad(360), Radius - 30, Radius - 5, WidthP, HeightP, 'bilinear')

2.識別

  1. 自動文本閱讀器
  2. 手動文本閱讀器
  3. blob分析

2.1自動文本閱讀器

它將分割和識別兩個步驟組合成find_text的一個調用,且無需進行大量的參數調整。

 

* 1.使用預先訓練的OCR字體創建自動文本閱讀器
create_text_model_reader ('auto', 'Document_0-9_NoRej', TextModel)

* 2.分割圖像並閱讀文本
find_text (Image, TextModel, TextResultID)

* 顯示分割結果(上圖黃色部分)
get_text_object (Characters, TextResultID, 'all_lines')
dev_display (Image)
dev_display (Characters)

* 3.顯示讀取結果
get_text_result (TextResultID, 'class', Classes)
count_obj (Characters, Number)
for Index := 1 to Number by 1
    select_obj (Characters, SingleChar, Index)
    dev_set_color ('white')
    Class := Classes[Index - 1]
    smallest_rectangle1 (SingleChar, Row1, Column1, Row2, Column2)
    set_tposition (WindowID, Row1 - 17, (Column2 + Column1) * 0.5 - 5)
    write_string (WindowID, Class[0])
endfor

* 4.釋放內存
clear_text_result (TextResultID)
clear_text_model (TextModel)

 

2.2手動文本閱讀器

 

 

2.3Blob分析

2.3.1步驟:

  1. 單個字體的連通域
  2. 調用系統分類器
  3. 識別
  4. 清除分類器

一些重要的函數:

分割:partition_dynamic (SelectedRegions1, Partitioned, 20, 40)

 

2.3.2識別方式

多個識別

do_ocr_multi_class_mlp (SortedRegions, ImageAffinTrans, OCRHandle, Class, Confidence)

單個識別

for I := 1 to Number by 1
    select_obj (SortedRegions, ObjectSelected, I)
    do_ocr_single_class_mlp (ObjectSelected, ImageInvert, OCRHandle, 1, Class, Confidence)
endfor

Example: hdevelop/Applications/OCR/engraved.hdev

* 1> 單個字體的連通域
gray_range_rect (Image, ImageResult, 7, 7)
invert_image (ImageResult, ImageInvert)
threshold (ImageResult, Region, 128, 255)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 1000, 99999)
* 2> 按閱讀順序排序
sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column')

* 外接矩形(用來確定字顯示位置)
shape_trans (SortedRegions, RegionTrans, 'rectangle1')
area_center (RegionTrans, Area, Row, Column)

count_obj (SortedRegions, Number)
* 3> 調用系統的分類器
read_ocr_class_mlp ('Industrial_0-9A-Z_NoRej', OCRHandle)
for I := 1 to Number by 1
    * 4> 單個識別
    select_obj (SortedRegions, ObjectSelected, I)
    do_ocr_single_class_mlp (ObjectSelected, ImageInvert, OCRHandle, 1, Class, Confidence)
endfor

* 5> 清除分類器
clear_ocr_class_mlp (OCRHandle)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章