XMagic.h
,用于初始化 SDK、更新美颜数值、调用动效等功能。API | 描述 |
version | SDK当前版本名称 |
API | 描述 |
初始化接口 | |
初始化接口 | |
配置美颜各种效果(3.5.0.2新增) | |
导出当前形象的图片。通过接口 process 和process:withOrigin:withOrientation: 处理美颜以后,可以使用该接口获取当前形象的图片 | |
设置后处理模糊强度(作用于所有模糊组件) | |
设置 renderSize | |
资源释放接口 | |
图像数据处理接口,输入美颜前的图像,返回美颜后的图像。 | |
图像数据处理接口,输入美颜前的图像,返回美颜后的图像,比上接口多两个参数。 | |
处理图片 | |
获取美颜参数配置信息 | |
日志注册接口 | |
SDK 事件监听接口 | |
注册回调清理接口 | |
获取当前 GL 上下文接口 | |
SDK 暂停接口 | |
SDK 恢复接口 | |
动效素材使用时是否开启静音(V2.5.0新增)
参数:YES表示静音,NO表示非静音 | |
设置某个特性的开启或关闭 | |
如果想要某个动效/美妆/分割素材叠加在当前素材上,则设置该素材时,在 withExtraInfo 的字典中设置 mergeWithCurrentMotion 为 true | |
EffectMode(高性能模式) |
API | 描述 |
配置美颜各种效果。废弃,建议使用 setEffect。 | |
获取美颜参数授权信息 |
typedef NS_ENUM(NSInteger, DeviceLevel) {DEVICE_LEVEL_VERY_LOW = 1,DEVICE_LEVEL_LOW = 2,DEVICE_LEVEL_MIDDLE = 3,DEVICE_LEVEL_MIDDLE_HIGH = 4,DEVICE_LEVEL_HIGH = 5};+ (DeviceLevel)getDeviceLevel;
- (instancetype _Nonnull)initWithRenderSize:(CGSize)renderSizeassetsDict:(NSDictionary* _Nullable)assetsDict;
参数 | 含义 |
renderSize | 渲染尺寸 |
assetsDict | 资源 Dict |
- (instancetype _Nonnull)initWithGlTexture:(unsigned)textureIDwidth:(int)widthheight:(int)heightflipY:(bool)flipYassetsDict:(NSDictionary* _Nullable)assetsDict;
参数 | 含义 |
textureID | 纹理 ID |
width | 渲染尺寸 |
height | 渲染尺寸 |
flipY | 是否翻转图片 |
assetsDict | 资源 Dict |
- (void)setEffect:(NSString * _Nullable)effectNameeffectValue:(int)effectValueresourcePath:(NSString * _Nullable)resourcePathextraInfo:(NSDictionary * _Nullable)extraInfo;
参数 | 含义 |
effectName | 效果类型 |
effectValue | 效果数值 |
resourcePath | 素材路径 |
extraInfo | 预留扩展, 附加额外配置 |
- (void)emitBlurStrengthEvent:(int)strength;
参数 | 含义 |
strength | 效果数值 |
- (void)setRenderSize:(CGSize)size;
参数 | 含义 |
size | 渲染尺寸 |
- (void)deinit;
YTImagePixelData、YTTextureData、YTImageRawData、YTUIImageData
,输出对应的数据格式。其中YTImagePixelData
中的像素格式为RGBA,YTTextureData
中的纹理格式为OpenGL 2D
。/// @brief 处理输入4选1 Process input 4 choose 1@interface YTProcessInput : NSObject/// 相机数据对象 camera data object@property (nonatomic, strong) YTImagePixelData * _Nullable pixelData;/// 纹理对象 texture object@property (nonatomic, strong) YTTextureData * _Nullable textureData;/// 原始数据对象 raw data object@property (nonatomic, strong) YTImageRawData * _Nullable rawData;/// UIImage对象 UIImage object@property (nonatomic, strong) YTUIImageData * _Nullable UIImageData;/// 输入数据类型 input data type@property (nonatomic) enum YTProcessDataType dataType;@end/// @brief 处理输出 process output@interface YTProcessOutput : NSObject/// 纹理输出对象(一定会有) Texture output object (always output)@property (nonatomic, strong) YTTextureData * _Nullable textureData;/// 相机输出对象(如果输入是相机采集数据) Camera output object (if the input is camera acquisition data)@property (nonatomic, strong) YTImagePixelData * _Nullable pixelData;/// 原始输出对象(如果输入是原始数据) raw output object (if input is raw data)@property (nonatomic, strong) YTImageRawData * _Nullable rawData;/// UIImage输出对象(如果输入是UIImage对象) UIImage output object (if the input is a UIImage object)@property (nonatomic, strong) YTUIImageData * _Nullable UIImageData;/// 输出数据类型 output data type@property (nonatomic) enum YTProcessDataType dataType;@end- (YTProcessOutput* _Nonnull)process:(YTProcessInput * _Nonnull)input;
参数 | 含义 |
input | 输入处理数据信息,输入的格式四选一(YTImagePixelData、YTTextureData、YTImageRawData、YTUIImageData) |
类型 | 含义 |
YTImagePixelData | 相机数据对象,像素格式为 RGBA |
YTTextureData | 纹理对象,纹理格式为 OpenGL 2D |
YTImageRawData | 原始数据对象 |
YTUIImageData | UIImage 对象 |
- (YTProcessOutput* _Nonnull)process:(YTProcessInput* _Nonnull)input withOrigin:(YtLightImageOrigin)origin withOrientation:(YtLightDeviceCameraOrientation)orientation;
参数 | 含义 |
input | 输入处理数据信息 |
withOrigin | 枚举值(YtLightImageOriginTopLeft、YtLightImageOriginBottomLeft),设置成YtLightImageOriginBottomLeft 时,图像上下镜像翻转 |
withOrientation | 枚举值:图像旋转角度,设置角度会修改输出的图像角度 |
process
和process:withOrigin:withOrientation:
处理美颜以后,可以使用该接口获取当前形象的图片。/// @brief 导出当前形象的图片 Export a picture of the current image- (void)exportCurrentTexture:(nullable void (^)(UIImage *_Nullable image))callback;
/// @param context 如果使用本类OpenGL接口,建议使用本方法初始化,可传[xMgiac getCurrentGlContext]- (instancetype)initWithEAGLContext:(EAGLContext *)context;
参数 | 含义 |
context | 使用OpenGLES的上下文环境,可传[xMagic getCurrentGlContext] |
/// @brief CVPixelBufferRef yuv/rgb相互转换接口,目前只支持TEPixelFormatType内的三种类型转换 CVPixelBufferRef yuv/rgb transfor interface/// @param pixelBuffer 输入pixelBuffer input pixelBuffer/// @param outputFormat 指定输出pixelBuffer的类型 out pixelBuffer format- (CVPixelBufferRef)transformCVPixelBufferToBuffer:(CVPixelBufferRef)pixelBuffer outputFormat:(TEPixelFormatType)outputFormat;
参数 | 含义 |
pixelBuffer | 输入的 pixelBuffer 数据 |
outputFormat | 输出的 pixelBuffer 格式,支持 BGRA、NV12F(kCVPixelFormatType_420YpCbCr8BiPlanarFullRange)、NV12V(kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange) |
/// 将yuv/rgb pixelBuffer转换为bgra格式的纹理id/// @param pixelBuffer 输入pixelBuffer- (GLuint)transformPixelBufferToBGRATexture:(CVPixelBufferRef)pixelBuffer;
参数 | 含义 |
pixelBuffer | 输入的 pixelBuffer 数据,支持 BGRA、NV12F(kCVPixelFormatType_420YpCbCr8BiPlanarFullRange)、NV12V(kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange) |
/// 对CVPixelBufferRef进行旋转和镜像翻转, 如果同时传旋转和镜像,处理逻辑为先镜像再旋转- (CVPixelBufferRef)convertCVPixelBuffer:(CVPixelBufferRef)pixelBuffer rotaion:(YtLightDeviceCameraOrientation)rotation flip:(TEFlipType)flipType;
参数 | 含义 |
pixelBuffer | 输入的 pixelBuffer 数据 |
rotation | 逆时针旋转角度,支持0度、90度、180度、270度。 |
flipType | 镜像类型,水平镜像或者垂直镜像。如果同时传旋转和镜像,处理逻辑为先镜像再旋转 |
/// 对纹理Id进行旋转/镜像翻转,如果同时传旋转和镜像,处理逻辑为先镜像再旋转- (GLuint)convert:(GLuint)srcId width:(int)width height:(int)height rotaion:(YtLightDeviceCameraOrientation)rotation flip:(TEFlipType)flipType;
参数 | 含义 |
srcId | 输入的纹理 ID |
width | 纹理的宽度 |
height | 纹理的高度 |
rotation | 逆时针旋转角度,支持0度、90度、180度、270度。 |
flipType | 镜像类型,水平镜像或者垂直镜像。如果同时传旋转和镜像,处理逻辑为先镜像再旋转 |
- (UIImage* _Nullable)processUIImage:(UIImage* _Nonnull)inputImage needReset:(bool)needReset;
参数 | 含义 |
inputImage | 输入图片建议最大尺寸 2160×4096。超过这个尺寸的图片人脸识别效果不佳或无法识别到人脸,同时容易引起 OOM 问题,建议把大图缩小后再传入 |
needReset | 以下场景中 needReset 需设置 为 true: 切换图片 首次使用分割 首次使用动效 首次使用美妆 |
- (YTBeautyPropertyInfo * _Nullable)getConfigPropertyWithName:(NSString *_Nonnull)propertyName;
参数 | 含义 |
propertyName | 配置名称 |
- (void)registerLoggerListener:(id<YTSDKLogListener> _Nullable)listener withDefaultLevel:(YtSDKLoggerLevel)level;
参数 | 含义 |
listener | 日志回调接口 |
level | 日志输出 level,默认 ERROR |
- (void)registerSDKEventListener:(id<YTSDKEventListener> _Nullable)listener;
参数 | 含义 |
listener | 事件监听器回调,主要分为 AI 事件,Tips 提示事件,Asset 事件 |
- (void)clearListeners;
- (nullable EAGLContext*)getCurrentGlContext;
/// @brief APP暂停时候需要调用SDK暂停接口- (void)onPause;
/// @brief APP恢复时候需要调用SDK恢复接口- (void)onResume;
/// @brief 设置静音- (void)setAudioMute:(BOOL)isMute;
/// @brief 设置某个特性的开或关 Set a feature on or off/// @param featureName 取值见TEDefine FeatureName/// @param enable 开或关 on or off- (void)setFeatureEnableDisable:(NSString *_Nonnull)featureName enable:(BOOL)enable;
/// @brief 开启美颜增强模式- (void)enableEnhancedMode;
美颜项名称 | 增强模式下,建议的最大值(放大倍数) |
美白,短脸,V脸,眼距,鼻子位置,祛法令纹,口红,立体 | 1.3 |
亮眼 | 1.5 |
腮红 | 1.8 |
其他 | 1.2 |
| |
| |
| |
NSDictionary *assetsDict = @{@"core_name":@"LightCore.bundle",@"root_path":[[NSBundle mainBundle] bundlePath],@"setDowngradePerformance":@(YES) //开启高性能模式};self.beautyKit = [[XMagic alloc] initWithRenderSize:previewSize assetsDict:assetsDict];
API | 描述 |
SDK 内部事件回调接口 | |
日志监听回调 |
@protocol YTSDKEventListener <NSObject>
返回类型 | 名称 |
void | |
void | |
void |
/// @param event dict格式的回调- (void)onAIEvent:(id _Nonnull)event;
{"face_info":[{"trace_id":5,"face_256_point":[180.0,112.2,...],"face_256_visible":[0.85,...],"out_of_screen":true,"left_eye_high_vis_ratio":1.0,"right_eye_high_vis_ratio":1.0,"left_eyebrow_high_vis_ratio":1.0,"right_eyebrow_high_vis_ratio":1.0,"mouth_high_vis_ratio":1.0},...]}
字段 | 类型 | 值域 | 说明 |
trace_id | int | [1,INF) | 人脸 ID,连续取流过程中,ID 相同的可以认为是同一张人脸 |
face_256_point | float | [0,screenWidth] 或 [0,screenHeight] | 共512个数,人脸256个关键点,屏幕左上角为(0,0) |
face_256_visible | float | [0,1] | 人脸256关键点可见度 |
out_of_screen | bool | true/false | 人脸是否出框 |
left_eye_high_vis_ratio | float | [0,1] | 左眼高可见度点位占比 |
right_eye_high_vis_ratio | float | [0,1] | 右眼高可见度点位占比 |
left_eyebrow_high_vis_ratio | float | [0,1] | 左眉高可见度点位占比 |
right_eyebrow_high_vis_ratio | float | [0,1] | 右眉高可见度点位占比 |
mouth_high_vis_ratio | float | [0,1] | 嘴高可见度点位占比 |
/// @param event dict格式的回调- (void)onTipsEvent:(id _Nonnull)event;
/// @param event string格式的回调- (void)onAssetEvent:(id _Nonnull)event;
@protocol YTSDKLogListener <NSObject>
返回类型 | 函数名称 |
void | onLog |
/// @param loggerLevel 返回当前日志等级/// @param logInfo 返回当前日志信息- (void)onLog:(YtSDKLoggerLevel) loggerLevel withInfo:(NSString * _Nonnull) logInfo;
NSString *key = _xmagicUIProperty.property.Id;NSString *value = [[NSBundle mainBundle] pathForResource:@"makeupMotionRes" ofType:@"bundle"];NSDictionary* extraInfo = @{@"mergeWithCurrentMotion":@(true)};[self.beautyKitRef configPropertyWithType:@"motion" withName:key withData:[NSString stringWithFormat:@"%@",value] withExtraInfo:extraInfo];
- (int)configPropertyWithType:(NSString *_Nonnull)propertyType withName:(NSString *_Nonnull)propertyName withData:(NSString*_Nonnull)propertyValue withExtraInfo:(id _Nullable)extraInfo;
参数 | 含义 |
propertyType | 效果类型 |
propertyName | 效果名称 |
propertyValue | 效果数值 |
extraInfo | 预留扩展, 附加额外配置 Dict |
NSString *propertyType = @"beauty"; //配置美颜的效果类型,这里以美颜为例NSString *propertyName = @"beauty.whiten"; //配置美颜的名称,这里以美白为例NSString *propertyValue = @"60"; //配置美白的效果数值[self.xmagicApi configPropertyWithType:propertyType withName:propertyName withData:propertyValue withExtraInfo:nil];
NSString *propertyType = @"lut"; //配置美颜的效果类型,这里以滤镜为例NSString *propertyName = [@"lut.bundle/" stringByAppendingPathComponent:@"xindong_lf.png"]; //配置美颜的名称,这里以心动为例NSString *propertyValue = @"60"; //配置滤镜的效果数值[self.xmagicApi configPropertyWithType:propertyType withName:propertyName withData:propertyValue withExtraInfo:nil];
NSString *propertyType = @"body"; //配置美颜的效果类型,这里以美体为例NSString *propertyName = @"body.legStretch"; //配置美颜的名称,这里以长腿为例NSString *propertyValue = @"60"; //配置长腿的效果数值[self.xmagicApi configPropertyWithType:propertyType withName:propertyName withData:propertyValue withExtraInfo:nil];
NSString *motion2dResPath = [[NSBundle mainBundle] pathForResource:@"2dMotionRes" ofType:@"bundle"];//这里是2dMotionRes文件夹的绝对路径NSString *propertyType = @"motion"; //配置美颜的效果类型,这里以动效为例NSString *propertyName = @"video_keaituya"; //配置美颜的名称,这里以2D动效的可爱涂鸦为例NSString *propertyValue = motion2dResPath; //配置动效的路径[self.xmagicApi configPropertyWithType:propertyType withName:propertyName withData:propertyValue withExtraInfo:nil];
NSString *motionMakeupResPath = [[NSBundle mainBundle] pathForResource:@"makeupMotionRes" ofType:@"bundle"];//这里是makeupMotionRes文件夹的绝对路径NSString *propertyType = @"motion"; //配置美颜的效果类型,这里以美妆为例NSString *propertyName = @"video_nvtuanzhuang"; //配置美颜的名称,这里以女团妆为例NSString *propertyValue = motionMakeupResPath; //配置动效的路径[self.xmagicApi configPropertyWithType:propertyType withName:propertyName withData:propertyValue withExtraInfo:nil];//下面是要配置美妆的数值(上面的动效只需要调用一次,下面的配置美妆数值可以多次调用)NSString *propertyTypeMakeup = @"custom"; //配置美颜的效果类型,这里以美妆为例NSString *propertyNameMakeup = @"makeup.strength"; //配置美颜的名称,这里以女团妆为例NSString *propertyValueMakeup = @"60"; //配置美妆的效果数值[self.xmagicApi configPropertyWithType:propertyTypeMakeup withName:propertyNameMakeup withData:propertyValueMakeup withExtraInfo:nil];
NSString *motionSegResPath = [[NSBundle mainBundle] pathForResource:@"segmentMotionRes" ofType:@"bundle"];//这里是segmentMotionRes文件夹的绝对路径NSString *propertyType = @"motion"; //配置美颜的效果类型,这里以分割为例NSString *propertyName = @"video_segmentation_blur_75"; //配置美颜的名称,这里以背景模糊-强为例NSString *propertyValue = motionSegResPath; //配置动效的路径NSDictionary *dic = @{@"bgName":@"BgSegmentation.bg.png", @"bgType":@0, @"timeOffset": @0},@"icon":@"segmentation.linjian.png"};//配置预留字段[self.xmagicApi configPropertyWithType:propertyType withName:propertyName withData:propertyValue withExtraInfo:dic];
NSString *motionSegResPath = [[NSBundle mainBundle] pathForResource:@"segmentMotionRes" ofType:@"bundle"];//这里是segmentMotionRes文件夹的绝对路径NSString *propertyType = @"motion"; //配置美颜的效果类型,这里以分割为例NSString *propertyName = @"video_empty_segmentation"; //配置美颜的名称,这里以自定义背景为例NSString *propertyValue = motionSegResPath; //配置动效的路径NSString *imagePath = @"/var/mobile/Containers/Data/Application/06B00BBC-9060-450F-8D3A-F6028D185682/Documents/MediaFile/image.png"; //自定义背景图片的绝对路径。如果自定义背景选择的是视频,需要对视频进行压缩转码处理,使用压缩转码处理后的绝对路径int bgType = 0;//自定义背景的类型。 0表示图片,1表示视频int timeOffset = 0;//时长。图片背景时,为0;视频背景时为视频的时长NSDictionary *dic = @{@"bgName":imagePath, @"bgType":@(bgType), @"timeOffset": @(timeOffset)},@"icon":@"segmentation.linjian.png"};//配置预留字段[self.xmagicApi configPropertyWithType:propertyType withName:propertyName withData:propertyValue withExtraInfo:dic];
NSDictionary *assetsDict = @{@"core_name":@"LightCore.bundle",@"root_path":[[NSBundle mainBundle] bundlePath],@"setDowngradePerformance":@(YES) //开启高性能模式};self.beautyKit = [[XMagic alloc] initWithRenderSize:previewSize assetsDict:assetsDict];
/// @brief 开启美颜增强模式- (void)enableEnhancedMode;
美颜项名称 | 增强模式下,建议的最大值(放大倍数) |
美白,短脸,V脸,眼距,鼻子位置,祛法令纹,口红,立体 | 1.3 |
亮眼 | 1.5 |
腮红 | 1.8 |
其他 | 1.2 |
| |
| |
| |
/// @param featureId 配置美颜参数/// @return 返回对应美颜参数的授权结果+ (BOOL)isBeautyAuthorized:(NSString * _Nullable)featureId;
本页内容是否解决了您的问题?