halcon字符識別與訓練

圖片下載:https://weisupreme.github.io/tutorial/2018/08/08/halcon-ocr.html
  訓練代碼:

    *讀取圖片

    read_image (Image, 'D:/github/CodeRecognition/test.png')

    *反轉圖片,使前景爲白色,便於處理

    invert_image (Image, ImageInvert)

    *使用閾值分割,提取前景

    threshold (ImageInvert, Region, 128, 255)

    *計算連通域

    connection (Region, ConnectedRegions)

    *選擇符合要求的區域,即字符

    select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 150, 99999)

    *排序

    sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column')

    *訓練****************

    *計算字符個數

    count_obj (SortedRegions, Number)

    *創建訓練文件******

    *標籤

    words:=['2','0','1','7']

    TrainFile:='D:/github/CodeRecognition/testWords.trf'

    dev_set_check('~give_error') 

    delete_file(TrainFile) 

    dev_set_check('~give_error')

    *生成訓練文件

    for i:=1 to Number by 1 

        select_obj(SortedRegions, SingleWord, i) 

        append_ocr_trainf(SingleWord,Image,words[i-1],TrainFile) 

    endfor

    *訓練ocr

    FontFile:='D:/github/CodeRecognition/testWords.omc'

    *讀取訓練文件

    read_ocr_trainf_names(TrainFile, CharacterNames, CharacterCount)

    NumHidden:=400

    *自己創建神經網絡分類器

    *create_ocr_class_mlp (10, 20, 'constant', 'default', CharacterNames, NumHidden, 'none', 10, 42, OCRHandle)

    *這裏採用halcon預訓練模型;第二次及以後訓練先將文件名改爲FontFile,調用已訓練的參數繼續訓練

    read_ocr_class_mlp('HandWritten_0-9.omc', OCRHandle)

    *訓練

    trainf_ocr_class_mlp (OCRHandle, TrainFile, 200, 1, 0.01, Error, ErrorLog)

    *保存參數到自己命名的文件

    write_ocr_class_mlp(OCRHandle, FontFile) 

    *釋放內存

    clear_ocr_class_mlp(OCRHandle)

  識別代碼:

    read_image (Image, 'D:/github/CodeRecognition/test.png')

    invert_image (Image, ImageInvert)

    threshold (ImageInvert, Region, 128, 255)

    connection (Region, ConnectedRegions)

    select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 150, 99999)

    sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column')

    *計算每一個字符區域中心

    area_center (SortedRegions, Area, Row, Column)

    FontFile:='D:/github/CodeRecognition/testWords.omc'

    *讀取已訓練好的參數

    read_ocr_class_mlp(FontFile, OCRHandle)

    *識別

    do_ocr_multi_class_mlp (SortedRegions, Image, OCRHandle, RecNum, Confidence)

    *顯示在屏幕上

    set_display_font (3600, 27, 'mono', 'true', 'false')

    for i := 0 to |RecNum| - 1 by 1

        disp_message (3600, RecNum[i], 'image', Row[i],Column[i], 'white', 'false')

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