簡介
原文鏈接http://www.cnblogs.com/lrysjtu/p/5492547.html
寫這個項目的本來目的是通過構建一個神經網絡來訓練人臉圖片,最后達到能根據圖片自動判斷美丑的效果。可能是因為數據集過小,或者自己參數一直沒有調正確,無論我用人臉關鍵點訓練還是卷積神經網絡訓練,最后都沒有得到任何效果。為了不讓自己前期寫的代碼變成無用代碼,就參考網上的一些資料寫了一份平均臉生成代碼,感覺也還挺有意思的。
數據准備
數據來源是上海市畢業生圖像采集網,2013年自己馬上要畢業的時候網站公開了下載自己畢業照的鏈接,但是因為下載有漏洞,被很多無聊的人(包括我)跟風下了一波,有一個同學還用這些圖片做了一個facemash,結果被教務處請去喝了茶(美國的扎克伯克比我們不知道高哪兒去了)。當時只是自己覺得有意思,把同屆的人的照片下了一份,它們一直靜靜的躺在硬盤里,直到最近又把它們翻了出來。
因為是證件照,所有的照片尺寸都是640*480,背景是藍布,正臉,素顏,非常適合用來訓練模型或者做平均臉。之前也說了原本目的是訓練模型用,所以也需要給照片里的每張臉打一個標簽,此處沒有采用當下十分流行的十分制,只是按照自己的審美觀把照片分為丑、一般和漂亮三個等級(本人審美觀十分普通,五官不協調或者臉型太差的直接認為丑,看着順眼的認為一般,五官十分精致的認為是漂亮)。運行時如下:
此桌面程序(judge.py)還會把調用face++的API接口檢測人臉關鍵點,這些關鍵點也是平均臉制作的關鍵所在,最后所有的標簽和關鍵點數據都存放在face.sqlite中。大家可以注冊face++賬號嘗試一下,關鍵點檢測效果如下。
平均臉制作
一種比較簡單的制作方式就是把所有的圖片關鍵點對其之后做均值疊加,詳細的可以看一下這個博客,這種方法的弊端也很明顯,例如把所有的圖片中眼睛對齊,最終合成的圖片眼睛稍微清楚,但是其他地方就會模糊的一塌糊塗。這當然不是我們想要的結果,另外一種方法通Delaunay triangulation 把人臉關鍵點對齊,然后再做均值疊加,最終生成的照片會清晰很多,詳細的過程和理論何以參考http://www.learnopencv.com/average-face-opencv-c-python-tutorial/
平均臉生成的代碼是average.py,最后我把從4100照片里面挑選出來認為漂亮的49張照片做了一個平均臉,最后的生成結果如下:
效果還是挺不過的,我猜這就是我的夢中情人了吧,不過這也太像劉詩詩了!用face++的相似臉檢查一下,果然就是劉詩詩。
PS1:本來想做的沒有做出來,白花了一天時間給四千多張圖片打標簽,想想還是挺郁悶的。
PS2:為什么不把所有的人做一個平均臉,因為對我來說沒什么意義,我就是想單純的想看一下我覺得漂亮的女生是什么樣子。