Halcon 車牌識別

一、流程:

車牌識別的流程一般是:

1) 採集
2)預處理:

  • 增強對比度:有scale_image(灰度變換)、emphasize、equ_histo_image(直方圖均衡化)、灰度圖進行形態學等方法
  • 濾波降噪

3) 定位、矯正車牌
4)字符分割
5)字符提取
6) 字符識別
7)顯示

一、實現:

dev_close_window ()
dev_open_window (0, 0, 680, 320, 'black', WindowHandle)

read_image (Image, 'C:/Users/Administrator/Desktop/車牌.jpg')
*1.預處理
rgb1_to_gray (Image, GrayImage1)
scale_image (GrayImage1, ImageScaled, 6.71053, -1456)
*decompose3 (Image, Red, Green, Blue)
*trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv')
*2.基於顏色的blob分析,定位、矯正車牌
threshold (ImageScaled, Regions, 73, 255)
closing_circle (Regions, RegionOpening1,1)
connection (RegionOpening1, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, ['row','height','area'], 'and', [140.31,28.622,131.63], [500,50,1000])
union1 (SelectedRegions, RegionUnion)
shape_trans (RegionUnion, RegionTrans, 'rectangle2')
*圖像矯正
orientation_region (RegionTrans, Phi)
area_center (RegionTrans, Area, Row, Column)
vector_angle_to_rigid (Row, Column, Phi, Row, Column,0, HomMat2D)
affine_trans_image (Image, ImageAffinTrans, HomMat2D, 'constant', 'false')
affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
reduce_domain (ImageAffinTrans, RegionAffineTrans, ImageReduced)
invert_image (ImageReduced, ImageInvert)
*3.字符分割
rgb1_to_gray (ImageReduced, GrayImage)
scale_image (GrayImage, ImageScaled1, 6.71053, -1456)
threshold (ImageScaled1, Regions1, 73, 255)
closing_circle (Regions1, RegionOpening2,1.5)

connection (RegionOpening2, ConnectedRegions1)
*4.字符提取
select_shape (ConnectedRegions1, SelectedRegions1, ['row','height','area'], 'and', [144.286,28.622,113.78], [200,50,500])
*'character':按照 字母排序   Column:按照列的方式
sort_region (SelectedRegions1, SortedRegions, 'character', 'true', 'column')
count_obj (SortedRegions, Number)
for i := 1 to Number by 1
    select_obj (SortedRegions, ImageAffinTrans, i)
endfor
*4.1訓練:形成trf文件,字符圖像和字符相關聯
words:=['陝','K','7','5','5','5','5']
TrainFile:='C:/Users/Administrator/Desktop/訓練文件/word.trf'
for i := 1 to Number by 1
    select_obj (SortedRegions, ObjectSelected, i)
    append_ocr_trainf (ObjectSelected, ImageReduced, words[i-1], TrainFile)
endfor 

FontFile:='C:/Users/Administrator/Desktop/訓練文件/word.ocr'
read_ocr_trainf_names (TrainFile, CharacterNames, CharacterCount)
NumHidden:=20
*創建神經網絡分類器
create_ocr_class_mlp (8, 10, 'constant', 'default', CharacterNames, 80, 'none', 10, 42, OCRHandle1)
*訓練分類器
trainf_ocr_class_mlp (OCRHandle1, TrainFile, 200, 1, 0.01, Error, ErrorLog)
*保存omc文件
write_ocr_class_mlp (OCRHandle1, FontFile)
*清除句柄
clear_ocr_class_mlp (OCRHandle1)

*TrainFile:
*5.字符識別
read_ocr_class_mlp ('C:/Users/Administrator/Desktop/訓練文件/word.ocr', OCRHandle)                   
do_ocr_multi_class_mlp (SortedRegions, ImageReduced, OCRHandle, Class, Confidence)
dev_display (ImageAffinTrans)
*6.顯示
smallest_rectangle1 (SortedRegions, Row11, Column1, Row2, Column21)
for i := 1 to  Number by 1
    disp_message (WindowHandle, Class[i - 1], 'image', Row2[i - 1], Column1[i - 1], 'blue', 'false')
endfor

注:字符識別時我用的是自己訓練生成的.ocr文件,如果要用halcon自帶的.ocm文件識別字符時,需要將do_ocr_multi_class_mlp算子中第二個輸入圖片裏的字體背景轉換成暗字體(用invert_image )
在這裏插入圖片描述
在這裏插入圖片描述

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