程式練習1:車牌識別程式
阿新 • • 發佈:2019-01-07
*******************車牌識別程式 僅供學習使用******* **說明:此程式識別的車牌是在網上隨便找的,此程式中的二值化、形狀選擇和形態學處理的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分析是需要大量的打光測試和程式碼調整才能找到暫時合適的方法。而人工智慧演算法可以一勞永逸,雖然設計演算法的時候有一定的難度,但是,一旦成功就可以很高效地移植到其它專案中。這種輕鬆不是說程式碼量或者工作量少,而是後期的維護成本很低,非標裝置行業的人力成本和出差費用是十分昂貴的。