Contents ...
udn網路城邦
人性化的「啟發式」車牌辨識演算法應該是這樣的!
2024/04/17 09:32
瀏覽563
迴響0
推薦6
引用0

大家可以自我揣摩一下,你的大腦是怎麼辨識出這個車牌的分解動作?我自己的解讀是:

步驟一:快速掃描影像中對比最強的目標,當然就是車牌上的那幾個字了!

步驟二:定睛看清其中一個字元,確認是個英或數字無誤!

步驟三:在這個確定字元的左右搜尋補足車牌應有的大小相似的所有字元!

我心目中想發展的車牌辨識一直就是以此人性化的辨識三步驟為導師的!下圖是我用OCR初步辨識出來的所有目標,我刻意用灰階顯示它們的對比度,越黑的表示對比度越高!如果我「定睛」一看的字是那個M,如圖所示我會發現它與M字的符合度高達92%!我就知道這張影像中車牌字元的大小與概略位置了!接下來就是進入步驟三準備收割了!

這就是人眼可以很快辨識出車牌的思路捷徑了!重點是我要如何設計出能達到這三步驟的效率功能的演算法?在步驟一我不必做「太詳細」的資料掃描處理!我只要用最簡易快速的方式圈出目標,同時計算目標與背景的亮度差,就是目標前景與背景的對比度了!這是OCR最擅長的工作,如果堅持要用CNN就累死了!要用不同尺度的矩陣地毯式掃描好幾次!需要GPU救援了!

如步驟一圈出目標後,我不必關切多數較黯淡的目標,只要專注在前幾名清晰的目標,逐一細看它們是不是合理的英數字元?此時我的腦袋與演算法才會拿出可以認字的字模與目標比對,換言之,我不必每個目標都去比對它們可能是甚麼字的!只需要比對前幾個亮眼的目標就可以找到正確的字了!這當然可以節省很多不必要的運算時間。

如步驟二,前幾名中我只要對到一個正確的字元後,就可以立即排除所有大小與此字元目標不同的大部分目標,只需要在這個目標左右相鄰的小區域內繼續找到應該差不多大小的其他車牌字元了!就是完成步驟三的動作,此時你要處理的資料已經非常少了!最終就是在86毫秒內辨識完成一個近50萬畫素的影像。

在學理上有個名詞稱呼這種走捷徑的思考模式叫「啟發法Heuristic!通常就是指到了某個程序時,你可以在較高的層次與角度看到一些捷徑,可以直接跳過很多其實與最終目標能否達成無關的SOP,依舊可以順利達到目的!當然這不是最穩定可靠的演算法思考模式,因為自作聰明漏失一些細節而走錯路的機會也有的!

但是與鉅細靡遺甚麼過程都要完整處理的保守方式相比,這才是一般人的腦袋最常用的思考模式!也是各種生物視覺發展演進的主調!譬如獵食動物的目標是會動的獵物,如果每一個靜態畫面都要辨識其中所有的可能目標,老虎的腦袋就必須跟鯨魚一樣大了!所以牠們只會專注辨識會動的目標,把自己裝成雕像真的可以躲過暴龍攻擊的!而且連蒼蠅腦都足以處理能避開人類巴掌的視覺反應,這才真的是「智慧」吧?超低成本還超高效率啊!

比較諷刺的是目前自稱是影像辨識主流技術的MLDLCNN等技術都是以資料完整性為基礎的!所有的機率統計演算法都強調必須盡量納入更多的資料計算,必須如此所謂的「學習」或「訓練」才會得到較佳的解答!所以跟這種啟發式思考模式是背道而馳的!一旦採用那種AI就很難有效減少運算量降低成本了!

還好我沒有這種負擔,我的演算法並不是建立在資料統計上,而是根據物理科學原理逐步建構出來的!如果物理定律告訴我某些資料或屬性與我要分析的目的無關,我就可以直接忽略!大幅減少運算,也就是降低成本!機器學習派如果要享用到啟發式思考模式的好處,就必須回歸科學回歸物理了!這好像要西方人用筷子吃飯,很難的!

也因此,我做出來的影像辨識產品常常速度快到讓其他專家難以理解?越是有經驗的專家就會越驚訝!原因就是我的程序中充滿了各式各樣的啟發式演算法設計!我每天都在我的七八千行車牌辨識程式之中遊走、思考與實驗評估更省運算量的可能性。正如精打細算的省錢達人一樣,努力把每個細節都做到最節省,整體效果看起來就很驚人了!

有誰推薦more

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