MagicEngine-reuh0s1-x.x.x.x.aar
为特效引擎(人像美化)aar
包。licensing.0.0.10.aar
为鉴权aar
包tflite-2.4.1-0.0.7-jni.aar
依赖库MagicEngine.bundle
人像美化SDK内置素材,细条特效需要用到,实例化sdk时设到EngineConfig
的assetDir
将以上*.aar
放到工程libs目录下或者自行决定目录并确保aar会被引进即可。
/**
* 业务类型
*/
public enum BusinessType {
Camera, ///< 相机业务
Video, ///< 视频业务
Image ///< 图片业务
}
/**
* 引擎配置
*/
public static class EngineConfig {
public int width; ///< 渲染尺寸
public int height; ///< 渲染尺寸
public String assetDir; ///< 内置资源跟目录
public BusinessType businessType; ///< 业务类型
}
/**
* 色域类型
*/
public enum ColorSpace {
BT601VideoRange,
BT601FullRange,
BT709VideoRange,
BT709FullRange,
BT2020VideoRange,
BT2020FullRange
}
/**
* 数据类型
*/
public enum YUVDataFormat {
NV21,
NV12,
I420
}
/**
* 相机位置
*/
public enum CameraPosition {
Unknown, ///< 未定义的相机位置
Front, ///< 前置
Back ///< 后置
}
/**
* 原始YUV帧数据
*/
public static class FrameData {
public ByteBuffer data; ///< YUV像素数据
public int stride; ///< data的Y平面一行字节数
public YUVDataFormat format; ///< 像素数据格式
public CameraPosition position; ///< 相机位置(前置,后置)
public ColorSpace colorSpace; ///< 色域
public int width; ///< 宽度
public int height; ///< 高度
public int rotation; ///< 顺时针旋转这个角度后为正图,取值:0, 90, 180, 270
public float fov; ///< 相机视野角度
public boolean mirror; ///< 镜像
}
/**
* 特效类型
*/
public enum EffectType {
Beautify, ///< 美颜
Makeup, ///< 美妆
Deform, ///< 美型
Lookup, ///< 滤镜
BodySlimming ///< 美体
}
/**
* 滤镜Lut类型
*/
public enum LookupTableType {
NxN, ///< 方形NxN的Lut
Nx1 ///< 横向Nx1的Lut
}
/**
* 滤镜配置
*/
public static class LookupInfo {
public String path; ///< Lut图路径
public int dimension; ///< 维数
public float intensity; ///< 强度
public LookupTableType lutType; ///< Lut类型
}
/**
* 美妆配置
*/
public static class MakeupInfo {
public String key; ///< 资源key, 用于替换
public String resourceDir; ///< 资源路径
public float intensity; ///< 强度
}
/**
* 美颜调节类型
*/
public enum BeautyType {
Bright, ///< 美白
Soften, ///< 磨皮
WrinkleRemove, ///< 去法令纹
EyeBagRemove, ///< 去黑眼圈
Teeth, ///< 白牙
EyeBrighten, ///< 亮眼
FaceShadow, ///< 立体
Clarity, ///< 清晰
EvenSkin, ///< 匀肤
}
/**
* 美体调节
*/
public enum BodySlimmingType {
Head, ///< 头部
Neck, ///< 脖子
Waist, ///< 腰部
Hip, ///< 臀部
Leg, ///< 腿部
Shoulder, ///< 肩膀
Breast ///< 胸部
}
/**
* 传感器配置类型
*/
public enum SensorConfigType {
Reset,
Remove
}
/**
* 传感器配置
*/
public static class SensorConfig {
public float updateInterval;
public SensorConfigType configType;
}
/**
* 传感器数据
*/
public static class SensorData {
public long timestamp = 0;
public float rotation = 0;
}
人像美化SDK的使用依赖StreamlakeLicensing,请务必先初始化Licensing SDK,否则人像美化会调用失败,不生效
private void initSloManager() {
SloManager.get().init(new InitParams() {
@Override
public String getHost() {
return "https://vod.streamlakeapi.com";
}
@Override
public String getAccessKey() {
return "xxx"; // 对应申请好的AK
}
@Override
public String getSecretKey() {
return "secretKey"; //此字段为缺省字段, 目前可传任意字段
}
@Override
public String getVersion() {
return "2022-02-10"; //一般为Build日期
}
});
}
private void initSll() {
mSLLicensingManager = new SLLicensingManager(this, publicKey, prodCode,
new LicensingInitListener() {
@Override
public void onSuccess() {
Log.i(TAG, "init success");
}
@Override
public void onFailure(Throwable throwable) {
Log.i(TAG, "init failed" + throwable.getMessage());
}
});
}
人像美化SDK需要引以下的包:
import com.kwai.magicengine.MagicEngine;
import com.kwai.magicengine.MagicEngineCommon;
import com.kwai.magicengine.MagicEngineDefines;
import com.kwai.magicengine.MagicEngineSync;
人像美化 API中的参数和返回值类型以及每个属性的含义请看上面的**3.数据结构与枚举
**
人像美化SDK主要包含滤镜,美妆,美颜,美型,美体。需要单独开启和关闭并设定参数
import com.kwai.magicengine.MagicEngine;
/**
* 实例化人像美化SDK
* @param context Context实例
* @param config 引擎配置
* @return 引擎实例
*/
@Nullable
public static MagicEngineSync createSyncMagicEngine(@NonNull Context context, @NonNull MagicEngineDefines.EngineConfig config);
import com.kwai.magicengine.MagicEngineSync;
/**
* 同步渲染接口,结果写入返回值FrameData中,不要求在GL上下文中调用
* @param frameData 属于处理的裸数据
* @return 处理后的裸数据
*/
MagicEngineDefines.FrameData processWithFrameData(MagicEngineDefines.FrameData frameData);
下面这些接口主要是用来设定及调节美颜,美型,美妆,美体,滤镜等。
/**
* @brief 设置引擎回调接口
* @param listener:回调接口
*/
void setEngineListener(MagicEngine.MagicEngineListener listener);
/**
* @brief 设定模型路径
* @param pathMap: 模型key和path的map
* */
void setModelPathMap(HashMap<String, String> pathMap);
/**
* @brief 开启/关闭 单个特效
* @param effectType 需要开启的特效类型
* @param enable 开启或者关闭状态
*/
void setEffectEnabled(MagicEngineDefines.EffectType effectType, boolean enabled);
/**
* @brief 设定滤镜资源
* @param info 需要设定的拍前滤镜信息
*/
void setLookupInfo(MagicEngineDefines.LookupInfo info);
/**
* @brief 设定滤镜强度
* @param intensity 滤镜强度
*/
void setLookupIntensity(float intensity);
/**
* @brief 设定美妆资源
* @param makeupInfo 需要设定的美妆信息,每个部分都是一个MakeupInfo结构
*/
void setMakeupInfo(ArrayList<MagicEngineDefines.MakeupInfo> makeupInfo);
/**
* @brief 设定美妆强度
* @param key 需要调整的美妆key(设定美妆时用户自定义)
* @param intensity 强度
*/
void setMakeupIntensity(String key, float intensity);
/**
* @brief 设定美颜强度
* @param type 需要调节的美颜类型
* @param intensity 强度
*/
void setBeautyIntensity(MagicEngineDefines.BeautyType beautyType, float intensity);
/**
* @brief 设定美型强度
* @param mode 美型类型
* @param intensity 强度
*/
void setDeformIntensity(int mode, float intensity);
/**
* @brief 设定美体强度
* @param type 需要调整的美体类型
* @param intensity 强度
*/
void setBodySlimmingIntensity(MagicEngineDefines.BodySlimmingType type, float intensity);
/**
* 更新传感器数据
* @param sensorData 传感器数据
*/
void setSensorData(MagicEngineDefines.SensorData sensorData);
/**
* 清理内部正在处理的数据帧队列
*/
void clearFrameQueue();
/**
* @brief 销毁引擎. 调用之后此实例不可再使用. 此方法主要用于保障 MagicEngine 在合适的时机合适的线程释放资源.
*/
void destroy();
美颜美型等都需要一些AI模型的支持。模型的路径通过上面所说的setModelPathDic
方法设定。模型资源都放在了resource目录中的model.7z
中,解压之后就能看到。其中模型的key为文件夹名字,path设此文件夹的路径。例如:key为magic_ycnn_model_landmark
的路径设为/path/to/magic_ycnn_model_landmark
。
当前所有的模型为:
magic_mmu_model_animoji1
magic_mmu_model_basewhite
magic_ycnn_model_cloth_seg
magic_ycnn_model_face_attributes
magic_ycnn_model_face_seg
magic_ycnn_model_finger
magic_ycnn_model_general_handpose
magic_ycnn_model_gesture
magic_ycnn_model_hair
magic_ycnn_model_head_seg
magic_ycnn_model_humanpose
magic_ycnn_model_landmark
magic_ycnn_model_matting
magic_ycnn_model_skin_seg
magic_ycnn_model_landmark
magic_ycnn_model_landmark
magic_ycnn_model_face_attributes
magic_ycnn_model_face_seg
magic_ycnn_model_landmark
magic_ycnn_model_landmark
magic_ycnn_model_humanpose
不需要AI模型
通过setModelPathDic
可以多次设定或刚开始把模型key和对应的路径先设定,应用对应功能之前确保再该路径中下载好或者放好对应模型。原则上需要模型的功能在被调用之前把对应的key和path通过这个dictionary设进去即可。
例如:刚开始只调用美颜和美型可以设定magic_ycnn_model_landmark
,magic_ycnn_model_face_attributes
,后面调节美体可以在之前的基础上添加magic_ycnn_model_humanpose
三个一起设进去。可以一直累加,外部维护一个dictionary,或者全部一起设定,之后在确保模型存于早先设定的路径。
请注意,标注 [GL]的步骤必须在有效GLContext下执行,否则会出错。标注[CPT]的API需要在采集线程执行
1.调用鉴权API
进行授权
2.调用 createSyncMagicEngine
创建人像美化
3.调用 processWithFrameData
进行数据处理
5.调用 destroy
方法销毁引擎