看過我之前很多車牌辨識大驚奇的讀者,可能會認為這一張車牌的辨識成功不會太意外,但我想說的重點是:我所以能辨識很多困難的車牌影像,並不是我曾經跌落山谷得到了九陽神功秘笈,或使用了某個最新的神奇演算法,譬如YOLO或CNN甚麼的!
我真的只是一個堅持傳統影像辨識技術研發的人!藉著這張影像的辨識過程,你就會知道:沒有僥倖,只有不斷的研究問題解決問題,所有問題都弄清楚也找到解決方案之後,答案就出來了!我真的不怕講太詳細會被人抄襲,就像NBA球星都會開講習班,對於學員毫無保留的傳授球技,但是要真的達到他們的境界,有太多細節他們說不完的!我最多也只能說到讓你相信真的可以作到而已!
找車牌的第一步是要從全景中找到車牌,對於這種車牌字元對比度比多數環境目標還低的狀況,你只能盡量作空間動態的二值化,任何可能的目標都要讓它顯示並參加海選,不能有遺珠,如果直接忽略低對比的目標你就一定會錯失車牌了!
我就是從這麼複雜的二值化圖中,按照有效的篩選條件與邏輯,找到那一組車牌字元的!簡單說,就是從對比較高的目標開始,循序找出大小相似,4-7個像是車牌字元的成排目標組合。找到「可能」的車牌就作幾何校正,將影像扭正成標準車牌大小,再從中辨識字元,到組成車牌內容,過程中如果發現無法組織出合理車牌時,就會放棄該組合,回到原圖中找下一個可能的目標組。
哇!看起來目標這麼多,事實上有上千個,怎麼找得完啊?即使找得完也會找到天黑了吧?這就是人類智慧高明之處了!如果人的腦袋可以很快找到車牌,一定會有很好的邏輯推演過程,可以讓我們快速忽略不可能的狀況,鎖定最後目標。我只要盡量解析模仿人的思考邏輯導出數學公式,並寫成程式即可!
我每天的研究的工作,就是不斷地找到合理的條件理由快速篩選出真正的車牌!以這個例子來說,我的程式找到車牌的位置只需要0.1秒!如果回到五六年前可能需要十倍的時間!但是找到車牌位置也將原圖扭正之後,這個例子的車牌還是不夠清楚的,灰階圖如下:
我必須努力在這個小圖上再做一次精準有效的二值化,因為它的陰暗狀況與對比度不佳,即使很努力之後,目前技術也只能做到這樣:
雜訊還是很多,但是大致上已經可以正確辨識出多數字元,只有那個「3」字,因為抱著一團雜訊在胸口,怎麼比對都比較像是個「8」字,而不是3!這個狀況讓我骨鯁在喉很多很多天!該怎麼辦?先放大這個字來看看吧!
看出來了嗎?它懷中的那團雜訊還是可以和字元的顏色區別的,色階分布圖大概如上,最左邊的峰值是非常黑的字元筆畫,偏左方較散亂的部分則是3字懷中的雜訊,看起來他們在數學上是可以找到條件加以切割的,就是必須在這個字元的區域內再做一次更精準的二值化!結果就變成這樣囉!
雖然還是有雜訊,但是夠清楚了,不會被誤認為8了!所以從原圖開始,我的完整辨識程序一共作了三個階段的二值化!全圖→車牌→字元!所以狀況再複雜的陰影也多半可以搞定!當然也必須補充,不是每一次我都會真的作三層的二值化,沒病的人當然不必吃藥嘛?如果原圖二值化後字元就乾淨清爽了,可能後面兩次二值化都會被直接跳過!這樣才不會浪費時間嘛!
這也引伸出另一個重點,就是我們的辨識過程不是作好計畫就完全按圖施工的!每一個階段的計算結果都會有自我評估,譬如是不是夠清楚?需不需要作例外處理?是不是已經可以確定不可能是正確答案要提早放棄這個目標組合?等等!辨識過程中他們自己是會「想下一步」該不該作?或該怎麼作?的!所以每一個案例都會有不盡相同的實際處理路徑,這裡不賣速食餐的!以結果看,我的辨識軟體速度都很快,但實際上這是「思慮周詳」的結果,並不是我的演算法有何特殊神奇之處,只要不浪費時間作不必要的計算就會快了!
限會員,要發表迴響,請先登入