跳到主要內容

Processing + OpenCV 的特徵提取(blob detection)試驗


processing

在「【跟著我的閱讀腳步】數據可視化之美」我曾經提到,Processing真的是視覺化的好幫手,語法簡單,範例與支援的函數庫多,再加上龐大的使用群,在google上隨便都能找到許多好玩的應用。現在,我要利用Processing來處理一些簡單的特徵提取(blob detection)工作。


這項工作的需求來自於我妹打算要做的研究。研究內容暫時不談,不過要看的是動作上的差異。一個方法是在畫面上打格子,然後算格子數的差異。這個我已經用Xuggler將影片解碼,在畫格上畫上格子後重新編碼的方式實現。但是算格子還是有點麻煩,所以我們更進一部,試試有沒有自動化的方式對影片中的動作做簡單的偵測。就在這個時候找到了Processing + OpenCV的應用。

Processing可以從這裡取得,而Processing的OpenCV支援則可以從這邊下載。如果你也使用Mac的話,Processing應該是抓下dmg後,將應用程式拖到Applications或你習慣的應用程式資料夾中,就可以直接用了。OpenCV則要先安裝OpenCV framework,再下載OpenCV Processing Library,放到Processing的libraries資料夾裡面後,才能夠開始使用。OPENCV Processing and Java Library中有詳細的說明。

要開始Processing只要從void setup() { }和void draw() { }下手即可。在setup()中設定初始化的設定數值,在draw()裡頭加入要進行渲染(render)的內容。

接著我開始了兩個試驗,一個是簡單的臉部偵測(face detection)。OpenCV的範例中就有直接的應用,而我在這個例子中加上了帽子和生日蛋糕,變成簡單的慶生畫面。

face_detection_2

face_detection_1

這個例子裡面,只用了detect()的個方法就搞定了。再算一下帽子和蛋糕所在位置的比例就完成了。好玩的是,用畫的笑臉也可以辨識,看來OpenCV所訓練的檔案泛用性還滿高的。

第二個則是針對影片去做特徵提取(blob detection),我找了一個有白色背景的太極拳的影片來試試。

blob_dection_1

blob_dection_2

特徵提取在OpenCV裡面也相當簡單,依循着Blob物件的範例就可以搞定大部份的事情。只要再畫上框框,偵測最左邊和最右邊的點即可。但我對結果不是很滿意,可能還得調整一下影像差異的參數才行。

在這兩個試驗之後,我也開始玩其他的例子。比方說改寫Generative Gestaltung這本書(德文的,看不懂)裡面的範例P_4_3_2_01,把蓮花改成心經版的。

lotus_text

這些例子都只要少許的努力就可以完成。只不過Processing並非沒有缺點,有些經常使用的經典libraries有點過時了。例如processing.video呼叫的是QTJava,Apple已經宣佈它過時了,而且只能使用32-bit的模式去跑。這對Snow Leopard或Lion這類64-bit的使用者來說,犧牲了不少效能。但使用Processing來呈現視覺化,節省了太多開發時間,或許這也是目前仍有許多人運用Processing的原因。好吧!對我而言確實是這樣,起碼呼叫webcam方便多了。至於其他的libraries,我也還在嘗試,應該會有些新的解決方案吧!

留言

熱門文章

差不多食譜:搖元宵 Yuan Xiao

元宵節就要到囉!除了放天燈、猜燈謎之外,這天還要做什麼呢?當然就是吃元宵啦~

「抓烏龜」的麻將遊戲

今天要和大家分享一個打發時間的簡單遊戲——抓烏龜。這可是我老爸老媽特別從美國學回來的,是個名符其實的「海歸」遊戲,據說是在下雪時無聊打發時間用的。

差不多食譜:壽桃 Birthday Bunns

「壽桃」可不是老人家生日的專利,小巧玲瓏的壽桃超級受到小朋友歡迎,直說「好可愛喔!」其實壽桃就是一種造型饅頭/包子,只要掌握了這些方法,要做其他的造型都沒問題。