隨著人工智能、虛擬現(xiàn)實(VR)技術(shù)的迅猛發(fā)展,虛擬人技術(shù)也日漸形成潮流。日本著名廣告公司博報堂曾依據(jù)近500名年輕員工的照片形象,電腦合成男女員工的樣貌得到公司平均臉。他們還對這張“平均臉”委以重任,讓它成為了公司的形象代言人。 超現(xiàn)實的公司“平均臉” 如果我們利用北服學(xué)子的圖像信息計算平均臉,制作能夠代表北服的平均臉會得到什么結(jié)果呢?服裝藝術(shù)與工程學(xué)院派研究中心和北服信息中心合作,合作研發(fā)了北服學(xué)生平均臉技術(shù),可以用于北服虛擬人的研究之中。 不過在揭曉北服“平均臉”之前,我們此處先賣個關(guān)子,談?wù)勈裁词瞧骄樇夹g(shù)。 有趣的“平均臉” 仔細看下面的照片,你覺得她美嗎?有什么有趣的特征嗎? 照片中的女性同時擁有白人血統(tǒng)、西班牙人血統(tǒng)、亞洲人血統(tǒng)以及印度人血統(tǒng)。她皮膚光彩無暇,眼神撲朔迷離,似乎美得不真實。其實,她并不真實存在,但她也并非完全虛構(gòu)。創(chuàng)造她的正是今天要介紹的一項黑科技:“平均臉”。 想必大家也曾看到過很多合成的“平均臉”圖片。如下圖就是一些按國家、民族合成的“平均臉”: “平均臉”的歷史 其實平均臉的歷史相當(dāng)悠久?!捌骄槨痹从谶_爾文的堂兄弗朗西斯·高爾頓(Francis Galton)在1878年提出的一種新的攝影技術(shù)——通過對準(zhǔn)眼睛來合成人臉。弗朗西斯·高爾頓爵士是英國維多利亞時代的博學(xué)家、人類學(xué)家、優(yōu)生學(xué)家、熱帶探險家、地理學(xué)家、發(fā)明家、氣象學(xué)家、統(tǒng)計學(xué)家、心理學(xué)家和遺傳學(xué)家。 他認(rèn)為,通過生成罪犯的平均臉,人們就可以根據(jù)面部特征來預(yù)測一個人是否是罪犯。很顯然,他的假設(shè)是錯誤的——你不能通過照片來預(yù)測一個人是否是罪犯。雖然高爾頓爵士的初衷沒有達到,但合成平均臉的方法卻保留了下來。 這一方法是通過將許多人的照片合成為一張照片完成的。當(dāng)時具體的做法是:照片疊加——給多個人,比如20個人,照相,將每個人照片所需的曝光時間縮短為1/20,通過20次曝光得到一張“平均”照片。 人們意外的發(fā)現(xiàn),這樣合成的人臉看起來比大部分人的臉都要好看!按常理說,平均臉應(yīng)該是一張平庸的“大眾臉”,為什么“平均臉”反而更加吸引人? 根據(jù)進化假說,有性繁殖的動物會尋找長著平均臉的伴侶,因為偏離平均值可能產(chǎn)生不利的突變。平均臉也是對稱的,因為臉的左邊和右邊的變化是平均的。 2002年研究者們生成了22名入圍當(dāng)年德國小姐評選決賽的選手的平均臉,并讓吃瓜群眾打分。結(jié)果顯示人們認(rèn)為平均臉比22位選手的臉更有吸引力,包括贏得比賽的柏林小姐。緊接著人們發(fā)現(xiàn),柏林小姐的長相和這張平均臉非常接近。 如何制作平均臉 隨著信息技術(shù)發(fā)展,數(shù)碼時代允許我們利用程序設(shè)計進行以前不敢想的事情,利用計算機算法的平均臉生成技術(shù)已經(jīng)成熟。 平均臉,指用一定數(shù)量的普通人臉提取面部特征,根據(jù)測量數(shù)據(jù)求平均值,再利用計算機技術(shù)得到一張合成臉。 制作“平均臉”的過程大概有以下幾個步驟: 首先提取需要得出平均臉群體的一定數(shù)量照片; 再次將每張照片的五官(耳朵除外)輪廓提取出來,然后將它平均,例如一個大眼睛加一個小眼睛就是一個中等大小的眼睛; 然后將第一步得到的平均輪廓,用對應(yīng)位置的平均膚色將之填充,只要擁有足夠數(shù)量的樣本,就可以給該群體一張比較精確的“平均臉”了。 后面我們會給出實現(xiàn)的大致方法。 北服平均臉 激動人心的時刻來了! 北服信息中心擁有北服強大的數(shù)據(jù)資源,服裝藝術(shù)與工程學(xué)院派研究中心與信息中心緊密合作,根據(jù)平均臉技術(shù),開發(fā)了北京服裝學(xué)院2019級學(xué)生的平均臉,男生和女生各一個。其中女生采集到了1203幅圖像,男生采集到了311幅圖像。為了保護隱私,我們不提供實際的人臉數(shù)據(jù)融合過程,只提供結(jié)果。 下圖是所有參與平均臉生成的女生馬賽克圖: 以下是311幅男生的頭像馬賽克圖: 根據(jù)以上頭像產(chǎn)生了北服男女2019級學(xué)生的平均臉,請看如下大圖: 是不是顏值非常高呢? 我們再看一下北京航天航空大學(xué)2019年的男女新生的平均臉圖像,是不是更有理工范兒呢? 算法+程序的力量 上面的過程看著還挺復(fù)雜是不是?想到編程大伙兒都會感到頭大。其實,如果使用python程序設(shè)計語言,加上opencv + dlib的第三方插件,“平均臉”技術(shù)只需要百十行代碼就能搞定! 01 面部特征檢測 首先,使用dlib庫在每張面部圖像上建立68個面部基準(zhǔn)點。 02 圖像坐標(biāo)轉(zhuǎn)換 圖像的尺寸很可能是不一樣的,同時面部也很可能處于圖像的不同位置,所以我們需要標(biāo)準(zhǔn)化面部特征,并把它們放到同一參考坐標(biāo)系下。 為了實現(xiàn)這一點,確保兩只眼睛的點都在一個水平線上,面部中心大約在離頂端三分之一高度的位置。所以我將眼角位置設(shè)為(0.3*寬,高/3)和(0.7*寬,高/3)。 03 人臉對齊 現(xiàn)在所有圖像都是相同大小,并且眼睛的兩角都分別對齊。似乎對這些圖像每個像素的值進行平均我們就能得到平均臉啦。但如果你真這么做了,會得到下圖這樣的結(jié)果。當(dāng)然眼睛肯定是對齊的,但是其他面部特征都沒對齊。 不要緊!在獲得了68個面部基準(zhǔn)點之后,我們結(jié)合人臉?biāo)诘木匦蔚乃膫€頂點和每條邊的中心點,將人臉?biāo)诘木匦畏指畛扇缦聢D所示的三角形的組合,稱為平均基準(zhǔn)點的Delaunay三角剖分。 至此,我們計算出了人臉基準(zhǔn)點的平均位置,并用這些位置計算出Delaunay三角剖分,將圖像分成若干三角形。如上圖所示,左圖是變換后輸入圖像的Delaunay三角剖分,中圖是平均關(guān)鍵點的三角剖分。用這一變換將左圖三角形1中的所有像素變換到中圖的三角形1中去。對左圖每個三角形重復(fù)該過程,就可以得到右圖的結(jié)果。右圖只是將左圖按規(guī)則扭曲到了平均臉上。 04 人臉平均 經(jīng)過了上述處理之后,我們就可以對這些照片的像素取平均值,得到神奇的平均臉了。 來源:網(wǎng)絡(luò) |
|