元宇宙場景技術實踐|實現(xiàn)“虛擬人”自由
發(fā)布日期:2023/1/29 16:11:37 瀏覽量:
元宇宙場景技術實踐|實現(xiàn)“虛擬人”自由
虛擬形象是虛擬世界的核心資產(chǎn),也是打造元宇宙社交的數(shù)字名片,從虛擬形象為切入點,ZEGO Avatar 基于強大的 AI 算法能力,可以為企業(yè)提供多元化風格虛擬形象制作及智能互動服務,助力企業(yè)打造虛擬形象數(shù)字資產(chǎn),創(chuàng)造多樣的玩法體驗,支持客戶以相對較低的門檻快速進入元宇宙賽道。
上期內容中我們介紹了元宇宙場景下的虛擬直播實踐流程,本期內容我們以 iOS 版本為例來講一講如何捏出千人千面的虛擬形象,助力開發(fā)者快速實現(xiàn)虛擬形象!
前提條件
在實現(xiàn)基本的 Avatar 功能之前,請確保:
已在項目中集成了 Avatar SDK,詳情請參考 集成 SDK;
已開啟攝像頭權限。
使用步驟
本節(jié)介紹如何使用 ZegoAvatar SDK 實現(xiàn)基本的圖像處理功能,API 調用時序如下圖:

1 申請鑒權
ZEGO Avatar 目前使用 在線鑒權 的方式獲取 License 授權文件。
1.1 開通 ZegoAvatar 權限
請先在 ZEGO 控制臺 創(chuàng)建項目,并申請有效的 AppID 和 AppSign,詳情請參考 控制臺 - 項目管理 中的“項目信息”。
請聯(lián)系 ZEGO 商務人員,提供自己項目的 Bundle Id,開通相關權限。
1.2 獲取參考代碼
請將從 下載 獲取到的示例源碼中的 LicenseHelper 文件夾中的代碼,拷貝到自己的項目下。

修改 ZegoAvatarConfig.h 文件,請使用已獲取的 AppID 和 AppSign 正確填寫,否則示例源碼無法正常運行。

在項目中,選擇 “TARGETS > Signing & Capabilities” 菜單,將 “Bundle Identifier” 設置為申請權限時所提供的 Bundle Id。

1.3 安裝依賴庫
打開終端,進入項目根目錄,執(zhí)行 pod ’YTKNetwork’引入依賴庫;
執(zhí)行 pod install 命令安裝依賴庫。
1.4 獲取 License
通過 ZGAvatarLicenseHelper 中的 requestLicense 接口,發(fā)起網(wǎng)絡請求,獲取鑒權 License 字符串。

2 初始化 AvatarService
2.1 初始化 AvatarService 之前,請先導入以下相關的頭文件,準備基礎工作。

2.2 導入頭文件后,調用 initWithConfig 接口,傳入之前獲取到的鑒權 License 字符串,初始化 AvatarService。

2.3 注冊 onStateChange 回調,接收初始化狀態(tài)的相關回調通知。

3 創(chuàng)建虛擬形象
注意:在創(chuàng)建虛擬人物形象時,為了簡化 Character(虛擬人物形象)的初始化、序列化、數(shù)據(jù)緩存、路徑拼接等功能的接入流程,ZEGO Avatar SDK 提供了 ZegoCharacterHelper 類(開源),幫助開發(fā)者快速創(chuàng)建人物虛擬形象,詳情請參考 ZegoCharacterHelper 使用說明。
初始化 AvatarService 后,通過創(chuàng)建 ZegoCharacterHelper 對象,傳入虛擬人物形象的外觀數(shù)據(jù)(捏臉、換裝、妝容等),設置視圖參數(shù)(寬、高、位置等),創(chuàng)建一個虛擬形象。

