相芯SDK的海报换脸功能是一种面部合成技术,允许用户将自己的脸部特征与指定的海报或图片进行合成,实现换脸的效果。该功能可以用于各种娱乐应用、社交媒体、相机应用和虚拟试妆等场景。
1. 功能介绍
逼真和自然的换脸效果:相芯SDK使用先进的人脸识别和图像合成技术,确保换脸效果的逼真和自然性。通过脸部对齐、特征融合和优化处理,海报换脸结果可以达到与原图相符合的效果,使得换脸图像看起来更加真实和无缝。
多样化的海报选择:相芯SDK通常提供了多个海报模板供用户选择,涵盖了各种不同的主题和风格,例如电影海报、明星照片、卡通角色等。这使用户可以根据自己的兴趣和需求进行个性化的换脸体验。
简单易用的界面和操作:相芯SDK通常提供了用户友好的界面和交互方式,使用户能够轻松选择海报、调整脸部位置、预览和保存换脸结果,无需复杂的技术知识。
实时和离线处理:相芯SDK可以在实时或离线环境下进行海报换脸处理。实时处理适用于实时相机应用,允许用户即时查看和分享换脸效果。离线处理适用于更复杂的图像合成需求,可以在后台进行更精细的处理和优化。
相芯SDK的海报换脸功能在市场上广泛应用于移动应用、相机应用、社交媒体平台和娱乐应用中。它为用户提供了一种有趣和创造性的方式来与图像互动,并创作个性化的换脸作品。
2.使用前必查
在项目中使用Avatar驱动特效特效之前,请确保
l 已在项目中引入Faceunity SDK,详情请参考Faceunity集成文档
l 已申请包含海报换脸权限的authpack证书文件
| SDK及证书获取方法:发送邮件至 [email protected] 进行咨询。
3.使用步骤
3.1. build.gradle配置
allprojects配置
allprojects {
repositories {
...
maven { url 'https://maven.faceunity.com/repository/maven-public/' }
...
}
}
dependencies导入依赖
dependencies {
...
implementation 'com.faceunity:core:8.6.0'
implementation 'com.faceunity:model:8.6.0'
...
}
3.2初始化FUPosterKit
加载海报换脸bundle文件
FUPosterKit mFUPosterKit = FUPosterKit.getInstance(new FUBundleData(DemoConfig.BUNDLE_POSTER_CHANGE_FACE), mOnPosterRenderCallback);
3.3构造海报换脸数据
构造海报换脸数据
String[] files = DemoApplication.mApplication.getAssets().list("change_face");
for (int i = 0; i < files.length; i++) {
String fileDir = files[i];
if (fileDir.contains("template_")) {
String[] temps = DemoApplication.mApplication.getAssets().list("change_face/" + fileDir);
String path = "";
String gridIconPath = "";
String listIconPath = "";
for (int j = 0; j < temps.length; j++) {
String temp = temps[j];
if (temp.contains("grid")) {
gridIconPath = "file:///android_asset/change_face/" + fileDir + File.separator + temp;
} else if (temp.contains("list")) {
listIconPath = "file:///android_asset/change_face/" + fileDir + File.separator + temp;
} else {
path = "change_face/" + fileDir + File.separator + temp;
}
}
double intensity = fileDir.contains("template_6.png") ? 0.2 : 0.5;
posterBeans.add(new PosterBean(path, gridIconPath, listIconPath, intensity));
}
}
3.4绑定GLSurfaceView窗口大小
在GLSurfaceView绑定Renderer的onSurfaceChanged回调函数调用
mFUPosterKit.bindSurfaceSize(width, height);
渲染调用接口,其中各参数含义
photoBitmap:照片Bitmap
photoTexId:照片纹理id
templatePath:海报路径
intensity:嘴巴变形强度 范围[0.0-1.0]
mFUPosterKit.renderPoster(mPhotoBitmap, mPhotoTextureId, mTemplate, mIntensity);
3.5FUPosterKit回调
private OnPosterRenderCallback mOnPosterRenderCallback = new OnPosterRenderCallback() {
/**
*
* @param isSuccess
* @param texId
*/
@Override
public void onMergeResult(boolean isSuccess, int texId) {
runOnUiThread(() -> {
showLoadingView(false);
if (!isSuccess) {
ToastHelper.showNormalToast(PosterPreviewActivity.this, R.string.poster_change_face_error);
}
mergedTexId = texId;
mGlSurfaceView.requestRender();
});
}
/**
*
* @param trackFace
*/
@Override
public void onTemplateLoaded(int trackFace) {
if (trackFace <= 0) {
runOnUiThread(() -> {
showLoadingView(false);
ToastHelper.showNormalToast(PosterPreviewActivity.this, R.string.poster_template_face_none);
});
}
}
/**
*
* @param posterFaceEnum
* @param array
*/
@Override
public void onPhotoLoaded(PosterFaceEnum posterFaceEnum, ArrayList<float[]> array) {
if (PosterFaceEnum.POSTER_ERROR_NO_FACE == posterFaceEnum) {
if (mDataSource == 0)
showPromptFragment(R.string.dialog_no_track_face_re_shot);
else
showPromptFragment(R.string.dialog_no_track_face_re_upload);
} else if (PosterFaceEnum.POSTER_ERROR_ROTATE_FACE == posterFaceEnum) {
if (mDataSource == 0)
showPromptFragment(R.string.dialog_face_rotation_not_valid_re_shot);
else
showPromptFragment(R.string.dialog_face_rotation_not_valid_re_upload);
} else if (PosterFaceEnum.POSTER_ERROR_INCOMPLETE_FACE == posterFaceEnum) {
4. API参考列表
Module | 类名 | 说明 |
core | FUPosterKit | 绿幕抠像功能业务模型 |
core | OnPosterRenderCallback | 海报换脸业务回调 |
5. 总结
总体而言,相芯SDK的海报换脸功能为用户提供了一种有趣和创造性的方式来与图像互动,并创作个性化的换脸作品。无论是在娱乐、社交还是品牌推广领域,该功能都具有广阔的市场应用前景。如在接入中遇到问题,可联系相芯科技进行咨询!
标签:海报,相芯,fileDir,face,换脸,SDK From: https://blog.51cto.com/u_16072036/8587533