모션 캡처를 사용하여 모델 애니메이션

5012 단어 deeplearning
당신이 만든 모델을 움직이게 하는 것은 매우 보람된 일입니다. 이 작업을 수행하는 쉬운 방법만 있다면… 음, 실제로 있습니다!

나는 오랫동안 이런 종류의 해결책을 찾았고, 짜잔! HMS Core 3D 모델링 키트의 기능인 모션 캡처를 손에 넣었습니다. 이 기능에는 인체 감지, 모델 가속 및 모델 압축과 같은 기술과 딥 러닝 관점의 단안 인간 자세 추정 알고리즘이 함께 제공됩니다.

결정적으로 이 기능에는 고급 장치가 필요하지 않습니다. RGB 카메라가 장착된 휴대폰이면 충분합니다. 카메라는 신체의 24개 주요 골격 지점에서 3D 데이터를 캡처하며, 이 기능은 모델을 매끄럽게 애니메이션하는 데 사용합니다.

모션 캡처 기능을 훨씬 더 좋게 만드는 것은 간단한 통합 프로세스입니다. 여러분과 공유하고 싶습니다.

애플리케이션 시나리오



모션 캡처는 다른 유사한 분야 중에서 게임, 영화 및 TV, 의료용 3D 콘텐츠 제작에 이상적입니다. 몇 가지 예를 들자면 캐릭터를 애니메이션하고 사용자 생성 콘텐츠(UGC) 게임을 위한 비디오를 만들고 가상 스트리머를 실시간으로 애니메이션하고 부상 재활을 제공하는 데 사용할 수 있습니다.

통합 프로세스



준비



필요한 모든 준비를 완료하려면 official instructions을 참조하십시오.

프로젝트 구성



앱을 개발하기 전에 몇 가지 추가 작업을 수행해야 합니다. AppGallery Connect에서 앱 정보를 구성합니다. 3D 모델링 SDK의 Maven 리포지토리 주소가 프로젝트에 구성되었고 SDK가 통합되었는지 확인하십시오.
1. 모션 캡처 엔진 만들기

// Set necessary parameters as needed.  
Modeling3dMotionCaptureEngineSetting setting = new Modeling3dMotionCaptureEngineSetting.Factory() 
    // Set the detection mode.  
    // Modeling3dMotionCaptureEngineSetting.TYPE_3DSKELETON_QUATERNION: skeleton point quaternions of a human pose.  
    // Modeling3dMotionCaptureEngineSetting.TYPE_3DSKELETON: skeleton point coordinates of a human pose.  
.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일 수 있습니다.

// Create a Modeling3dFrame object using a bitmap.  
Modeling3dFrame frame = Modeling3dFrame.fromBitmap(bitmap); 
// Create a Modeling3dFrame object using a video frame.  
Modeling3dFrame.Property property = new Modeling3dFrame.Property.Creator().setFormatType(ImageFormat.NV21) 
    // Set the frame width.  
    .setWidth(width) 
    // Set the frame height.  
    .setHeight(height) 
    // Set the video frame rotation angle.  
    .setQuadrant(quadant) 
    // Set the video frame number.  
    .setItemIdentity(framIndex) 
    .create(); 
Modeling3dFrame frame = Modeling3dFrame.fromByteBuffer(byteBuffer, property);


2.모션 감지를 위한 비동기 또는 동기 API 호출
비동기 API asyncAnalyseFrame을 호출하기 위한 샘플 코드

Task<List<Modeling3dMotionCaptureSkeleton>> task = engine.asyncAnalyseFrame(frame); 
task.addOnSuccessListener(new OnSuccessListener<List<Modeling3dMotionCaptureSkeleton>>() { 
    @Override 
    public void onSuccess(List<Modeling3dMotionCaptureSkeleton> results) { 
        // Detection success.  
    } 
}).addOnFailureListener(new OnFailureListener() { 
    @Override 
    public void onFailure(Exception e) { 
        // Detection failure.  
    } 
});


동기 API 분석 프레임을 호출하기 위한 샘플 코드

SparseArray<Modeling3dMotionCaptureSkeleton> sparseArray = engine.analyseFrame(frame); 
for (int i = 0; i < sparseArray.size(); i++) { 
    // Process the detection result.  
};


3. 감지가 완료되면 모션 캡처 엔진을 중지하여 감지 리소스를 해제합니다.

try { 
    if (engine != null) { 
        engine.stop(); 
    } 
} catch (IOException e) { 
    // Handle exceptions.  
}


결과





참조



3D 모델링 키트Official Website
3D 모델링 키트Development Guide
Reddit 다른 개발자와의 토론용
GitHub 데모 및 샘플 코드용
Stack Overflow 통합 문제에 대한 솔루션
최신 HMS Core 관련 뉴스 및 업데이트를 보려면 공식 계정을 팔로우하세요.

좋은 웹페이지 즐겨찾기