靜態模型一鍵動態化,教你如何集成動作捕捉能力
- 2022 年 3 月 10 日
- 筆記
有趣的靜態模型動態化是如何實現的?
華為3D建模服務(3D Modeling Kit)的動作捕捉能力,利用人體檢測技術以及模型加速與壓縮技術、基於深度學習的單目姿態估計演算法,僅需要普通手機的RGB攝影機,就可以捕獲人體24個骨骼關鍵點三維資訊,輕鬆實現靜態模型動態化,讓我們的模型更加生動鮮活。
想要實現此功能也很簡單,一起看下集成步驟吧!
應用場景
該服務廣泛應用於3D內容製作領域,特別是遊戲、影視、醫療等行業。例如,UGC遊戲中角色的驅動及動畫影片製作,虛擬主播的實時驅動,醫療行業的康復指導等。
集成程式碼
1 開發準備
詳細準備步驟可參考華為開發者聯盟官網:
配置AppGallery Connect-開發準備-Android-3D建模服務 (huawei.com)
2 編輯工程集成
在開始API開發工作之前,您需要先3.3.1 配置AppGallery Connect,同時請確保您的工程中已經配置HMS Core SDK的Maven倉地址,並且完成了本服務的3.3.2 集成HMS Core SDK。
2.1創建動作捕捉引擎。
// 自定義參數配置。
Modeling3dMotionCaptureEngineSetting setting = new Modeling3dMotionCaptureEngineSetting.Factory()
// 設置檢測模式。
// Modeling3dMotionCaptureEngineSetting.TYPE_3DSKELETON_QUATERNION:輸出人體姿態對應的骨骼點四元數。
// Modeling3dMotionCaptureEngineSetting.TYPE_3DSKELETON:輸出人體姿態對應的骨骼點坐標。
.setAnalyzeType(Modeling3dMotionCaptureEngineSetting.TYPE_3DSKELETON_QUATERNION
| Modeling3dMotionCaptureEngineSetting.TYPE_3DSKELETON)
.create();
Modeling3dMotionCaptureEngine engine = Modeling3dMotionCaptureEngineFactory.getInstance().getMotionCaptureEngine(setting);
Modeling3dFrame封裝了源自相機的影片幀或靜態圖片數據,以及相關的數據處理邏輯。
您可以自行處理影片流,將影片幀轉換為Modeling3dFrame對象,用於檢測影片幀,支援NV21格式。
通過android.graphics.Bitmap創建Modeling3dFrame對象,用於動作捕捉引擎檢測圖片,支援的圖片格式包括:JPG/JPEG/PNG。
// 通過bitmap創建Modeling3dFrame。
Modeling3dFrame frame = Modeling3dFrame.fromBitmap(bitmap);
// 通過影片幀創建Modeling3dFrame。
Modeling3dFrame.Property property = new Modeling3dFrame.Property.Creator().setFormatType(ImageFormat.NV21)
// 設置影片幀寬度。
.setWidth(width)
// 設置影片幀高度。
.setHeight(height)
// 設置影片幀旋轉角度。
.setQuadrant(quadant)
// 設置影片幀序號。
.setItemIdentity(framIndex)
.create();
Modeling3dFrame frame = Modeling3dFrame.fromByteBuffer(byteBuffer, property);
2.2調用同步或非同步方法進行動作捕捉檢測。
asyncAnalyseFrame非同步方法示例程式碼:
Task<List<Modeling3dMotionCaptureSkeleton>> task = engine.asyncAnalyseFrame(frame);
task.addOnSuccessListener(new OnSuccessListener<List<Modeling3dMotionCaptureSkeleton>>() {
@Override
public void onSuccess(List<Modeling3dMotionCaptureSkeleton> results) {
// 檢測成功。
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
// 檢測失敗。
}
});
analyseFrame同步方法示例程式碼:
SparseArray<Modeling3dMotionCaptureSkeleton> sparseArray = engine.analyseFrame(frame);
for (int i = 0; i < sparseArray.size(); i++) {
// 檢測結果處理。
};
2.3檢測完成,停止引擎,釋放檢測資源。
try {
if (engine != null) {
engine.stop();
}
} catch (IOException e) {
// 異常處理。
}
Demo演示
集成開發過程中,您有任何問題都可以在線提單,將有專人為您解答。
了解更多詳情>>
訪問華為開發者聯盟官網
獲取開發指導文檔
華為移動服務開源倉庫地址:GitHub、Gitee
關注我們,第一時間了解 HMS Core 最新技術資訊~