2012年4月30日 星期一

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,我也還在嘗試,應該會有些新的解決方案吧!

1 則留言 :

  1. 感謝大大的分享~
    小弟是初學者,可否請大大寫一篇更詳盡的應用,像大大您的這篇範例是如何做到的。

    回覆刪除

Related Posts Plugin for WordPress, Blogger...