目錄
1.使用仿射變換-極座標轉換 對字體進行矯正
- 字體傾斜(不水平)
- 斜體
- 圓環字
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.識別
- 自動文本閱讀器
- 手動文本閱讀器
- 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步驟:
- 單個字體的連通域
- 調用系統分類器
- 識別
- 清除分類器
一些重要的函數:
分割: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)