海报换脸是将对模板图和输入图中的人脸进行人脸融合操作,并返回融合后的模板图片的一种技术。
模板图片中如果有阴阳脸的情况会影响最终效果,建议选择肤色均匀的模板图片。如果模板肤色不均匀可以使用ps进行处理。
现在对于夸张表情和大角度的模板和输入图支持不太好,建议使用正常表情的正脸图。
Module | 类名 | 说明 |
core | FUPosterKit | 绿幕抠像功能业务模型 |
core | OnPosterRenderCallback | 海报换脸业务回调 |
单例模式
fun getInstance(handleData: FUBundleData, callback: OnPosterRenderCallback): FUPosterKit
handleData:通过海报换脸Bundle文件构造的文件数据模型 callback:回调监听
FUPosterKit mFUPosterKit = FUPosterKit.getInstance(new FUBundleData(DemoConfig.BUNDLE_POSTER_CHANGE_FACE), mOnPosterRenderCallback);
fun bindSurfaceSize(width: Int, height: Int)
width:窗口宽 height:窗口高
mFUPosterKit.bindSurfaceSize(width, height);
在GLSurfaceView绑定Renderer的onSurfaceChanged回调函数调用
fun renderPoster(photoBitmap: Bitmap, photoTexId: Int, templatePath: String, intensity: Double)
photoBitmap:照片Bitmap photoTexId:照片纹理id templatePath:海报路径 intensity:嘴巴变形强度 范围[0.0-1.0]
fun renderPoster(photoPath: String, templatePath: String, intensity: Double)
photoPath:照片路径 templatePath:海报路径 intensity:嘴巴变形强度 范围[0.0-1.0]
fun bindPhotoData(index: Int)
index:OnPosterRenderCallback 回调返回下标
fun updateTemplate(templatePath: String, intensity: Double)
templatePath:海报路径 intensity:嘴巴变形强度 范围[0.0-1.0]
interface OnPosterRenderCallback {
/**
* 图片加载完成回调
* @param trackFace Int -1:人脸偏转角度过大 0未检测到人脸 >1 多人脸
* @param array ArrayList<FloatArray>? 多人脸点位信息
*/
fun onPhotoLoaded(trackFace: Int, array: ArrayList<FloatArray>? = null)
/**
* 蒙版加载完成
*
* @param trackFace Int -1:未检测到人脸
*/
fun onTemplateLoaded(trackFace: Int)
/**
* 照片合成结果状态返回
* @param isSuccess Boolean
* @param texId 合成对应的纹理id
*/
fun onMergeResult(isSuccess: Boolean, texId: Int)
}