OCR(Optical Character Recognition),光學字符識別的英文縮寫。
OCR主要步驟
圖像預處理
目標區域分割(ROI)
字符識別
結果處理
1. 圖像預處理
對原始圖像進行灰度化,二值化,模板匹配,降噪,增強等!
2.目標區域分割(ROI)
對預處理后的圖像進行ROI提取,分割出單個字符組成的區域
3.字符識別,即模式識別技術
訓練OCR,利用大量的模板圖片訓練出一個字符分類器
使用OCR,將訓練好的分類器用于字符分類,類似于手寫數字識別!
4.結果處理
將識別完的文字按特定的次序和規則組合輸出!
上述4個步驟中,OCR的核心部分自然是第3步,即模式識別技術
模式識別技術
訓練分類器
第一步:將分割好的字符區域加入訓練集,使用函數
append_ocr_trainf(Character,Image::Class,TrainingFile:)
參數解析:
Character:字符區域
Image:灰度圖像
Class:分類標簽
TrainingFile:訓練集文件名,一般后綴為.trf
功能說明:用于制作訓練集,使用與TrainingFile文件相同的訓練文件格式,將字符附加到現有文件。如果該文件不存在,則生成新文件。TrainingFile如果未指定擴展名,則默認添加擴展名.trf
第二步:創建分類器,使用函數
create_ocr_class_mlp(::WidthCharacter, HeightCharacter,Interpolation,Features,Characters,NumHidden,Preprocessing,NumComponents,RandSeed:OCRHandle)
參數解析:
WidthCharacter:輸入被分割的字符縮放到指定的寬度
HeightCharacter:輸入被分割的字符縮放到指定的高度
Interpolation:縮放的插值方式
Features:特征類型,一般選’default’
Characters:分類的特征向量
NumHidden: MLP(多層感知器-人工神經網絡)中隱藏層神經元的個數
Preprocessing:矢量特征轉換的預處理類型
NumComponents:匹配字符的數量
RandSeed:隨機種子
OCRHandle:OCR分類器的句柄
功能說明:創建一個MLP模型并初始化
第三步:訓練、保存、清除分類器,使用函數
trainf_ocr_class_mlp(::OCRHandle,TrainingFile,MaxIterations,WeightTolerance,ErrorTolerance:Error,ErrorLog) write_ocr_class_mlp(::OCRHandle,FileName:) clear_ocr_class_mlp(:)
訓練MLP分類器參數解析:
OCRHandle:OCR分類器的句柄
TrainingFile:訓練集
MaxIterations:最大迭代次數
WeightTolerance:初始權重公差
ErrorTolerance:初始損失學習率
Error:整個訓練集上的均差
ErrorLog:每一次訓練的均差記錄
功能說明:使用訓練集訓練模型,
保存分類器模型參數解析:
FileName:輸出的模型文件名,不指定擴展名,則擴展名默認為.omc
功能說明:將訓練好的模型保存為文件
清除分類器模型功能說明:清除模型,釋放緩存
使用分類器
讀取、使用訓練好的模型分類的函數如下:
read_ocr_class_mlp(:OCRHandle) do_ocr_single_class_mlp(Character,Image::OCRHandle,Num:Class,Confidence) do_ocr_multi_class_mlp(Character,Image:Class,Confidence)
讀取模型函數參數解析:
FileName:模型文件名,如果未指定擴展名,則默認使用擴展名.omc
OCRHandle:成功讀取模型后生成的模型句柄
功能說明:從模型文件中讀出模型
模型單個字符識別參數解析:
Character:字符區域
Image:字符圖片
Num:輸出概率最大的前Num個分類類別
Class:輸出類別
Confidence:輸出分類的置信度
功能說明:對單個區域進行的字符識別
模型多個字符識別參數解析:
Class:輸出的分類數組
功能說明:輸出多個字符區域的類別
其它函數
獲取訓練集信息:
read_ocr_trainf_names (: CharacterNames, CharacterCount)
參數解析:
TrainingFile:訓練集
CharacterNames:輸出分類數組
CharacterCount:訓練集字符區域總數
完整示例代碼如下(僅作為代碼示例,無法運行):
WindowHandle:=3600 dev_open_window (0, 0, 512, 512, ‘black’, WindowHandle) gen_empty_obj (EmptyObject) read_image (Image, ‘test1.jpg’) rgb1_to_gray (Image, GrayImage) for Index := 1 to 4 by 1 disp_message (WindowHandle, ‘手動ROI’,‘window’, 12, 12, ‘yellow’, ‘false’) draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2) gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2) reduce_domain (GrayImage, Rectangle, ImageReduced1) threshold (ImageReduced1, Region1, 128, 255) concat_obj (EmptyObject, Region1, EmptyObject) endfor words:=[‘1’,‘2’,‘3’,‘4’] *按列位置排序 sort_region (EmptyObject, SortedRegions1, ‘character’, ‘true’, ‘column’) FontName := ‘F:DataSetNum’ TrainingFileName := FontName+‘.trf’ for Index1:=1 to 4 by 1 select_obj (SortedRegions1, ObjectSelected1, Index1) append_ocr_trainf (ObjectSelected1, Image, words[Index1-1], TrainingFileName) endfor read_ocr_trainf_names (TrainingFileName, CharacterNames, CharacterCount) create_ocr_class_mlp (8, 10, ‘constant’, ‘default’, CharacterNames, 80, ‘none’, 10, 42, OCRHandle) trainf_ocr_class_mlp (OCRHandle, TrainingFileName, 200, 1, 0.01, Error, ErrorLog) write_ocr_class_mlp (OCRHandle, FontName) *導入另一張做測試的圖 read_image (Image1, ‘test2.jpg’) threshold (Image1, testwordregion, 125, 255) connection (testwordregion, ConnectedwordRegions) select_shape (ConnectedwordRegions, SelectedwordRegions, ‘height’, ‘and’, 50, 250) sort_region (SelectedwordRegions, SortedRegions2, ‘upper_left’, ‘true’, ‘column’) count_obj(SortedRegions2, Number) *開始識別 read_ocr_class_mlp (FontName, OCRHandle1) do_ocr_multi_class_mlp (SortedRegions2, Image1, OCRHandle1, Class, Confidence) *顯示結果 disp_message(WindowHandle, ‘識別結果:’, ‘image’, 30, 50, ‘white’, ‘false’) for i:=1 to Number by 1 disp_message(WindowHandle, Class[i-1], ‘image’, 30, 120+40*i, ‘yellow’, ‘false’) endfor
Halcon的OCR模型主要有多層神經網絡MLP、支持向量機SVM、K最近鄰KNN、卷積神經網絡CNN四種,以上關于MLP的各類函數,其它模型也有對應的函數,這里就不作詳細介紹了。在OCR領域,CNN和MLP應用比較廣泛,而SVM在打印體的識別上也可以使用,KNN的計算量和模型原理并不適合用于多屬性(點)的算法訓練!
責任編輯:lq
-
光學
+關注
關注
3文章
751瀏覽量
36252 -
OCR
+關注
關注
0文章
144瀏覽量
16355 -
識別技術
+關注
關注
0文章
203瀏覽量
19699
原文標題:Halcon OCR識別
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論