說明:如果用戶不使用默認形象,想要根據(jù)圖片自動生成定制化的虛擬形象,請參考 AI 捏臉。
Avatar 功能拓展
我們已經(jīng)知道,圖像由像素組成,而像素通過記錄色彩空間各分量呈現(xiàn)各種各樣的色彩。對于 RGB 色彩空間,其三個分量 R(紅)、G(綠)、B(藍),它們之間具有相關性,對于色彩的表示來說缺一不可。
虛擬形象創(chuàng)建完成后,可體驗 Avatar 相關功能:
1 表情隨動
ZEGO Avatar SDK 提供了表情隨動功能,基于領先的人臉關鍵點精準識別,結合面部、舌頭、眼球在內的 52 種基礎面部表情維度,實時捕獲用戶臉部的表情動作,在虛擬形象上進行實時的還原渲染??蓮V泛應用于社交互動、語聊直播等場景中。
開發(fā)者請參考以下步驟,實現(xiàn) “表情隨動” 功能:
1.1 開始表情檢測
開啟表情檢測前,請確認已開啟攝像頭權限;
開發(fā)者如果使用了 ZegoCharacterHelper,則無需再調用 IZegoCharacter 的任何相關接口。
搭建出基本的虛擬人物形象后,調用 startDetectExpression 接口,設置驅動模式為 ZegoExpressionDetectModeCamera,通過前置攝像頭,開始檢測表情;然后可以直接通過 ZegoCharacterHelper的 setExpression 接口設置表情,驅動當前虛擬人物的面部表情變化。
// 開始表情檢測
___weak typeof(self) weakSelf = self;
BOOL ret = [[[ZegoAvatarService sharedInstance] getInteractEngine] startDetectExpression:ZegoExpressionDetectModeCamera callback:^(ZegoExpression *expression) {
// 驅動虛擬人物的臉部變化
__strong typeof(self) strongSelf = weakSelf;
[strongSelf.characterHelper setExpression: expression];
}];
1.2 停止表情檢測
將應用切換到后臺運行、或退出當前頁面時,需要調用 stopDetectExpression 接口,停止表情檢測。

2 語音驅動
ZEGO Avatar SDK 提供了語音驅動功能,通過聲音的聲波信息,實時驅動當前虛擬人物的嘴形變化,使得虛擬形象能夠和真人一樣進行自然的情緒表達。
可廣泛應用于社交互動、語聊直播等場景中。
開發(fā)者請參考以下步驟,實現(xiàn) “語音驅動” 功能:
2.1 開始語音檢測
開始語音檢測前,請確認已開啟麥克風權限;
開發(fā)者如果使用了 ZegoCharacterHelper,則無需再調用 IZegoCharacter 的任何相關接口。
搭建出基本的虛擬人物形象后,調用 startDetectExpression 接口,設置驅動模式為 ZegoExpressionDetectModeAudio,通過麥克風,開始檢測聲音波動;然后可以直接通過 ZegoCharacterHelper 的 setExpression 接口設置表情,驅動當前虛擬人物的嘴形變化。
// 開始語音檢測
___weak typeof(self) weakSelf = self;
BOOL ret = [[[ZegoAvatarService sharedInstance] getInteractEngine] startDetectExpression:ZegoExpressionDetectModeAudio callback:^(ZegoExpression *expression) {
// 驅動虛擬人物的嘴形變化
__strong typeof(self) strongSelf = weakSelf;
[strongSelf.characterHelper setExpression: expression];
}];
2.2 自定義音頻采集
開發(fā)者可以調用 setCustomAudioDelegate 接口,設置自定義的音頻數(shù)據(jù)采集代理(需要繼承 AudioDataDelegate 實現(xiàn) onStart 和 onStop 方法)。采集到音頻數(shù)據(jù)后,調用 sendAudioData 接口,發(fā)送數(shù)據(jù)。
@interface ExpressAudioCaptureDelegate()
{
BOOL _isRunning;
}
@end
@implementation ExpressAudioCaptureDelegate
- (void)onStart{
// 啟動音頻采集
_isRunning = YES;
}
- (void)onStop{
// 停止音頻采集
_isRunning = NO;
}
// 這是 Express 的自定義聲音的前處理回調, 把數(shù)據(jù)發(fā)送給 Avatar SDK
- (void)onProcessCapturedAudioData:(unsigned char * _Nonnull)data dataLength:(unsigned int)dataLength param:(ZegoAudioFrameParam *)param timestamp:(double)timestamp; {
if(_isRunning){
// data: pcm的原始數(shù)據(jù)
// length: data的長度
// dataType: data采集的位數(shù) 0表示16位,1表示8位
// timeStamp: 時間戳, 從啟動采集到現(xiàn)在經(jīng)過的時間
// sendAudioData 是父類方法, 數(shù)據(jù)透傳給 Avatar SDK, RTC 的數(shù)據(jù)是 8位的, dataType 是 1
[super sendAudioData: (void*)data size:dataLength dataType: 1 /* RTC 給的 8bit*/ timeStamp: [super getDurationMs]/*這個方法是父類的,直接調用*/];
}
}
@end
2.3 停止語音檢測
將應用切換到后臺運行、或退出當前頁面時,需要調用 stopDetectExpression 接口,停止語音檢測。

