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

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建立動作捕捉引擎。
// 自定義引數配置。 
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演示

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

瞭解更多詳情>>

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

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

相關文章