要做影像辨識,而且不是學術研究而已,要能真的推出產品變成一個產業很不容易。首先要面對問題,譬如最近的案例是:如何辨識一張護照上面的關鍵文數字資訊?你必須先觀察分析目標的特性,思考如何根據這些特性,穩定快速的抓到目標?譬如字元的形狀、大小、排列方式、間隔、字型、在影像中的概略位置以及背景的顏色材質特性等等。
以我的作法,如何辨識的策略流程是最先完成的!我稱之為「想法」,這個階段我的腦袋裡其實還沒有具體想到太多數學方法與程式技術的細節,就是依據一般人都能理解的常識與直覺判斷進行。譬如設法將字元從背景中抽離成個別獨立的目標,然後依據它們會排列成排的特性,將整行或整塊的子影像挖出來,再將此局部影像經過合理的縮放、旋轉變成可以和標準字模比對的大小,最後就是一一比對字元的符合率,找出最近似的字元,組成最終的辨識結果。
有了「想法」接下來就要開始想數學了!這就是一般人說的「影像辨識理論」的部分,其實也未必需要很深奧,就是影像處理的基本技術譬如:增強對比、二值化、辨識輪廓等等,最重要的還不是這些,而是一些高中就學過的幾何學!譬如檢視目標是不是成排?是不是有你想追蹤的形狀特性?等等……。用到的數學未必很深,只是你必須有足夠的素養,將自己前一階段「定性」的「想法」,變成可以「定量」計算的過程,也就是所謂的「演算法」了!這個階段我稱之為「知識」!這是比較需要讀好高中、大學乃至研究所理論課程的部分。
有了數學公式,最後才是研究如何將這些公式用電腦程式實作出來,要看著(或想著)數學公式就能寫成程式「心想事成」,也是很難的!對照於大學的課程就是「程式設計」、「數值分析」或「離散數學」等等。當然最重要的是寫程式的「經驗」,好像國文課上完還要常常寫文章,寫多寫久了才能下筆成章嘛!
程式寫出來就可以開始作「實驗」了!你的想法與演算法可以開始明確的受到檢驗,如果有程式方面的錯誤,要先修改到與數學方法目的相符。程式真的能實現你的演算法之後,如果還是與預期結果不符,不能達到你的原始想法,那就必須檢討數學公式,可以換另一種數學方法試試看?如果始終無法達到目的,或者效率太低,或者不夠周延,很多例外狀況無法處理到等等,就要改變你的原始「想法」了!
所以要作好影像辨識:想法、知識與技術缺一不可!我的公司現在有了具備影像辨識學理基礎的博士級人才,也有經驗豐富的程式師,但是除了我之外還沒有一個人可以三者兼備。尤其是這大半年我們都在趕工,通常他們只看到我寫好的上千行程式,忙著拿去翻譯成終端產品必須用的程式語言,並作各種環境下的測試與調整。
基本上沒人知道我對於解決這些影像辨識問題最初的想法,以及很多數學方法的調整磨合過程,即使比較理解演算法的RD,也不清楚我最初的思考過程,他常常會好奇我怎麼會想到這一招的?另一套方法就一定不行嗎?其實很多方法我都已經試過了!趕時間嘛!我只會讓他們看到最後我的最佳解決方案,研究過程就沒時間多講了!
昨天我第一次在辦公室裡嘗試開一堂「開放式討論」的課!就是暫時拋開知識與技術的細節,把護照號碼(Machine Readable Passport)辨識的問題攤開來請大家提出自己的「想法」!雖然我已經把我的程式寫好,今天就要去客戶那邊展示成果了!但我並不嘗試介紹我作的東西,而是開放讓大家討論各種可以解決問題的方法與流程,我的角色是提出我知道的實際問題去挑戰他們的想法。
很有趣的是:因為重點不在數學理論與程式實作的技術,所以每一個人都可以用自己的常識與邏輯能力參與討論!討論出來的答案是不是最好?或與我的作法是不是相同?都不是重點,我要的是讓大家體會到我一直都沒讓他們知道的,一個研究影像辨識最重要,也最人性化的部分!就是面對問題的「想法」!
沒有自己的想法,不願意去想,或不敢大膽的去想出新的解決方案,那麼我們這裡就沒甚麼故事可以分享給大家了!如果只能套用組裝別人的程式模組進行影像辨識的Try and error實驗,那是多麼辛苦又無趣的事啊?拿如何熬夜爆肝的過程寫部落格文章會有人愛看嗎?
所以行有餘力,我要創造的不是一個天才老師帶領的乖寶寶團隊,而是一群願意常常異想天開、各行其是的創意研發團隊!我認為:沒有想法,知識技術再多都不會產生價值的。
來源:鄉下老師