1. 程式人生 > >程式練習1:車牌識別程式

程式練習1:車牌識別程式

*******************車牌識別程式  僅供學習使用*******
**說明:此程式識別的車牌是在網上隨便找的,此程式中的二值化、形狀選擇和形態學處理的blob分析三步曲
**並不具有普遍性。因為位置、光照、車牌清潔狀態等都會對車票識別造成很大的影響。只有使用MLP/SVM/CNN
**等人工智慧演算法訓練的程式,才具有比較高的普適性。

**1.採集影象
read_image (Image, 'F:/7.機器視覺/Halcon/c#聯合halcon開發/chepaishibie1.jpg')
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

*2.車牌定位及校正
**顏色轉換
decompose3 (Image, Image1, Image2, Image3)
trans_from_rgb (Image1, Image1, Image1, Hue, Saturation, Intensity, 'hsv')
*二值化
threshold (Intensity, Regions, 0, 59)
connection (Regions, ConnectedRegions)
*形狀選擇
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 4908.26, 8944.95)
**形態學處理
union1 (SelectedRegions, RegionUnion)
dilation_rectangle1 (RegionUnion, RegionDilation, 11, 11)
fill_up (RegionDilation, RegionFillUp)
**角度變換
orientation_region (RegionFillUp, Phi)
area_center (RegionFillUp, Area, Row, Column)
vector_angle_to_rigid (Row, Column, Area, Row, Column, Area, HomMat2D)
affine_trans_image (Image, ImageAffinTrans, HomMat2D, 'constant', 'false')
affine_trans_region (RegionFillUp, RegionAffineTrans, HomMat2D, 'nearest_neighbor')

*3.摳圖+字元識別
reduce_domain (ImageAffinTrans, RegionAffineTrans, ImageReduced)
rgb1_to_gray (ImageReduced, GrayImage)
invert_image (GrayImage, ImageInvert)
threshold (ImageInvert, Regions1, 56, 159)
connection (Regions1, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, ['area','height'], 'and', [206.42,27.248], [426.61,40.275])
**給識別出來的字串進行排序,'character'指的是按字串的形式輸出
sort_region (SelectedRegions1, SortedRegions, 'character', 'true', 'row')

*4.字元識別
read_ocr_class_mlp ('Document_0-9A-Z_NoRej.omc', OCRHandle)
do_ocr_multi_class_mlp (SortedRegions, ImageInvert, OCRHandle, Class, Confidence)

*5.顯示
smallest_rectangle1 (SortedRegions, Row1, Column1, Row2, Column2)
count_obj (SortedRegions, Number)
dev_display (Image)
for Index := 0 to |Class| - 1 by 1
    **每個數字的Y座標一樣,X座標與列印的日期對應數字的X座標值-3
    disp_message (WindowHandle, Class[Index], 'image', 210, Column2[Index] - 3, 'green', 'false')
endfor

程式原圖如下:


執行結果如下:


        程式開頭講過,blob分析只能適用於條件穩定且合適的情況。一旦條件發生變化,很有可能出現錯識別的情況。當然,人工智慧演算法也不是100%的準確,但是人工智慧演算法起碼可以降低開發和除錯的難度,blob分析是需要大量的打光測試和程式碼調整才能找到暫時合適的方法。而人工智慧演算法可以一勞永逸,雖然設計演算法的時候有一定的難度,但是,一旦成功就可以很高效地移植到其它專案中。這種輕鬆不是說程式碼量或者工作量少,而是後期的維護成本很低,非標裝置行業的人力成本和出差費用是十分昂貴的。