網路城邦
上一篇 回創作列表 下一篇   字體:
將車牌影像轉正絕對不是一件簡單的事!
2020/02/20 09:27:05瀏覽791|回應0|推薦4

前文「舉個例子讓你知道找個車牌有多麻煩?」說明了要在全景圖中找到車牌「字元」的困難度!大致上是說明了二值化的程序與參數選擇密切關係到目標能否呈現的結果,而且是有邏輯可循的!可以用明確的演算法因應,只是比較麻煩而已。多目標的篩選分析也不必一定要用YOLO等較為抽象的演算法,直接替輪廓線編碼得到「有完整形狀資訊」的目標物件也是可行的!

但是常來此地的讀者可能最好奇的是我可以辨識非常傾斜變形的車牌,怎麼做到的?如果是機器學習派可能就是如下圖這麼說,一句話就讓你相信他們有神奇的AI技術,你抓到斜斜的車牌影像丟進去就好了!真的那麼簡單嗎?你不會好奇他們怎麼做到的嗎?

真實故事絕對不會這麼簡單的!即使AI很厲害,也不是裡面真的有大神駐守,每一個校正程序依舊是要根據影像資料作出精確計算處理的!每一個影像的合理或隨機缺陷變異,也都必須有例外處理,甚至一些假設與猜測,才能盡量避免意外,跑出奇怪的辨識結果!

僅用統計的方式,是與否的簡單邏輯,要迅速建構出跟人類的複雜經驗判斷能力相近的辨識軟體,在我來說是不可思議的!如果我不完全理解算命用的五行八卦等理論,我就不會輕易相信命理師對我命運的判斷!你呢?為什麼現在那麼多專家學者會那麼相信AI具有神力,可以作出超出我們理解範圍的事呢?

我不知道上面AI學派是如何作出變形校正的!但是我可以告訴你:我是怎麼做的!我不介意你因此可以學我也作出很好的車牌辨識軟體,因為我知道那樣你的成本太高,跟我買會便宜很多。我作了五六年,你即使得到我的指導,也少不了要花三四年才能作出跟我差不多的產品,屆時我又進步了,很難作山寨版的!所以我沒必要遮遮掩掩的!多說一些我的原理與技術,其實是為了讓讀者相信我沒有唬爛騙人而已!下面是我辨識出一個變形車牌的過程:

我的車牌目標是來自先全圖搜尋可能的字元目標,然後依據目標的一些寬高屬性與排列緊密度,決定哪幾個目標可能是某一個車牌的字元組!這個目標群組定案之後,就是找出他們的四邊切線,如果每一個車牌都有可以容易辨識的邊框,這當然是件簡單的事,但實際上「車牌邊框」是沒有保證會出現的抽象目標!你能依賴的只是清晰的字元。

要作出字元組四邊的切線很難嗎?絕對是的!這一部份的演算法需要的主要是幾何學的推理運算!我不知道機器學習或深度學習如何「學習」這種邏輯?每一度傾斜角要有一張樣本才行嗎?我直接依據數學原理設計的程式,只需幾張有傾斜車牌的照片作調整驗證就好了!就可以有信心的出貨了,不需要用大量資料「訓練」很久的!

在我的辨識核心中,至少寫了一千多行的程式來使這個「切四邊」的動作更精準,避免離譜的切割,即使無法絕對準確也要雖不中亦不遠矣!讓後面的程序還有硬抝補救回來的機會,我的辨識流程中,每一個階段都有自我調整辨識參數的彈性,前面程序留下一個洞,本階段如果有新的資訊就可以把洞補起來!當然,如果偏差太大,後續程序抝不回來,結果也是會錯的!就是所謂「擷取正確」,但「辨識錯誤」的案例了!

如果車牌清晰傾斜變形不大,這部分程式是不是就沒甚麼用?不見得!現實是很殘酷的!譬如下圖是很普通的台灣六碼車牌,上面的兩個螺絲釘孔隨時待命與正常字元沾連,讓你的上下切線切錯!左右字元與車牌邊之間的縫隙也極小,常常讓邊緣的字元沾連到背景,全圖搜尋目標時,根本沒將邊緣的字元目標當作車牌字元組的一員!還需要在此時增加例外處理程序,去將這個沾連背景的字「挖出」來!不然車就牌少一字,你的整體辨識率可能直接掉兩三趴!因為這些狀況實在太常見了!

   

要怎麼切才會穩定正確呢?絕對不是一翻兩瞪眼,用某一個參數決定一切的!只用已經辨識出的輪廓目標參數是一定不行的!還要參考灰階圖的亮度變化,甚至原圖的顏色特性,就跟人眼判斷車牌邊緣一樣,那必須是一個綜合各種資訊的整體判斷!才不會出現離譜的判斷錯誤。

還有一個也是超困難的動作就是判斷左右邊切線的傾斜角,因為不像橫切線有多個目標排列,較容易找出直線的線性特徵!像前面範例這麼斜的車牌,傾斜角如果計算得不準就會出現字元傾倒的辨識結果,類似下圖的歪頭A,用標準字模比對一定是不符合的!。所以必須開發出在這個階段就能正確計算所有字元左右傾倒角度的演算法!這一部份我就研發了好多年!並不是一開始我就可以辨識傾斜車牌的!

   

沒騙你!我的辨識核心程式內容就是有「想這麼多」,非常囉嗦繁複的!前幾天整理舊資料時,看到我2014年開發的這個辨識核心初期本版,沒超過一千行!但五六年後的現在,已經有五千多行了!都是因應實例回饋,逐步調整整合演化出來的!程式多了不表示速度會變慢,而是有更多程序隨時待命,迴圈更精準有效率,判斷流程更加聰明,減少很多不必要的計算,整體辨識是越來越快的!

當四邊切線在極端狀況都能精準時,再將此任意四邊形的影像區域投影成預設的車牌矩形影像大小,結果就是字元非常端正的車牌影像如下:

在此車牌影像中我們再次作出目標切割,進一步將每個字元正規化投影成標準字模的大小,字型就更為準確美麗了!

他原來的長像是這樣的哦!當然我的辨識是有極限的!任何影像辨識也都有極限,我和機器學習派最大的不同是我可以明確說出我的極限,如果辨識錯了也可以很快告訴你他是碰觸到了哪個程序的哪個參數!如果你只是用深度學習開發工具的「使用者」你是無法像我這樣誠實坦白的!因為你真的不知道發生了甚麼事?我很討厭那種感覺,所以至今都不考慮使用機器學習或深度學習,而且還在業界靠影像辨識技術活著!

( 心情隨筆工作職場 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:http://classic-blog.udn.com/article/trackback.jsp?uid=yccsonar&aid=131776689