

標準的OCR辨識程序,就是把「一個」獨立切割出來的目標,當作「一個」字元來處理!但是很多時候,因為解析度不足或是角度太偏斜,字元就會沾連在一起,上圖就是一個極度沾連的四胞胎連體嬰的極端例子!但以目視的角度放大一點看,3229四個字是很清晰的!如果要對客戶說此例無法辨識?是很有壓力的!這麼清楚都說無法辨識?還好意思自誇AI嗎?
如果車牌的六七個字元中,任何兩個字元有沾連現象我就放棄?宣稱無法辨識?那我的車牌辨識就是很拙劣的低階產品了!我當然是已經有很多可以讓目標分分合合重新組織的例外處理技術,才能讓辨識率那麼高的!所以在此之前,二胞胎甚至三胞胎的沾連目標,我都有相應的程式嘗試做切割處理!
也就是碰到明顯比標準字元目標寬,當作一個單一字元去做字模比對時,符合度又很低的目標,我就會啟動二分割或三分割的程序,如果分割之後字元符合度明顯變高就當作是對的答案了!但是當然切割數越多,累進誤差就越大,越不容易保持正確,所以之前是沒試過四分割的!也很少看到適合做實驗的例子嘛!
今天剛好碰到此例四胞胎連體嬰,當然就非常高興地嘗試建立四分割技術,也順利成功了!整體辨識率又提高了一丁點!這個看似清晰的案例也可以辨識了!我的車牌辨識當然又更AI一點了!當然要不要做四分割?還是要先經過檢驗決定的!如果每個可能目標都要做所有的切割嘗試,那會拖慢速度很多的!
OCR與CNN最大的不同就是很依賴目標切割的結果!CNN是直接用矩陣掃描找形狀特徵的!找到類似字元的特徵就以特徵強度的分布把字元鎖定,不需要完整切割出字元邊界的!但是因為無法事先知道字元多大?也無法知道字元的傾斜變形程度,所以搜尋目標的運算量很大,速度很慢的!所以才會不得不使用GPU來幫忙嘛!簡單說,使用CNN產生的問題遠遠多於使用OCR!
OCR雖然比CNN運算量低很多速度快很多,但是傳統的OCR對於碰到目標沾連或破碎時的例外處理著墨不多,所以會被認為只要切割不完美,就一定無法辨識成功了!我的OCR技術所以能有目前的好表現,除了歪斜變形的偵測與校正之外,這些目標沾連或破碎時的分分合合的例外處理也是功不可沒的!
所以我的影像辨識技術,以「微觀」的角度來說,也很有機器學習嘗試錯誤的精神!如果一個目標直接當正確字元比對就OK,當然就不必嘗試例外處理了!如果發現某些目標與已經確認正確的字元目標相比偏大或偏小,就會嘗試各種切割或拼合的處理程序,看哪個處理方式結果最理想,就選它當作正確答案了!機器學習或深度學習所說的「訓練」不就是找出最合理的解答方式嗎?我的內部(微觀)程序也是這樣做的!
所以我的OCR即使目標切割結果看起來很不完整,也都有機會在後續的目標整理過程中,逐步切割或拼合,最終「整理」出正確合理的答案!重點是我避開了CNN與DL兩個超級大地雷!即使我好像讓OCR變得複雜很多了?但是運算量仍然比CNN+DL少數十倍,甚至百倍!
所以我的軟體依舊可以很快,比CNN+DL的方案快太多了!當然也就不需要增加硬體設備的額外成本了!所以我的軟體價格不貴,是因為我不必買大量資料用超級電腦做耗時的訓練!買到我的軟體後,建置系統需要的硬體成本也很低,一般規格的普通電腦就可以運作得很好了!不必什麼額外的GPU吃電,當然耗電量也低很多的!
所以我真的不知道為什麼影像辨識要使用CNN與DL?一點好處都沒有的!又昂貴又不會比較準?大概只有輝達與台積電等硬體公司會從這個詭異的發展方向賺到很多錢!對於開發者與使用者來說,使用CNN與DL的影像辨識方案都必然是一場大災難!我這樣批評CNN與DL好幾年了!從來沒有人公開或私下批評駁斥過我!因為我說的每一點都是鐵一般的事實!
限會員,要發表迴響,請先登入



