Animoji實(shí)現(xiàn)方案分享

寫在前面

由于之前在申請專利,所以文章不能發(fā)出來仲闽,現(xiàn)在發(fā)出來幫助有需要的人眼虱。

Animoji

蘋果在今年的十周年特別版iPhone X發(fā)布會上或舞,推出了Animoji功能。該功能基于iPhone X的結(jié)構(gòu)光傳感器蒙幻,捕捉用戶的表情變化,生成相應(yīng)的3D動畫表情胆筒。本文介紹了基于ARKit + SceneKit的Animoji實(shí)現(xiàn)方案邮破。


圖1?發(fā)布會上的Animoji介紹

Animoji原理

???在人臉建模后,通過獲取人臉追蹤與表情捕捉的數(shù)據(jù)仆救,更新到虛擬形象上抒和,使虛擬形象與用戶人臉的位置與表情相同步。

(1)?人臉建模

在高端設(shè)備上彤蔽,借助紅外攝像頭與結(jié)構(gòu)光點(diǎn)陣投影儀摧莽,根據(jù)獲取的點(diǎn)云數(shù)據(jù),結(jié)合利用泛光照明器得到的紅外圖像顿痪,通過隨機(jī)交替獲取二者數(shù)據(jù)镊辕,做3D人臉建模。

(2)人臉追蹤與表情捕捉

人臉追蹤:依據(jù)人臉檢測算法和SLAM(同步定位與地圖構(gòu)建)算法蚁袭,實(shí)時追蹤人臉在圖像中的位置變化征懈,并計算人臉在3D空間中的位置。

表情捕捉:依據(jù)基于深度學(xué)習(xí)的表情識別算法揩悄,通過匹配用戶當(dāng)前人臉數(shù)據(jù)到表情庫卖哎,識別出用戶當(dāng)前表情。

(3)虛擬形象渲染

構(gòu)建與真實(shí)世界相同坐標(biāo)的虛擬世界删性,創(chuàng)建虛擬形象并實(shí)時計算它與人臉之間的位置映射關(guān)系亏娜,基于表情捕捉得到的數(shù)據(jù)來更新虛擬形象的動畫表情。

Animoji效果

視頻鏈接

Animoji方案

本方案使用?變形動畫+骨骼動畫+骨骼控制?來實(shí)現(xiàn)Animoji蹬挺。

變形動畫:使用預(yù)先制作好的表情基作為變形目標(biāo)维贺,通過變形的方式來確定模型表面每個頂點(diǎn)最終的位置,使用SceneKit渲染的話汗侵,可以用SCNMorpher來實(shí)現(xiàn)幸缕。

骨骼控制:在設(shè)計師刷好骨骼對蒙皮的權(quán)重后,就可以通過骨骼控制或者加載骨骼動畫來實(shí)現(xiàn)非變形部分的動畫晰韵。

骨骼動畫

建立虛擬形象模型

(1)虛擬形象靜態(tài)模型

虛擬形象分為強(qiáng)表情部分和弱表情部分发乔,以頭部舉例:臉部為強(qiáng)表情部分,眼睛牙齒耳朵等為弱表情部分雪猪。強(qiáng)表情部分用捕捉的表情數(shù)據(jù)更新栏尚,弱表情部分則根據(jù)用戶頭部的運(yùn)動數(shù)據(jù)與表情變化來更新。


圖2?強(qiáng)表情部分和弱表情部分

例如:用戶邊轉(zhuǎn)頭邊做鬼臉只恨,強(qiáng)表情部分译仗,即臉部會更新為用戶的表情形象抬虽,而弱表情部分,如耳朵骨骼會根據(jù)用戶頭部轉(zhuǎn)動的速度變彎曲纵菌,舌頭會在嘴巴長到一定幅度伸出阐污。

(2)制作表情基

表情基分為普通表情基與混合表情基。表情基與靜態(tài)模型的強(qiáng)表情部分的拓?fù)浣Y(jié)構(gòu)完全一致咱圆,且在同一個尺度空間下大小相同笛辟。不同表情基,模型的網(wǎng)格頂點(diǎn)數(shù)一樣序苏,多邊形一一對應(yīng)手幢,不同的是頂點(diǎn)的位置不同(如大笑嘴部的頂點(diǎn)就會有位移)。

普通表情基是一些設(shè)計好的臉部模型忱详,如圖3围来。普通表情基代表一些固定的人臉表情,如張嘴匈睁、眨眼监透,為了縮減大小,表情基除了幾何體沒有其他任何信息航唆,并且分割為若干子部分才漆。


圖3?不同的表情

