首先聲明,平均臉制作的方法一般都是使用AAM算法,但是我對這個算法不了解,所以在制作的時候,使用的是簡單的加權的方法,高手勿噴。 我所用到的: 1.visual studio 2010 (openCV, 2.4以上好像才有 contrib這個module). 2.python (需要安裝PIL) 3.Matlab 我的步驟: 1.首先,要有圖 我是很想把課程網(wǎng)站給黑了,然后把學生圖片全搞下來的,但是,第一點:我不會;第二點:我發(fā)現(xiàn)課程網(wǎng)站上的照片根本不用我做什么,幾乎直接就能拿到。于是使用剛學習不久的Python,把新生照片給扒了下來,沒扒完,具體原因不說了,總過扒了2000多張吧。 這里不會Python的同學可以查一下,主要用 urllib2模塊。 2.怎么對齊? 既然是直接圖片疊加,至少要把臉大概對對齊吧。我用了以下幾個步驟來做: 2.1 人眼識別 openCV 2.4提供了一個Facerecognizer類,官方文檔,就是我的另一篇文章【opencv】人臉識別、人眼識別and性別識別里面說的,這里再次對其中借用的文章的原作者表示感謝。 2.2 裁剪與標準化(為了進行性別分類) 這里openCV給的那個crop_face.py確實不錯,進行了裁剪,又將眼睛的位置對齊了,否則又要費老半天勁來做矩陣變換,想想都煩。將上一步計算出的人眼的位置傳給CropFace函數(shù),OK。如果你問我為什么不在VS里面做這些,還非要又用C++,又用Python,這個主要是因為人家給了現(xiàn)成的CropFace的函數(shù),我才懶得用C++再寫一遍。既然我選擇了這種方式,那就涉及到了exe程序與Python程序之間的通信問題,我使用的方法見我的另一篇文章【python】python運行exe,并獲取exe的output,于是將所有圖片都標準化了。 2.3 性別識別 性別識別使用的還是openCV,具體還是看我的文章【opencv】人臉識別、人眼識別and性別識別 里面說的吧,openCV的document里面關于gender classify的部分幫助其實更大一點,這里推薦的是去Google Image上,直接搜明星的人臉來作為訓練數(shù)據(jù),但是我發(fā)現(xiàn)使用openCV自帶的人臉識別和人眼識別的XML并不能很好地識別多種場景下的人臉,尤其是人眼!我不是搞這方面研究的,也不想深究,于是果斷換成用自己扒的證件照來train一個classifier,效果一般,男生被誤分成女生的情況還是很多的,手動挑揀出來之后女生約有700張,男生1100張,就這樣吧... 2.4 裁剪與標準化(用來進行加權) 這里重新裁剪,因為2.2用的裁剪圖要小很多,只有一張臉而已,要做加權的話,還是大一點比較好看,于是就使用不同的參數(shù)重新crop,OK 3.使用Matlab計算平均臉 使用Matlab是因為Matlab比較簡單而且處理圖片相加這種操作還比較快(我對Python的PIL不熟,本來想嘗試一下,后來放棄了) 得到結果:
這里的平均臉其實真是算術平均的結果,效果比起AAM自然是要差不少,尤其是距離眼睛比較遠的地方比較模糊,就這樣罷。 |
|