Contents ...
udn網路城邦
告訴你一個辨識模糊車牌的故事
2020/05/07 09:36
瀏覽844
迴響0
推薦4
引用0

這張影像可以充分說明台灣六碼車牌辨識的難言之隱,車牌辨識傳統上的作法是從原圖中直接找到車牌」!但是車牌本身是沒有明確可辨識邊界的,白底的車牌配上白車,要找到明顯的車牌邊緣更是不可能的任務。所以多數車牌辨識演算法是找所謂的亮度變化的特徵點,就是掃描圖上有高亮度變化的點,因為車牌字元多半是黑白分明的,所以車牌區域內會有這種點密集的現象,如下圖:

但是看到了嗎?紅色框的區域固然是真的車牌,但是左邊也有一個區塊特徵點分布也很像車牌,其實是一排停放整齊的機車,類似的雜訊在以往只拍車子本身作車牌辨識的狀況時不會遇到,但現在用百萬畫素相機要拍全景作辨識時,這些雜訊如何與真的車牌區別呢?通常只能試著辨識下去,到某個階段確定他們不是車牌時才能放棄,即使特徵點最密集最方正的區塊也不表示他們就是車牌,你很難直接選出絕對正確的車牌區域的!

這有甚麼問題?就是辨識的時間會拉長!現在的影像畫素多了本來就會讓運算時間增加,要嘗試處理辨識的目標又比以往增加了好幾個!每個看起來像車牌的目標區都需要進一步處理,即使電腦速度變快了,都趕不上這種以倍數增加的運算量!所以軟體設計者必須研究「數學」,讓演算法更有效率,計算量大幅減少,不然即使辨識率很好,辨識時間太久,東西也會賣不出去的!

對我來說,如果繼續走上面那條路,就是假設車牌是一個正面矩形的區塊,那斜視或傾斜的車牌怎麼辦?它們在二維影像上根本不是水平矩形的!也因此,所有走上面那條路找車牌的車牌辨識系統都無法辨識超過水平傾斜十度以上的車牌,因為歪的車牌不是正確的矩形!在搜尋原圖特徵點分布時就不會被視為車牌的候選目標了!初選就直接被淘汰了!

所以我的方法是找圖中字元目標而非直接找車牌的,只要看起來像是單一字元的形狀大小,有足夠對比度的目標,我都會將它們先辨識出來當作基礎資料。其實現在的很多影像辨識演算法如YOLO等等,大概也是這樣的概念,先用高效率的演算法找出可能是目標的特徵資料集合,再從中用條件篩選組織出我要的最終目標。但是我比較傳統,真的就是找出目標個別定義其寬高形狀等屬性,讓他們變成可以操作的目標物件,概念上很好懂的!

對於一般的影像辨識研究或產品開發者來說,最困難的部分是如何從原圖中以極高的速度與效率建立出如上的可能目標群?有了確定包括所需最終目標的資料,要寫程式篩選組合與辨識字元相對就容易多了!因為從原圖到建立有效目標群的演算法難度太高,所以大部分的影像辨識從業人員才會緊抱住CNNYOLO不放,非使用那些技術不可!因為他們無法自己作出一樣高效率的類似演算法

我呢?其實也曾卡在一樣的地方!2009年時我就已經作出目前以字元辨識為基礎的車牌辨識流程了!但是當時我開發的演算法,從原圖到可用目標群組分析的過程非常慢,所以當2013年有產學計畫要找我作車牌辨識時,我是模仿傳統方式以找車牌特徵點的方式拼湊的!自己的方法實在太慢了,不實用。

這個關卡我是在2014年,剛辭去教職跨入業界的第一年突破的!我發明了自有的快速演算法,可以非常快的完成從原圖到目標群的建構過程,從百萬畫素的原圖組織出所有可能目標所需的時間只要十幾二十毫秒!當時我根本對於機器學習、CNNYOLO等技術毫無概念,後來知道了,也已經不需要使用它們了!我自己發明的方法更能適用於我的需求與使用習慣。

所以我不是天生反骨,故意不用這些影像辨識的新技術,而是我自己在此之前就已經有可以作到一樣的事情,甚至作得更好的技術!換作是你還會將那些演算法奉若神明嗎?這就是我可以自行開發很多影像辨識軟體,卻完全不用外部影像辨識技術或模組的真正原因!如果沒有必要,我還是會繼續不用的。

但即使使用我的高明演算法,碰到如上的案例,我還是被打敗了!大家可以看到前面一張圖作出來的字元有些殘缺不全,譬如9字只剩下一半,兩個3也差一點斷掉!為何如此?看下面的放大圖就知道了:

要在原圖中切割字元目標,依賴的資訊只有灰階,就是盡可能在此圖中找到合適的二值化門檻,讓字元獨立被切割成完整的目標,但是大家看到螺絲釘生鏽的繡水痕跡跟字元差不多黑,字元本身還略有磨損,磨損處顏色更淡,這些鏽蝕痕跡會讓車牌字元與螺絲釘孔,甚至整個背景連在一起,很難切割成獨立字元,看看下面我用較高的門檻值作的二值化結果:

看到了嗎?V字與上面的螺絲釘孔相連了,8字則與下面的螺絲釘孔相連了,倒數第二個3字更慘,峰峰相連到整個邊框的陰影去了!那麼大的「目標」當然被我直接篩選掉,視為不可能是車牌字元的目標了!所以在較高二值化門檻的前提下,這幾個扭曲或缺失的目標我是確定組不出正確車牌的!前面較低門檻的結果反而較有機會。

事實上我的辨識核心就是用較低門檻作出的目標,先正確框出車牌範圍之後,再進一步作車牌內部的影像強化處理,才終於辨識出正確車牌的!

但是面對這種案例,二值化之前怎麼會知道要用高或低的門檻呢?我真的不知道!所以如果是需要快速辨識的情況,我只能盡量找一個適中的門檻,辨識不出就算了!後面還很多人排隊等著買口罩呢!哪能讓你慢慢驗貨試戴啊?如果是沒有時間壓力的靜態辨識,我就會讓高低門檻都試,低的辨識結果看起來不錯就直接出貨,沒答案或答案可疑就再試試看高門檻,最後輸出最可能正確的答案!

所以你問我辨識一張影像的時間是多少,我是很難回答的!很順利就找到答案時,是大約100毫秒左右,不順利時靠著鍥而不捨百折不回的精神終於抝到對的答案,可能就要花到500毫秒以上的時間!你趕時間我就會說這張無法辨識,不趕時間有耐心就會等到我解出合理的答案。

這個故事好聽嗎?我跟別的影像辨識玩家不同之處,就是這些故事都完全發生在我的程式裡面,所以我可以說得很詳細完整,如果我作錯了,也可以很快發現改正。但如果你問的是機器學習玩家,不好意思,他們辨識目標的故事應該很殘缺,太多過程細節是如何發生的?他們其實根本不知道!你敢跟他們買辨識軟體嗎?是我就不敢!

有誰推薦more
全站分類:心情隨筆 工作職場
自訂分類:不分類

限會員,要發表迴響,請先登入