一次成功用 Open CV 拼圖的經驗
2018-11-01
懶惰,造就科研人才,所以我從小就注定投身這行業!上年我在日本因酒醉而買了一幅平常連碰都不會碰的拼圖,結果?看標題就知道了吧。
路飛…你害我近視加深了
一星期的堅持…
最初的一星期,我也堅持每天砌一點,可是七天很快便過去了,我看到的只有一幅拚圖的邊緣,根本連十分一也沒有!
你收聲!
然後…
然後我就把拼圖封印在床下底了…咦?不應該是這樣的,難道這不是一個天才工程師用神跡般的技術完成拼圖的故事嗎?
… 不是。
半年後…用程式挑戰!
不過我又怎能讓它一直放在床下呢,於是我就打算用自己的專長把這又麻煩、又礙事的東西解決掉。這就是我當時的程式,我把原圖拆分成九格進行運算,這樣做除了計算速度比較快,也比較準確!
惡夢…
學習了兩種不熟悉的程式語言
這就是我喜歡做 Side Project 的原因,因為我經常要學習一些陌生的技術,每次都讓我感到很新鮮有趣。這次我總共寫了兩個程式
一個是 iOS App,主要是 real-time 拍下拼圖片然後傳送到伺服器,這花了我不少時間,還迫我裝了個黑蘋果…
另一個是 Python 伺服器再加上 OpenCV 3.0,CV 就是電腦視覺 Computer Vision 的縮寫,用於圖像比對,雖然 OpenCV 很有趣,但我不太喜歡 Python
難題 1、沒有原圖
我只能靠印在拼圖盒上的圖片作比較,大小最多就只 800pixel,加上小弟沒有攝影的習慣,所以全程都只是在用我的手機 iPhone 6S 進行拍攝,難免有準確性問題…
難題 2、不規則的形狀
因為拍照得來的拼圖的大小和形狀都跟原圖不一樣,所難度又增加了一點…
你爺爺丫!
我用了 OpenCV 的 Feature Matching 和 Homography 技術解決這個問題,這技術可以無視大小和 rotation 進行比較,但就如上面說的,我的原圖跟拼圖的圖像質素都不太好,所以效果就不太理想…
官方效果圖,這是騙人的…
結果還是要用肉眼看
雖然這個程式是有一點幫助,但是程式只能顯示大概的位置…
改善方法 — 擴增實境(AR)
從那時候開始就一直有加入 AR 的想法,我只要拍下拼圖,App 就會「叮」一聲然後把正確的位置顯示出來,完美!
談何容易!經過多番嘗試,發現以現在的技術來說還有一定的難度,確準性是一大難題。但最近聽到 Apple 將推出 ARKit 2 的消息,又給了我一絲希望,我拭目以待!
完成品
幾經辛苦,我的拼圖在程式的協助下也花了約一星期才完成,短時間內我大概不會再碰 1000pic 的拼圖了…
p.s. 這程式只適用顏色有一定對比度的拼圖,好險我不是買純白地獄…