github
TheRamU/Fay: 語音互動,直播自動帶貨 虛拟數字人 (github.com)
gitee
fay: 這是一個數字人項目,包含python核心及ue數字人模型,可以用于做數字助理及自動直播,又或者作為你的應用入口也很帥 (gitee.com)
2022.10.27
補充mac上的安裝辦法:(34條消息) Fay數字人開源項目在mac 上的安裝辦法_郭澤斌之心的部落格-CSDN部落格
一、實際應用案例
抖音虛拟主播
人機互動
數字站桶人
二、數字人是什麼
首先我先給數字人重新做一個定義:“把人數字化,以行人的職責”。怎麼了解呢?我舉兩個例子就清楚了。第一個是現在直播帶貨,主播成本越來越高,我們的數字人能否代替主播24小時自動帶貨呢?這裡數字化的是主播的形象、聲音、性格特質,以及商品的知識。另一個是,一些客服或者售前情景,所做的工作也是重複度非常高,我們能否交給數字人去完成呢?這裡就簡單多了,隻需要把知識庫給數字化,就是我們常說的Q&A。
“把人數字化”這個說得有些籠統,具體來說是把人的那些方面可以數字化呢?
- 三維人物:資訊的傳輸需要載體,把三維人物形象作為載體可以融入語音、文字、動作、情緒等資訊傳輸通道,遠比單純的語音或文字的承載量大得多。
- 語言:你的數字人會說什麼内容,以怎麼樣的聲音說話,用的是粵語還是國語。
- 形象表情動作:一個數字人單純的隻會與人溝通還不夠,還需要能夠做出不同的表情動作。不竟,人類溝通70%的内容是通過非語言傳達的,數字化的過程中我們又怎會錯過條重要的資訊通道呢。
- 情緒:情緒可以附加在語言和表情動作裡,讓資訊傳輸的帶寬更大。
- 環境模型:數字人向你展示的時候是在大廳,還是在房間,在戶外。然後數字人的周圍有些什麼,這都可以襯托出不同的氛圍。
我們再來說說,一個數字人如何行人的職責。比如,在展廳裡,不能讓解說員24小時站在展品前面等着遊客來詢問,更不能循環播放着一個段音視訊。但數字人可以,隻需要一個顯示屏即可。若你辦的是一個雲展廳、元宇宙,就更是如此了。
三、數字人可以解決什麼問題
數字時代,數字産品泛濫,網際網路平台多不勝數。那個這個數字人就是你在不同的電子産品、不同平台上的分身,代替你行人的職責。除了文章開頭說的三個案例外,至少還可以用于:
- 電子導遊;
- 電子解說員;
- 虛拟老師;
- 售前、售後客服;
- 前台指引。
四、這個數字人怎麼實作
我們以直播帶貨為例,為了友善了解,首先說明的是我們對直播場景做過分析,發現了如下邏輯:
接下來我來就可以來具體操作了:
1、建立行為模型
這會直接影響到數字人接受外部刺激(大數多情況下是,使用者說的話,在直播場景下也有粉絲關注送愛心等情況)之後的情緒變化,以及響應的方式和程度。你可能會想,為什麼需要建行為模型呢?舉個例子你就明白了。你可以設計了一個邏輯,粉絲點贊時,主播非常開心地感謝粉絲,粉絲罵主播時,主播表現出憤怒。你在直播時,有一個粉絲點贊了,另一個粉絲同時在罵主播,你的數字人該作出怎麼樣的反應呢?這個隻是簡單的例子,實際情況複雜得多。也有人,說這是算法和AI的差別。這有一定的道理,但說法不嚴緊,這個話題就不在此展開了。我們在直播場景下,試過以下這兩種方式建立性格模型:
- 學習真實主播的性格
我們隻需要把目标主播的直播給錄制下來,提取樣本資料,然後訓練一個從粉絲的不同刺激的組合,到主播的不同響應方式的多元邏輯回歸的數學模型參數即可。
- 人為調節各刺激的影響程度
把現有主播的性格模型數字化,這種方式缺憾也十分明顯,就是你無法快速調節其性格特質。想要人為調節,你也可以參考以下方試:
我們做了一個“數字人控制器”的用戶端,可以手動調節行為模型的參數。想體驗參考的話,也可以私下跟我聯系(qq467665317),我把代碼發你。
2、人物模型、場景載入引擎
人物模型的選擇大體上可以是二次元和超寫實。場景的選擇就很多,可以是戶内戶外,坐着站着。再配合其它物體就可以把整個氛圍襯托出來,比如:沙發可以表現出舒适放松;顯示屏可以不違和的插入廣告資訊。
我們對比了多個引擎技術之後,最終選擇UE4作為模型的驅動引擎。主要有以下幾點原因:首先UE4不像live2d那樣,出來的是假三維的紙片人;其次,UE4裡對現實世界的光照、材質、重量等實體屬性都存在一一映射,可以非常全面地還原一個真實場景。這裡提醒一下,在三維的世界裡,有兩條工具線:一個是引擎,用于驅動三維模型按照你的邏輯運作;一個是模組化工具,比如maya。但通常這兩類工具都會互相融合、互相交叉。
二次元的模型建立可以使用daz studio(偶然機會獲得了120G資源,有需要加我qq467665317),非常簡單。可以非常友善選選擇人的各個組成部分,比如:身驅、頭發、臉型、眼睛等,然後組合成一個你想要的形象。
至于超寫實的模型就可以使用metahuman了。metahuman說白了其實就是一個雲端版本的ue,優點是內建了大量真人掃描的高精度元件,可以非常友善地調節出一個歐美真人。對,你無看錯,是歐美的。官方的解釋是,由于疫情原因,還未對亞洲人進行掃描。在虛拟主播這個案例上實際我們就是用metahuman的。
在直播帶貨案例裡,我們把模型導入到ue4,我們給模型在ue4裡預設了四個動作(站着、站着說話、坐着、坐着說話),三個表情(平靜、開發、憤怒),三個鏡頭(全局、近矩說話、看顯示器播放商品展示)。
當數字人的心情激動(開心和憤怒)是站着的,其餘時候是坐着的,表情也做對應的變化。說話的時候就會做更多的肢體動作了,唇是根據說話的發音驅動同步化的。當主播在介紹商品時切換到顯示器鏡頭,可以形象的看到商品效果(針對每個商品模組化的成本太高)。當主播在與粉絲互動時切換到近矩鏡頭,友善觀看主播的表情動作。其實這兩個鏡頭主播都在說話,當主播說話結束後就切換回全局鏡頭,讓觀衆感受整個環境。
3、行為模型驅動UE引擎裡的三維模型
UE4大多情況下應該是用于遊戲開發和影視制作的,要想使用上文第1點說的行為模型邏輯去控制UE裡的三維模型,網上可以參考的資源非常少。咨詢過常年從事三維模型制作的專家,給出可以參考的答案是把邏輯輸出模拟成鍵盤操作,UE再依據鍵盤輸入來驅動三維模型作出變化。(鍵盤操作?這是把數字人做成遊戲吧?)當然,這種方式我們肯定接受不了,因為這樣無辦法做複雜的資料傳輸。幾經折騰之後,我們在UE商城裡找到一個websocket藍圖插件,與行為模型實作websocket通訊。
4、接通刺激輸入
其實在直播帶貨這個案例裡,我們使用的是抖音,刺激是非常有限的,粉絲在你的直播間裡能做的事情就是這麼點,進來、關注、點贊、刷禮物、購買商品,或者打段文字。在這裡,我們需要擷取直播間上的這些資訊。我們測試過網絡上主流的方法“抓包然後解碼”,這種方法太麻煩,而且離開抖音這個平台之後,就很難再使用這個辦法。是以我們最後使用的方案是,用selenium驅動chrome浏覽器核心加載直播間https連結,擷取浏覽器上的内容。我們再把這個内容推送給上面所說的“行為模型”。這樣方法将會極大地友善以後做平台的遷移。
5、接入輸出通道
在這個案例裡,我們是要把行為模型驅動UE裡三維模型的變化和數字人主播說的音頻,通過視訊流的形式輸出到抖音直播平台。這個我們使用抖音直播伴侶,可以直接上線直播,同時又可以使用抖音上很多玩法。這裡特别強調一下,我們測試過訊飛、阿裡雲、百度、亞馬訊和微軟的語音合成,隻有微軟是直接提供帶情緒的合成。
五、挑戰
1、怎麼樣把人行為、認知、情緒數字化?
如果你要設計一個模型,把人的東西都數字化下來,以目前的水準還沒有人能夠做到。但你鎖定在某一特定的情景,隻要稍加分析,你就會發現,這其實并不難。
2、UE4的功能非常強大、非常多,你遇到的任何一個問題都不少于三個解決辦法,如果你沒有這塊的工作經驗,你就得一個個去試。其間我就翻閱了7本書,無數B站上的視訊教程。其間解決了諸如:websocket通訊、表情動作、唇形同步、光線控制、頭身分離、藍圖通訊等問題。
3、Metahuman的模型導入本地ue後要做很多适應性的調節。若要使用ue商城裡的動作,還需要做骨絡重定向等操作。由于metahuman自帶藍圖,咱們還需要調整原藍圖的邏輯,以相容我們的行為模型的要求。那怕是怎麼控制表情,對于我們來說還是有挑戰的。
4、抖音本身不提供直播的資料接口,故要擷取直播間的互動資料,就得花些工夫了。
5、語音合成沒有你想像中的成熟。若要做情緒語音集的訓練,成本會很高。還好,有微軟的雲端服務。(經驗總結:别太相信國内企業廣告上說的)