混合表情基是若干特定的普通表情基的非線性組合,在運(yùn)行時計算得出佛点,用以擴(kuò)展表情的豐富度醇滥,理論上有混合表情基的支持,虛擬形象能夠模擬無限多個表情超营,而不是只在普通表情基這個維度鸳玩,混合表情基的計算方式如下式,?B( i )表示第i 個混合表情基演闭,E( j )表示第j個普通表情基不跟。


表情分割

本系統(tǒng)將表情分割成5部分,在加載表情時米碰,只使用有效部分窝革,(如眨眼就只加載眼部),縮小了表情的計算量吕座。分割表情時虐译,使用更平滑的頂點(diǎn)法線來避免分割后可能產(chǎn)生的裂縫。


表情權(quán)重分配機(jī)制

本系統(tǒng)對不同表情分配了不同的權(quán)重吴趴,在更新時漆诽,對于高權(quán)重的表情,會先加載先更新,提高每次更新表情的用戶體驗(yàn)厢拭,縮短關(guān)鍵表情的等待時間兰英,流程圖如下。


分包加載

本系統(tǒng)的加載方式采用分包加載的方式供鸠,首先將分割好的表情基分布存儲在若干文件中畦贸,在需要的時候分包加載,模型開始更新的時間是之前的20%楞捂。


建立骨骼

對于弱表情部分家制,他們是根據(jù)頭部的運(yùn)動與表情變化來做更新,本系統(tǒng)對弱表情部分建立骨骼來控制它們泡一。當(dāng)用戶向右看時,控制眼球骨骼向右旋轉(zhuǎn)觅廓;當(dāng)用戶張嘴時鼻忠,控制下巴骨骼向下旋轉(zhuǎn);當(dāng)用戶向右轉(zhuǎn)頭時杈绸,耳朵會根據(jù)轉(zhuǎn)頭速度向左旋轉(zhuǎn)帖蔓。


圖4?用于控制弱表情部分的骨骼

骨骼動畫

除了上一點(diǎn)所說的更新方式,本系統(tǒng)還使用骨骼動畫來來做更精致瞳脓、可運(yùn)營的表情塑娇。骨骼動畫與命中邏輯可動態(tài)下發(fā)。

基于人臉追蹤與表情捕捉數(shù)據(jù)更新虛擬形象

初始化之后劫侧,虛擬形象會添加到虛擬世界中埋酬,用戶人臉在真實(shí)世界中的運(yùn)動會同步到虛擬形象在虛擬世界的運(yùn)動。同時通過表情捕捉數(shù)據(jù)烧栋,拆解用戶表情為普通表情基和混合表情基的線性組合钻哩,利用此組合更新虛擬形象的強(qiáng)表情部分诫肠。如下式,?E(user)是用戶當(dāng)前的表情,E是普通表情基厉亏,B是混合表情基。


更新方式是:遍歷表情基E的網(wǎng)格的每一個頂點(diǎn)弯汰,通過下式計算其最終的位置综慎。其中V(i)表示第i?個頂點(diǎn),V(E1)表示在表情基E1中相應(yīng)的頂點(diǎn)酬姆,A(i)表示表情Ei的權(quán)重嗜桌。


對于弱表情部分,本系統(tǒng)根據(jù)頭部的運(yùn)動與表情的變化辞色,通過骨骼控制它們症脂。弱表情部分包括但不限于耳朵、下牙與舌頭、眼球诱篷。

對于耳朵:

當(dāng)頭部轉(zhuǎn)動時壶唤,通過判斷轉(zhuǎn)頭的速度來控制耳朵骨骼的旋轉(zhuǎn),從而彎曲耳朵棕所。計算公式如下式闸盔,Ear(eulerAngles)為耳朵骨骼的歐拉角,V(x), V(y)?分別為頭部轉(zhuǎn)動的偏航角速度琳省、俯仰角速度迎吵,A、B分別為計算所需的補(bǔ)償值针贬,效果如圖6击费。


圖6?頭部轉(zhuǎn)動時耳朵彎曲

1)??當(dāng)用戶張大嘴時,耳朵向內(nèi)彎曲桦他,彎曲幅度由云端控制蔫巩。

2)??當(dāng)用戶閑置時,耳朵部分播放骨骼動畫快压,動畫與觸發(fā)邏輯由云端下發(fā)圆仔。

對于下牙與舌頭:

1)??當(dāng)用戶張嘴時,下牙與舌頭的骨骼配合張嘴表情向下旋轉(zhuǎn)蔫劣。計算公式如下坪郭,Jaw為下牙與舌頭骨骼的歐拉角,H?為云端控制的最大俯仰角閾值脉幢,A為當(dāng)前表情的張嘴表情系數(shù)歪沃。


