<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Halcon OCR識(shí)別

          共 4169字,需瀏覽 9分鐘

           ·

          2021-05-10 08:29

           OCR(Optical Character Recognition),光學(xué)字符識(shí)別的英文縮寫(xiě)。

          OCR主要步驟

          • 圖像預(yù)處理

          • 目標(biāo)區(qū)域分割(ROI)

          • 字符識(shí)別

          • 結(jié)果處理

          1. 圖像預(yù)處理

          對(duì)原始圖像進(jìn)行灰度化,二值化,模板匹配,降噪,增強(qiáng)等!

          2.目標(biāo)區(qū)域分割(ROI)

          對(duì)預(yù)處理后的圖像進(jìn)行ROI提取,分割出單個(gè)字符組成的區(qū)域

          3.字符識(shí)別,即模式識(shí)別技術(shù)

          • 訓(xùn)練OCR,利用大量的模板圖片訓(xùn)練出一個(gè)字符分類器

          • 使用OCR,將訓(xùn)練好的分類器用于字符分類,類似于手寫(xiě)數(shù)字識(shí)別!

          4.結(jié)果處理

          將識(shí)別完的文字按特定的次序和規(guī)則組合輸出!


          上述4個(gè)步驟中,OCR的核心部分自然是第3步,即模式識(shí)別技術(shù)

          模式識(shí)別技術(shù)

          訓(xùn)練分類器

          第一步:將分割好的字符區(qū)域加入訓(xùn)練集,使用函數(shù)

          append_ocr_trainf(Character,Image::Class,TrainingFile:)

          參數(shù)解析:
          Character:字符區(qū)域
          Image:灰度圖像
          Class:分類標(biāo)簽
          TrainingFile:訓(xùn)練集文件名,一般后綴為.trf
          功能說(shuō)明:用于制作訓(xùn)練集,使用與TrainingFile文件相同的訓(xùn)練文件格式,將字符附加到現(xiàn)有文件。如果該文件不存在,則生成新文件。TrainingFile如果未指定擴(kuò)展名,則默認(rèn)添加擴(kuò)展名.trf

          第二步:創(chuàng)建分類器,使用函數(shù)

          create_ocr_class_mlp(::WidthCharacter, HeightCharacter,Interpolation,Features,Characters,NumHidden,Preprocessing,NumComponents,RandSeed:OCRHandle)

          參數(shù)解析:
          WidthCharacter:輸入被分割的字符縮放到指定的寬度
          HeightCharacter:輸入被分割的字符縮放到指定的高度
          Interpolation:縮放的插值方式
          Features:特征類型,一般選’default’
          Characters:分類的特征向量
          NumHidden: MLP(多層感知器-人工神經(jīng)網(wǎng)絡(luò))中隱藏層神經(jīng)元的個(gè)數(shù)
          Preprocessing:矢量特征轉(zhuǎn)換的預(yù)處理類型
          NumComponents:匹配字符的數(shù)量
          RandSeed:隨機(jī)種子
          OCRHandle:OCR分類器的句柄
          功能說(shuō)明:創(chuàng)建一個(gè)MLP模型并初始化

          第三步:訓(xùn)練、保存、清除分類器,使用函數(shù)

          trainf_ocr_class_mlp(::OCRHandle,TrainingFile,MaxIterations,WeightTolerance,ErrorTolerance:Error,ErrorLog)
          write_ocr_class_mlp(::OCRHandle,FileName:)
          clear_ocr_class_mlp(::OCRHandle:)

          訓(xùn)練MLP分類器參數(shù)解析:
          OCRHandle:OCR分類器的句柄
          TrainingFile:訓(xùn)練集
          MaxIterations:最大迭代次數(shù)
          WeightTolerance:初始權(quán)重公差
          ErrorTolerance:初始損失學(xué)習(xí)率
          Error:整個(gè)訓(xùn)練集上的均差
          ErrorLog:每一次訓(xùn)練的均差記錄
          功能說(shuō)明:使用訓(xùn)練集訓(xùn)練模型,

          保存分類器模型參數(shù)解析:
          FileName:輸出的模型文件名,不指定擴(kuò)展名,則擴(kuò)展名默認(rèn)為.omc
          功能說(shuō)明:將訓(xùn)練好的模型保存為文件

          清除分類器模型功能說(shuō)明:清除模型,釋放緩存

          使用分類器

          讀取、使用訓(xùn)練好的模型分類的函數(shù)如下:

          read_ocr_class_mlp(::FileName:OCRHandle)
          do_ocr_single_class_mlp(Character,Image::OCRHandle,Num:Class,Confidence)
          do_ocr_multi_class_mlp(Character,Image::OCRHandle:Class,Confidence)

          讀取模型函數(shù)參數(shù)解析:
          FileName:模型文件名,如果未指定擴(kuò)展名,則默認(rèn)使用擴(kuò)展名.omc
          OCRHandle:成功讀取模型后生成的模型句柄
          功能說(shuō)明:從模型文件中讀出模型

          模型單個(gè)字符識(shí)別參數(shù)解析:
          Character:字符區(qū)域
          Image:字符圖片
          Num:輸出概率最大的前Num個(gè)分類類別
          Class:輸出類別
          Confidence:輸出分類的置信度
          功能說(shuō)明:對(duì)單個(gè)區(qū)域進(jìn)行的字符識(shí)別

          模型多個(gè)字符識(shí)別參數(shù)解析:
          Class:輸出的分類數(shù)組
          功能說(shuō)明:輸出多個(gè)字符區(qū)域的類別

          其它函數(shù)

          獲取訓(xùn)練集信息:

          read_ocr_trainf_names (::TrainingFile: CharacterNames, CharacterCount)

          參數(shù)解析:
          TrainingFile:訓(xùn)練集
          CharacterNames:輸出分類數(shù)組
          CharacterCount:訓(xùn)練集字符區(qū)域總數(shù)

          完整示例代碼如下(僅作為代碼示例,無(wú)法運(yùn)行):

          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, '手動(dòng)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:\DataSet\Num'
          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)

          *導(dǎo)入另一張做測(cè)試的圖
          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)
          *開(kāi)始識(shí)別
          read_ocr_class_mlp (FontName, OCRHandle1)
          do_ocr_multi_class_mlp (SortedRegions2, Image1, OCRHandle1, Class, Confidence)

          *顯示結(jié)果
          disp_message(WindowHandle, '識(shí)別結(jié)果:', '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模型主要有多層神經(jīng)網(wǎng)絡(luò)MLP、支持向量機(jī)SVM、K最近鄰KNN、卷積神經(jīng)網(wǎng)絡(luò)CNN四種,以上關(guān)于MLP的各類函數(shù),其它模型也有對(duì)應(yīng)的函數(shù),這里就不作詳細(xì)介紹了。在OCR領(lǐng)域,CNN和MLP應(yīng)用比較廣泛,而SVM在打印體的識(shí)別上也可以使用,KNN的計(jì)算量和模型原理并不適合用于多屬性(點(diǎn))的算法訓(xùn)練!



           End 


          聲明:部分內(nèi)容來(lái)源于網(wǎng)絡(luò),僅供讀者學(xué)術(shù)交流之目的。文章版權(quán)歸原作者所有。如有不妥,請(qǐng)聯(lián)系刪除。


          點(diǎn)「在看」的人都變好看了哦!
          瀏覽 109
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本操逼片| 人人爱人人草91 | 人人做人人摸 | 在线视频免费电影亚洲色图 | 色色免费小电影 |