靜態模型一鍵動態化,教你如何整合動作捕捉能力

HMS Core發表於2022-03-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建立動作捕捉引擎。
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演示

 

 

整合開發過程中,您有任何問題都可以線上提單,將有專人為您解答。

 

瞭解更多詳情>>

 

訪問華為開發者聯盟官網
獲取開發指導文件
華為移動服務開源倉庫地址:GitHubGitee

 

關注我們,第一時間瞭解 HMS Core 最新技術資訊~

相關文章