HUAWEI ML Kit에서 얼굴 스티커를 앱에 통합하는 방법
개요
이제는 귀엽고 재미있는 얼굴 스티커를 어디에서나 볼 수 있습니다. 카메라 앱뿐만 아니라 소셜 미디어 및 엔터테인먼트 앱에도 사용됩니다. 이 게시물에서는 HUAWEI ML Kit를 사용하여 2D 스티커를 만드는 방법을 소개합니다. 조만간 3D 스티커 개발 프로세스를 알려드리겠습니다.
시나리오
뷰티 카메라 및 소셜 미디어 앱(TikTok, Weibo, WeChat 등)과 같은 사진을 촬영하고 편집할 때 사용하는 앱은 이미지를 사용자 지정하는 데 사용할 수 있는 다양한 스티커를 제공합니다. 이러한 스티커를 사용하면 사용자가 눈길을 끄고 공유할 수 있는 콘텐츠를 만들 수 있습니다.
준비
Huawei Maven 리포지토리를 프로젝트 수준 build.gradle 파일에 추가
Android Studio 프로젝트의 루트 디렉토리에 있는 build.gradle 파일을 엽니다.
Maven 리포지토리 주소를 추가합니다.
buildscript {
{
maven {url 'http://developer.huawei.com/repo/'}
}
}
allprojects {
repositories {
maven { url 'http://developer.huawei.com/repo/'}
}
}
SDK 종속성을 앱 수준 build.gradle 파일에 추가
// Face detection SDK.
implementation 'com.huawei.hms:ml-computer-vision-face:2.0.1.300'
// Face detection model.
implementation 'com.huawei.hms:ml-computer-vision-face-shape-point-model:2.0.1.300'
AndroidManifest.xml 파일에서 카메라, 네트워크 액세스 및 스토리지 권한 적용
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
코드 개발
얼굴 분석 기능 설정
얼굴 윤곽 포인트를 얻고 FacePointEngine에 전달
MLFaceAnalyzerSetting detectorOptions;
detectorOptions = new MLFaceAnalyzerSetting.Factory()
.setFeatureType(MLFaceAnalyzerSetting.TYPE_UNSUPPORT_FEATURES)
.setShapeType(MLFaceAnalyzerSetting.TYPE_SHAPES)
.allowTracing(MLFaceAnalyzerSetting.MODE_TRACING_FAST)
.create();
detector = MLAnalyzerFactory.getInstance().getFaceAnalyzer(detectorOptions);
카메라 콜백을 사용하여 카메라의 프레임 데이터를 가져오고 얼굴 분석 기능을 호출하여 얼굴 윤곽 포인트를 가져오고 FacePointEngine에 전달합니다. 이렇게하면 스티커 필터가 포인트를 나중에 사용할 수 있습니다.
@Override
public void onPreviewFrame(final byte[] imgData, final Camera camera) {
int width = mPreviewWidth;
int height = mPreviewHeight;
long startTime = System.currentTimeMillis();
if (isFrontCamera()){
mOrientation = 0;
}else {
mOrientation = 2;
}
MLFrame.Property property =
new MLFrame.Property.Creator()
.setFormatType(ImageFormat.NV21)
.setWidth(width)
.setHeight(height)
.setQuadrant(mOrientation)
.create();
ByteBuffer data = ByteBuffer.wrap(imgData);
SparseArray<MLFace> faces = detector.analyseFrame(MLFrame.fromByteBuffer(data,property));
if(faces.size()>0){
MLFace mLFace = faces.get(0);
EGLFace EGLFace = FacePointEngine.getInstance().getOneFace(0);
EGLFace.pitch = mLFace.getRotationAngleX();
EGLFace.yaw = mLFace.getRotationAngleY();
EGLFace.roll = mLFace.getRotationAngleZ() - 90;
if (isFrontCamera())
EGLFace.roll = -EGLFace.roll;
if (EGLFace.vertexPoints == null) {
EGLFace.vertexPoints = new PointF[131];
}
int index = 0;
for (MLFaceShape contour : mLFace.getFaceShapeList()) {
if (contour == null) {
continue;
}
List<MLPosition> points = contour.getPoints();
for (int i = 0; i < points.size(); i++) {
MLPosition point = points.get(i);
float x = ( point.getY() / height) * 2 - 1;
float y = ( point.getX() / width ) * 2 - 1;
if (isFrontCamera())
x = -x;
PointF Point = new PointF(x,y);
EGLFace.vertexPoints[index] = Point;
index++;
}
}
FacePointEngine.getInstance().putOneFace(0, EGLFace);
FacePointEngine.getInstance().setFaceSize(faces!= null ? faces.size() : 0);
}else{
FacePointEngine.getInstance().clearAll();
}
long endTime = System.currentTimeMillis();
Log.d("TAG","Face detect time: " + String.valueOf(endTime - startTime));
}
ML Kit API가 반환하는 얼굴의 윤곽 포인트는 아래 이미지에서 확인할 수 있습니다.
스티커의 JSON 데이터 정의
고양이 스티커 만들기
고양이 스티커의 JSON 파일을 만들고 얼굴 색인을 사용하여 눈썹 (84) 사이의 중심점과 코 (85)의 팁 점을 찾습니다. 고양이의 귀와 코를 붙여넣고 JSON 파일과 이미지를 assets 디렉토리에 넣습니다.
스티커를 렌더링하여 질감을 제공합니다.
GLSurfaceView를 사용하여 스티커를 렌더링하여 질감을 제공합니다. 이것은 TextureView를 사용하는 것보다 쉽습니다. onSurfaceChanged에서 스티커 필터의 인스턴스를 만들고 스티커 경로를 전달하여 카메라를 시작합니다.
onSurfaceChanged로 스티커 필터 초기화
onDrawFrame으로 화면에 스티커 그리기
이상으로 끝입니다. 만든 페이스 스티커를 사용할 수 있습니다.
조속히 사용해 봅시다.
자세한 내용은 당사 공식 웹사이트를 참조하십시오.
우리의 데모 코드도 참조하십시오.
Reference
이 문제에 관하여(HUAWEI ML Kit에서 얼굴 스티커를 앱에 통합하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/lxp123/items/010ff6ffb6bcf71dd397텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)