12.13.2008

Face detection in Android

以前曾經做過Face detection的研究(雖然指導教授認為這個topic已經被做到爛了),拜數位相機普級所賜,人臉偵測一下變成了人人口袋都有的技術。人臉偵測在相機的應用上之所以普級,在我的觀察中有幾個因素:
1. 自動對焦。一般消費者用DC拍有人臉的照片(自拍或是合照),都是希望能人臉能是對焦的部份,但是過去的DC所設計的對焦點並無法完全反映出人臉所在的位置,於是常常發生脫焦的現象。人臉偵測解決了這項缺失,有些廠商更進一步發展出了微笑快門等等的應用。
2. 自動曝光。除了脫焦的困擾外,另一項困擾DC使用者的還有「臉色太難看」,也就是臉色不是太白就是太黑,這也是因為早期的DC大概只有點測光、中央區域以及全域測光,雖然稍懂攝影觀念的人知道可以用曝光鎖定的方式來得到正確的曝光,但對一般使用者來說太煩複了,另一方面也不是每一台相機都提供曝光鎖定的功能,這時候人臉偵測技術就成瞭解決方案之一。
3. 方便編修。當人臉可以被偵測出來以後,就可以套用很多影像處理在人臉上了,簡單一點的像磨皮、去紅眼(去紅眼不一定要人臉偵測,不過有人臉做參考比較好處理)等,或是套用魚眼效果、少女漫畫效果,進一步還可以直接把臉換掉變成史瑞克。沒有人臉偵測的話,要做這些事就只能把人臉一個一個慢慢框起來…
那人臉偵測跟手機結合在一起有沒有搞頭?當然有!我們先看一段VCR:

手機跟相機最大的差別當然就在手機可以打電話,因此手機比相機多出了通訊錄的功能,結合網路或是手機內建的相機就可以很方便地將聯絡人的照片加入通訊錄中;另外再加上人臉辨識的話還可以讓手機遺失時減少被盜用的危險。

不過前面說了那麼多,除了給外行的看熱鬧以外,對於像正在看這篇文章的Android開發者來說,有哪些門道呢?該不會要porting OpenCV到Android平台上吧?放心, Google早就很貼心地幫各位準備好android.media.FaceDetector這個package了,只要將參數設好,然後將讀到的image (Bitmap格式)丟進去,它就會吐出一堆Face的Array了,而且不但有座標,連角度都有(你不會真的認為每個人都會安份地給你拍照吧),而且是三維的角度都有!有興趣的朋友可以試試這個package,並且試試能不能想出更kuso、更imba的應用(例如加在遊戲當中)!

4 Comment:

Unknown 提到...

您好 , 看到您這個package介紹感到非常實用, 不知道您對android上的opencv有沒有研究呢??^^

Michael 提到...

你好, 我只有在PC上用過OpenCV, OpenCV for Android可以參考
https://code.google.com/p/android-opencv/

匿名 提到...

請問
您說的那個package 只能偵測人臉嗎
如果我要用我訓練好的xml檔 可以嗎

Michael 提到...

嗯,android.media.FaceDetector只能用它內建的modal。
不過都有自己train好的data,應該是連detector也有吧,是有porting上的問題嗎?

張貼留言