網路城邦
上一篇 回創作列表 下一篇  字體:
只要有機會、範例與鼓勵,沒有人學不會寫程式!
2017/10/31 05:27:48瀏覽1819|回應0|推薦11

我們正在研究如何從類似上面的發票影像中擷取出QR code的子影像,一般的QR code Reader是可以讀取二維條碼並辨識內容,但是它們沒有能力從整張圖片的複雜背景中自己找到QR,像上面這種還有傾斜的掃描影像當然更困難。

怎麼做呢?方法當然有很多,甚至我的第一版是跟傳統找QR的方式一樣,設法搜尋出全圖中的所有方形目標,然後排列出QR的左上、右上與左下的三個方塊,找到正確的方塊組合QR就被鎖定了!但是這樣做好複雜,程式難寫運算時間也比較久,於是想到一個簡單一點的方法。

如上圖先將圖片二值化成黑白圖,接下來用所謂的「連通法」,就是將狹窄的空白區塗黑的意思!這樣QR內部的大部分破碎的空白區就會被塗黑連成一片,我們再辨識黑色的塊狀目標,只要是大小合適也呈正方形的區域就當作是QR了!切下來給QR Reader去讀吧!

這樣的邏輯似乎不太嚴謹,但對於已知的發票格式來說,這樣就夠了!極少有剛好差不多大的方形區塊但不是QR,即使有,也不過就是QR Reader無法辨識解析失敗放棄而已,我們的工作只是盡量找出最可能的區塊,寧可錯殺也不要放過就好了!

我想出這個方法後就交代RD去寫程式了!她很快就做出結果,此時我才想起來,她其實沒看過任何作連通法的程式範例!我也沒有教過她怎麼寫?好厲害,她就這麼自己輕鬆地寫出實作連通法的程式,記得我自己第一次寫的時候也不是很容易的!

隨便將分解動作講一講,大多數人可能就頭昏了!首先要在某一行的左邊開始找到一個空白點的左邊是黑點,將此空白點作為一個起點,繼續搜尋,找到下一個右邊是黑點的空白點,作為終點。計算起終點的間距,如果小於特定門檻值就將這一段空白點全部塗成黑點。重複以上動作直到全圖的右邊緣,再回頭到下一行做一樣的事情。

這些邏輯可不是簡單的迴圈,還蠻複雜的!我的經驗是這種邏輯的複雜度,我必須先寫好範例讓學生或工程師模仿,要他們自己寫出來可能會卡關還出錯,即使對了也會花蠻久的時間,執行速度效能也不會太好!但是我的RD若無其事的第一次就揮筆立就!大概用不到一小時吧?我回頭看進度時她已經全部寫好還都測試完所有樣本,都可以正確鎖定QR了!

她是天才嗎?現在看起來很像!但其實我知道她不是!她是我從大一開始教起的學生,其實她剛開始學程式的時候,理解領悟的速度只是勉強跟上而已!但是她很喜歡這些東西,我也支持她鼓勵她繼續學習,我是絕對相信這些程式技巧與學騎腳踏車一樣,有人學得快,有人學得慢,但是學會了騎起來就完全一樣!你應該不會看出一般人騎腳踏車的「天賦差異有多大?

事實上一如我的預期,她也很努力,從來不會規避學習新的東西!不知不覺的,已經跟著我學程式加上工作超過九年了!我常開玩笑說她是我的博士生!現在她寫程式就跟一般人講話或寫信一樣的輕鬆!腦筋想清楚的幾何關係很快就能寫成程式,還很少錯誤。做同樣的事情,我前面聘用的男學生與男員工都遠遠不如,反而是「學姊」常常幫那些男生收拾爛攤子!她算是顛覆了寫程式男生比較厲害,「女生根本不行」的刻板印象!

其實她是很保守甚至很膽小的個性,跟一般電影裡出現的電腦高手(駭客)形象完全相反!所有業務接觸過的合作夥伴或客戶都印象深刻,沒有絕對必要時,她總是不愛說話的!但凡聽過她做工作報告的人,又都很驚訝她的程式功力!以程式技巧而言,她真的已經盡得我的真傳,甚至猶有過之!她會的程式語言比我還多!

因為我們常常要一起出遠門(到高軟)當顧問,之前她不敢開車,雖然很早就考到了駕照,但是與多數女生一樣,因為刻板印象,大家都說女生開車不行,她也顯得很不敢開車上路!但總是由老師我開車當司機載她,怪怪的!大學生時老師開車載學生還說得過去,現在以她的年紀,如果早婚的話都得開車載孩子上幼稚園了!不幫老闆(老師)開車應該扣薪水吧?

雖然我自己開車也還好,但我很堅持要她長大!不敢開車就每天逼她在校園裡面開幾圈,出門遇到簡單的路況,就立即下車換人要她開。剛開始她在高速公路上有如驚弓之鳥,速度慢到接近「龜速」違規的地步!我忍耐著盡量不批評她,只提醒她可能有危險的狀況,讓她自己去體驗適應環境,用她自己覺得最穩當的方式開。

正常開車能有多難呢?又不是去參加F1賽車?女生當然不會比男生笨,熟能生巧嘛!現在出門洽公通常就是她至少負責開一半路程了!而且我還常常要在一旁提醒她別開太快了!她開車已經自在熟練得像寫程式一樣了!

這就是最簡單的事實,每一個人都可以學會自己煮飯做菜,講話走路開車等等基本生活技能,我認為寫程式也是一樣的!只要給學習者適當的機會範例鼓勵,沒有人是學不會寫程式的!真正你能不能變成高手的關鍵一定不是所謂的天賦,而是你到底喜不喜歡做那件事?喜歡加上足夠的時間,你一定會變成武林高手!

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

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