2)??當(dāng)用戶張嘴且下唇特征點(diǎn)出現(xiàn)特定變化,判斷用戶在張嘴伸舌頭嫌松,變形舌頭并伸出舌頭绸罗,效果如圖9。


圖9?虛擬形象張嘴伸舌頭

3)??當(dāng)用戶張嘴伸舌頭時豆瘫,移動頭部珊蟀,控制舌頭左右變形,以符合頭部的運(yùn)動外驱。

對于眼球:

1)??眼球的轉(zhuǎn)動主要根據(jù)眼部表情變化來控制育灸,計算方式如下式,Eye為眼球骨骼的歐拉角昵宇,S為計算旋轉(zhuǎn)的方向值磅崭,H為云端控制的最大俯仰角與偏航角閾值,A為當(dāng)前表情的眼部表情變化系數(shù)瓦哎。


全景背景與粒子特效

通過下發(fā)不同的360全景圖片或視頻作為背景砸喻。當(dāng)用戶做特殊表情或者特殊話語柔逼,觸發(fā)全景背景的更改與粒子特效,當(dāng)用戶旋轉(zhuǎn)手機(jī)時割岛,能看到不同的內(nèi)容愉适,豐富了產(chǎn)品的應(yīng)用空間,效果如下圖癣漆。


圖?10?背景為360全景圖维咸,用戶轉(zhuǎn)動手機(jī)可看到不同

更進(jìn)一步

目前模型的體積較大,考慮采用運(yùn)行時平滑惠爽、著色的方式癌蓖,實(shí)現(xiàn)素材包的體積減少,使用運(yùn)行時加頂點(diǎn)的平滑方式婚肆,可以讓素材包減小80%左右租副。

與TTS結(jié)合,讓用戶可以通過語音控制一些彩蛋邏輯较性。

結(jié)合圖像處理用僧、深度學(xué)習(xí)算法,拓寬應(yīng)用場景两残,實(shí)現(xiàn)更好玩的玩法。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末把跨,一起剝皮案震驚了整個濱河市人弓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌着逐,老刑警劉巖崔赌,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異耸别,居然都是意外死亡健芭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門秀姐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慈迈,“玉大人,你說我怎么就攤上這事省有⊙髁簦” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵蠢沿,是天一觀的道長伸头。 經(jīng)常有香客問我,道長舷蟀,這世上最難降的妖魔是什么恤磷? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任面哼,我火速辦了婚禮,結(jié)果婚禮上扫步,老公的妹妹穿的比我還像新娘魔策。我一直安慰自己,他們只是感情好锌妻,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布代乃。 她就那樣靜靜地躺著,像睡著了一般仿粹。 火紅的嫁衣襯著肌膚如雪搁吓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天吭历,我揣著相機(jī)與錄音堕仔,去河邊找鬼。 笑死晌区,一個胖子當(dāng)著我的面吹牛摩骨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播朗若,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼恼五,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了哭懈?” 一聲冷哼從身側(cè)響起灾馒,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎遣总,沒想到半個月后睬罗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旭斥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年容达,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垂券。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡花盐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出菇爪,到底是詐尸還是另有隱情卒暂,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布娄帖,位于F島的核電站也祠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏近速。R本人自食惡果不足惜诈嘿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一堪旧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奖亚,春花似錦淳梦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至作郭,卻和暖如春陨囊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背夹攒。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工蜘醋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人咏尝。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓压语,卻偏偏與公主長得像,于是被迫代替她去往敵國和親编检。 傳聞我的和親對象是個殘疾皇子胎食,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 文章轉(zhuǎn)載自https://blog.csdn.net/n5/article/details/3105872 201...
    EternalSunLhx閱讀 7,008評論 0 2
  • 又是一個人,擁被而眠允懂。睜開慵懶的眼睛厕怜,看著太陽一點(diǎn)點(diǎn)升起,我的心卻在一點(diǎn)點(diǎn)跌落:我想見的人累驮,他沒有來酣倾。 總是這樣舵揭,...
    紫月砂雪閱讀 200評論 7 2
  • 親愛的一承 你好谤专! 我在寫回信的時候,發(fā)寫信五的回信已經(jīng)寫過了午绳,這封應(yīng)該是信六了置侍,你自己更正一下吧。你看拦焚,記錄的好...
    尤承琪閱讀 651評論 5 2
  • 路盡終南 芳草碧連天重陽宮外 檀香繞聲聲泉聚水深淵 冰封古墓前可曾留步 問君寒 一場冷雨過 霹靂碎云端生死皆注定 ...
    夢飲千樽月閱讀 633評論 0 50