所謂的CNN技術最自豪的就是可以根據影像特徵找到目標,最著名的產品就是YOLO了!但我做車牌辨識是完全不用這些技術的,我用的OCR好像也不太強調「找目標」的部分?老實說,我自學OCR的時候也沒看到很「OCR」的目標搜尋演算法?傳統的車牌辨識找車牌位置的方法其實跟CNN是很相似的!就是用矩形框的假設搜尋影像中對比度高的區塊。
但是我使用OCR技術時,跟著全彩→灰階→二值化→切割目標的程序,就可以非常快速的整理出很多獨立的目標,大部分的車牌字元都可以獨立呈現出來,像上圖的樣子!以此為基礎找到有規律排列的目標群組就是車牌的候選人了!所以用OCR找目標一點問題都沒有的!誰說非用YOLO(或CNN)不可?
更重要的是:用這個OCR的程序找目標需要的計算量比起用CNN還不到十分之一!執行速度當然就快上十倍不止!所以我不可能使用CNN來找車牌的!因為實在太慢太沒效率了,如果沒有GPU幫忙就根本不能用!但是要用GPU必須多買很多周邊設備與中介軟體,成本大幅增加,產品就會變得很貴賣不出去了!
我用OCR找目標的困擾是甚麼?如上圖我得到了很多「可能」是車牌字元的目標,我的篩選門檻大致是目標的大小,其次是目標本身的對比度,但是我們通常不會事先知道車牌多大?或是車牌是不是很清晰?所以門檻會放得較寬,如上案例中就有約100個候選的目標,但多半只是背景中無意義的光影而已!
比起CNN找目標的程序,我多了一個組合目標成為車牌區域的程序!要對那麼多目標作排列組合當然會消耗不少時間,如果直接用標準字模一一比對每個目標是不是真的很像某個英數字呢?因為字模有幾十個,比對過程就跟CNN的矩陣運算計算量一樣大,那就更耗時了!所以如何有效快速的篩選掉顯然不是車牌字元的目標就是一個很重要的課題了!我的研究方向主要是目標內的灰階分布圖:
如上兩個目標一個是明確的車牌字元,一個是路邊顏色略深的排水孔形成的目標,我可以很快的統計出它們的灰階分布圖,就可以用統計的概念計算出很多特徵!譬如平均值、中值、對比度、是否有雙峰分布的特徵等等!標準的字元通常是黑白分明呈現雙峰特徵的!顯然沒有這種特徵的就不可能是字元,可以放心淘汰掉它!
按此要領我就可以很快的篩選出極少的字元目標候選人,當然要組織出合理的車牌就會非常快了!以此案例來說,候選目標就只剩下11個!重點是:使用灰階分布來取得是否字元的特徵評分是很快的!也就是運算量遠遠低於CNN用特徵矩陣掃描原圖的計算量!所以我的車牌辨識找到目標的速度可以徹底擊敗YOLO!絕對不是吹牛唬爛的!我不是詐騙集團,我是嚴肅的科學家!
限會員,要發表迴響,請先登入