有趣的靜態模型動態化是如何實現的?
華為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建立動作捕捉引擎。
1 2 3 4 5 6 7 8 9 | / / 自定義引數配置。
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。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | / / 透過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非同步方法示例程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 | 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同步方法示例程式碼:
1 2 3 4 | SparseArray<Modeling3dMotionCaptureSkeleton> sparseArray = engine.analyseFrame(frame);
for ( int i = 0 ; i < sparseArray.size(); i + + ) {
/ / 檢測結果處理。
};
|
2.3檢測完成,停止引擎,釋放檢測資源。
1 2 3 4 5 6 7 | try {
if (engine ! = null) {
engine.stop();
}
} catch (IOException e) {
/ / 異常處理。
}
|
Demo演示
整合開發過程中,您有任何問題都可以線上提單,將有專人為您解答。
瞭解更多詳情>>
訪問華為開發者聯盟官網
獲取開發指導文件
華為移動服務開源倉庫地址:GitHub、Gitee
關注我們,第一時間瞭解 HMS Core 最新技術資訊~