3 手動捏臉
ZEGO Avatar SDK 提供了手動捏臉功能,支持用戶根據(jù)自己的審美偏好,對虛擬人物形象臉部的各個部位進行細微調節(jié)(如眼睛大小、鼻子寬窄、嘴巴大小等),融合成自定義的虛擬人物形象人臉,自由定義,打造獨一無二的專屬形象,可廣泛應用于各類游戲場景中。
開發(fā)者請參考以下步驟,實現(xiàn) “手動捏臉” 功能:
搭建出基本的虛擬人物形象后調用 setFaceShape 接口,傳入 faceshapeID(可調整的臉部維度,請參考下表)和 value(捏臉系數(shù))等參數(shù),設置或修改臉部相關位置的形狀。我們在 helper/ZegoCharacterHelper.h 中,同樣聲明了所有可支持調整的臉部維度 faceshapeID。

目前,支持調整的臉部維度可以點擊鏈接查看詳情:https://doc-zh.zego.im/article/14959
4 AI 捏臉
ZEGO Avatar SDK 提供了AI 捏臉功能,支持通過“攝像頭”或者“上傳圖像”的方式,結合對人臉進行海量分析和訓練后的 AI 算法,識別人臉特征,再以美術設計提供的虛擬形象人模為基礎,生成與真人高度還原的虛擬形象??蓮V泛應用于各類游戲場景中。
開發(fā)者請參考以下步驟,實現(xiàn) “AI 捏臉” 功能。
4.1 初始化 AvatarService
請參考 創(chuàng)建虛擬形象 文檔,獲取鑒權 License 文件;并傳入正確的 AIPath,初始化 AvatarService。
4.2 創(chuàng)建虛擬人物形象
準備需要用來創(chuàng)建虛擬人物形象的 UIImage 圖片。
推薦使用攝像頭拍攝圖片。
準備好圖片后,調用 detectFaceFeature 接口,傳入 UIImage,即可生成該圖片對應的虛擬人物形象。

如果 UIImage 中檢測不到人臉,調用 detectFaceFeature 接口會直接返回 nil。
4.3 設置捏臉數(shù)據(jù)
創(chuàng)建出虛擬人物形象后,調用 ZegoCharacterHelper 的 applyFaceFeature 接口,傳入 feature(設置的臉部維度,可設置的維度請參考下表),設置臉部相關位置的形狀。

目前,支持調整的臉部維度可以點擊鏈接查看詳情:https://doc-zh.zego.im/article/14972
5 妝容換裝
ZEGO Avatar SDK 提供了多種妝容配飾(如美瞳、口紅、眼鏡、胡子、服裝等)等美術素材,支持在虛擬形象上實時渲染、自然替換,打造符合自己品味的專屬形象。
開發(fā)者請參考以下步驟,實現(xiàn) “換妝容、換服裝” 功能。
目前,支持調整的維度有:眉毛、刺青、嘴唇、胡子、美瞳、眼鏡、耳機、耳飾、頭發(fā)、服裝等。具體的支持維度和資源類型,請咨詢 ZEGO 商務人員。
開發(fā)者如果使用了 ZegoCharacterHelper,則無需再調用 IZegoCharacter 的任何相關接口。雖然 IZegoCharacter 也有同名的 setPackage 接口,但請不要直接調用。如果跳過 ZegoCharacterHelper 直接調用 IZegoCharacter 的接口,ZegoCharacterHelper 層的緩存將不再可信。
搭建出基本的虛擬人物形象后:
如果開發(fā)者把 Packages 資源包做成動態(tài)下載,則需要在使用 Packages 前,調用 ZegoCharacterHelper 的 setExtendPackagesPath 接口設置 Packages 的下載目錄到參數(shù) downloadPath,以便資源索引。
downloadPath 需指到 Packages 文件夾,例如:/Documents/downloads/Package/。
調用 setPackage 接口,傳入 packageID,調整虛擬人物相關位置的外觀。
//確保換裝調用前已經(jīng)設置的外部 Packages 的目錄
[_characterHelper setExtendPackagesPath:downloadPath]
/** 調用換裝接口*/
NSString *packageID = @"earphone7"; //earphone7 是一款耳機資源的目錄名稱,使用 Zego 提供的 Pacakges 下的目錄名稱即可。
[_characterHelper setPackage:packageID];
demo 展示
元宇宙是人類對于未來社會的美好想象,而虛擬人則是人類對于未來“Better me”的美好寄托。ZEGO 即構科技為用戶定制個性化的虛擬形象,從技術底層為開發(fā)者賦能,與元宇宙生態(tài)里的所有成員一起,讓元宇宙的理想進程推進得再快、再穩(wěn)一些。
下方是ZEGO即構科技的 Avatar 展示!
馬上咨詢: 如果您有業(yè)務方面的問題或者需求,歡迎您咨詢!我們帶來的不僅僅是技術,還有行業(yè)經(jīng)驗積累。
QQ: 39764417/308460098 Phone: 13 9800 1 9844 / 135 6887 9550 聯(lián)系人:石先生/雷先生