本文为您介绍iOS端美颜特效SDK的简单使用示例。
动态下载接口调用示例
重要
Queen美颜菜单组件,现有的内置的资源下载服务,系阿里云临时搭建服务,随时可变,且可达性与有效性均不保障,仅用于官方Demo自身的功能展示,不可直接应用于业务的商业化真实场景。
若业务需要线上商业化,请务必自行修改替换为业务自有的资源下载服务器地址。阿里云不提供该资源下载地址的任何功能,也不支持客户处理。
自定义下载资源地址的方法
使用
queen_menu
菜单组件的场景。// 设置各资源的下载地址【重要,QueenMaterial是静态单例,一定要在菜单组件初始化之前就设置好,】 // 参数MaterialType有6种类型:MaterialType:MODEL(算法类型)、STICKER(贴纸)、LUT(滤镜)、MAKEUP(美妆)、BACKGROUND(抠图背景)、FACE_EFFECTS(人脸特效) // materialUrl为对应资源包下载地址,资源包需要按zip格式压缩成为zip文件,资源文件直接放一级根目录即可。系统根据解压后的文件夹,自动扫描并加载文件夹下的资源 [[QueenMaterial sharedInstance] setMaterialURL:(kQueenMaterialType)type withURL:(NSString *)materialURL]
自定义美颜菜单组件的应用场景。
// 如果下载的SDK没有内置模型,需要先下载模型,等模型下载完成才能初始化queenEngine - (void)checkModelsAndInitQueenEngine { // 设置资源管理器的代理 [QueenMaterial sharedInstance].delegate = self; // 判断是否需要下载模型 if (![[QueenMaterial sharedInstance] requestMaterial:kQueenMaterialModel]) { // 如果不需要下载模型,直接初始化引擎 [self initBeautyEngine]; } } // 下载扩展资源 - (void)downloadExtraResource { // 设置资源管理器的代理 [QueenMaterial sharedInstance].delegate = self; // 判断是否需要下载贴纸资源 if (![[QueenMaterial sharedInstance] requestMaterial:kQueenMaterialModel]) { // 不需要下载,直接获取资源目录路径 NSString *stickerResPath = [[QueenMaterial sharedInstance] getMaterialPath:kQueenMaterialSticker]; NSLog(@"stickers Path:%@ \n", stickerResPath); } } #pragma mark - QueenMaterialDelegate - (void)queenMaterialOnReady:(kQueenMaterialType)type { // 资源下载成功 if (type == kQueenMaterialModel) { // 模型下载成功,初始化引擎 [self initBeautyEngine]; } else if (type == kQueenMaterialSticker) { // 贴纸资源下载成功, 获取资源目录路径 NSString *stickerResPath = [[QueenMaterial sharedInstance] getMaterialPath:kQueenMaterialSticker]; NSLog(@"stickers Path:%@ \n", stickerResPath); } } - (void)queenMaterialOnProgress:(kQueenMaterialType)type withCurrentSize:(int)currentSize withTotalSize:(int)totalSize withProgess:(float)progress { // 资源下载进度回调 } - (void)queenMaterialOnError:(kQueenMaterialType)type { // 资源下载出错 }
美颜特效SDK功能示例
说明
如果您是从V1.x.x版本升级到V2.0.0及更高版本时需注意:
若您计划将美颜特效SDK版本由V1.*.*更新至V2.0.0及其之后版本,您需要重新发送申请到创建应用并绑定License申请补发LicenseKey和LicenseFile(证书文件),并在标题中注明申请补发,我们会在收到申请后工作日48小时内,补发一体化LicenseKey和LicenseFile(证书文件)。若您计划新建应用并申请美颜特效SDK授权,请您登录视频直播、视频点播控制台>SDK管理>我的授权进行操作。
- (void)initBeautyEngine
{
// 初始化引擎配置信息对象
QueenEngineConfigInfo *configInfo = [QueenEngineConfigInfo new];
// 设置是否自动设置图片旋转角度,如设备锁屏,并且默认图像采集来自摄像头的话可以设置自动设置图片旋转角度
#if kEnableCustomSettingImgAngle
configInfo.autoSettingImgAngle = NO;
#else
configInfo.autoSettingImgAngle = YES;
#endif
// 设置资源根目录
NSString *bundlPath = [[NSBundle mainBundle] bundlePath];
configInfo.resRootPath = [bundlPath stringByAppendingString:@"/res"];
// 引擎初始化
self.beautyEngine = [[QueenEngine alloc] initWithConfigInfo:configInfo];
[self testBaseFaceBeauty];
[self testAdvancedFaceBeauty];
[self testFaceMakeup];
[self testFaceShape];
[self testBodyShape];
[self testFilter];
[self testSticker];
[self testGreenScreenOrBlueScreenCutout];
[self testAutoFilter];
[self testGestureDetect];
// [self testBackgroundCutout];
// [self testDebug];
}
- (void)testBaseFaceBeauty
{
// 打开磨皮锐化功能开关
// 第三个参数为基础美颜的模式,设置为kBMSkinBuffing_Natural,则美颜的效果更自然,细节保留更多;设置为kQueenBeautyFilterModeSkinBuffing_Strong,则效果更夸张,细节去除更多。
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeSkinBuffing enable:YES mode:kQueenBeautyFilterModeSkinBuffing_Natural];
// 设置磨皮系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsSkinBuffing value:0.5f];
// 设置锐化系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsSharpen value:0.5f];
// 打开美白功能开关
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeSkinWhiting enable:YES];
// 设置美白系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsWhitening value:0.5f];
}
- (void)testAdvancedFaceBeauty
{
// 打开高级美颜功能开关
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeFaceBuffing enable:YES];
// 设置去眼袋系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsPouch value:0.5f];
// 设置去法令纹系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsNasolabialFolds value:0.5f];
// 设置白牙系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsWhiteTeeth value:0.5f];
// 设置口红系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsLipstick value:0.5f];
// 设置腮红系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsBlush value:0.5f];
// 设置口红色相系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsLipstickColorParam value:0.1f];
// 设置口红饱和度系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsLipstickGlossParam value:0.5f];
// 设置口红明度系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsLipstickBrightnessParam value:0.5f];
// 设置亮眼系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsBrightenEye value:0.5f];
// 设置红润系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsSkinRed value:0.5f];
// 设置去皱纹系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsWrinkles value:0.2f];
// 设置去暗沉系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsBrightenFace value:0.2f];
}
- (void)testSkinHSV
{
// 打开HSV调节功能开关
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeHSV enable:YES];
// 设置饱和度系数
[self.queenEngine setQueenBeautyParams:kQueenBeautyParamsHSVSaturation value:0.2f];
// 设置对比度系数
[self.queenEngine setQueenBeautyParams:kQueenBeautyParamsHSVContrast value:0.2f];
}
- (void)testFaceMosaicing
{
// 打开脸部马赛克功能开关
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeFaceMosaicing enable:YES];
// 设置马赛克大小系数
[self.queenEngine setQueenBeautyParams:kQueenBeautyParamsFaceMosaicing value:0.2f];
}
- (void)testFaceMakeup
{
// 打开美妆功能开关
// 第三个参数是美妆的模式,目前仅对眉毛有作用,设置为BeautyFilterMode.kBMFaceMakeup_High,眉毛的形变会更明显,设置为kQueenBeautyFilterModeFaceMakeup_Baseline,眉毛
的形变会收敛一点
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeMakeup enable:YES mode:kQueenBeautyFilterModeFaceMakeup_Baseline];;
BOOL makeupWhole = true;
if (makeupWhole)
{
// 设置美妆整妆效果,资源路径也可以是资源的绝对路径
[self.beautyEngine setMakeupWithType:kQueenBeautyMakeupTypeWhole paths:@[@"makeup/whole/huoli.2.31.png"] blendType:kQueenBeautyBlendLabMix];
// 设置美妆整妆效果的透明度,目前female参数的值统一传YES/true,男性妆容还在优化中
[self.beautyEngine setMakeupAlphaWithType:kQueenBeautyMakeupTypeWhole female:YES alpha:1.0];
}
else
{
// 设置美妆局部妆效果:(注:设置局部妆后,如果之前设置了整妆,整妆会失效。即整妆和局部妆不能共存,但每个局部妆之间可以叠加使用,而整妆设置单个素材即可实现全脸上妆,但是无法调节各部位细节)
// 设置美妆高光效果,资源路径也可以是资源的绝对路径
[self.beautyEngine setMakeupWithType:kQueenBeautyMakeupTypeHighlight paths:@[@"makeup/highlight/highlight.2.12.png"] blendType:kQueenBeautyBlendOverlay];
// 设置美妆高光效果的透明度,目前female参数的值统一传YES/true,男性妆容还在优化中
[self.beautyEngine setMakeupAlphaWithType:kQueenBeautyMakeupTypeHighlight female:YES alpha:0.4];
// 设置美妆美瞳效果,资源路径也可以是资源的绝对路径
[self.beautyEngine setMakeupWithType:kQueenBeautyMakeupTypeEyeball paths:@[@"makeup/eyeball/milanda.2.1.png"] blendType:kQueenBeautyBlendLighten];
// 设置美妆美瞳效果的透明度,目前female参数的值统一传YES/true,男性妆容还在优化中
[self.beautyEngine setMakeupAlphaWithType:kQueenBeautyMakeupTypeEyeball female:YES alpha:1.0];
// 设置美妆口红效果,资源路径也可以是资源的绝对路径
[self.beautyEngine setMakeupWithType:kQueenBeautyMakeupTypeMouth paths:@[@"makeup/mouth_wumian/standout.2.31.png"] blendType:kQueenBeautyBlendLabMix];
// 设置美妆口红效果的透明度,目前female参数的值统一传YES/true,男性妆容还在优化中
[self.beautyEngine setMakeupAlphaWithType:kQueenBeautyMakeupTypeMouth female:YES alpha:0.5];
// 设置美妆卧蚕效果,目前采用内置素材,不支持定制
[self.beautyEngine setMakeupWithType:kQueenBeautyMakeupTypeWocan paths:@[@"makeup/wocan.png"] blendType:kQueenBeautyBlendCurve];
// 设置美妆卧蚕效果的透明度,目前female参数的值统一传YES/true,男性妆容还在优化中
[self.beautyEngine setMakeupAlphaWithType:kQueenBeautyMakeupTypeWocan female:YES alpha:0.2];
// 设置美妆眉毛效果,资源路径也可以是资源的绝对路径
[self.beautyEngine setMakeupWithType:kQueenBeautyMakeupTypeEyeBrow paths:@[@"makeup/eyebrow/biaozhunmei.2.31.png"] blendType:kQueenBeautyBlendLabMix];
// 设置美妆眉毛效果的透明度,目前female参数的值统一传YES/true,男性妆容还在优化中
[self.beautyEngine setMakeupAlphaWithType:kQueenBeautyMakeupTypeEyeBrow female:YES alpha:0.6];
// 设置美妆腮红效果,资源路径也可以是资源的绝对路径
[self.beautyEngine setMakeupWithType:kQueenBeautyMakeupTypeBlush paths:@[@"makeup/blush/weixun.2.31.png"] blendType:kQueenBeautyBlendLabMix];
// 设置美妆腮红效果的透明度,目前female参数的值统一传YES/true,男性妆容还在优化中
[self.beautyEngine setMakeupAlphaWithType:kQueenBeautyMakeupTypeBlush female:YES alpha:0.8];
// 设置美妆眼影效果,资源路径也可以是资源的绝对路径
[self.beautyEngine setMakeupWithType:kQueenBeautyMakeupTypeEyeShadow paths:@[@"makeup/eyeshadow/naichazong.2.31.png"] blendType:kQueenBeautyBlendLabMix];
// 设置美妆眼影效果的透明度,目前female参数的值统一传YES/true,男性妆容还在优化中
[self.beautyEngine setMakeupAlphaWithType:kQueenBeautyMakeupTypeEyeShadow female:YES alpha:0.7];
// 设置美妆眼线效果,资源路径也可以是资源的绝对路径
[self.beautyEngine setMakeupWithType:kQueenBeautyMakeupTypeEyeliner paths:@[@"makeup/eyeliner_292929/wenrou.2.31.png"] blendType:kQueenBeautyBlendLabMix];
// 设置美妆眼线效果的透明度,目前female参数的值统一传YES/true,男性妆容还在优化中
[self.beautyEngine setMakeupAlphaWithType:kQueenBeautyMakeupTypeEyeliner female:YES alpha:0.5];
// 设置美妆睫毛效果,资源路径也可以是资源的绝对路径 [self.beautyEngine setMakeupWithType:kQueenBeautyMakeupTypeEyelash paths:@[@"makeup/eyelash/yesheng.2.31.png"] blendType:kQueenBeautyBlendLabMix];
// 设置美妆睫毛效果的透明度,目前female参数的值统一传YES/true,男性妆容还在优化中
[self.beautyEngine setMakeupAlphaWithType:kQueenBeautyMakeupTypeEyelash female:YES alpha:0.5];
}
// // 清除美妆效果
// [self.beautyEngine resetAllMakeupType];
// // 关闭美妆功能开关
// [self.beautyEngine setQueenBeautyType:kQueenBeautyTypeMakeup enable:NO];
/*
建议采用组合妆来替换整妆的效果,可以调节各部分细节,下面提供几种组合妆的模式:
1、微醺妆:
眼影(makeup/eyeshadow/naichazong.2.31.png 透明度:0.7)、
睫毛(makeup/eyelash/yesheng.2.31.png 透明度:0.5)、
腮红(makeup/blush/weixun.2.31.png 透明度:0.8)、
眼线(makeup/eyeliner_292929/wenrou.2.31.png 透明度:0.5)、
口红(makeup/mouth_wumian/standout.2.31.png 透明度:0.5)、
高光(makeup/highlight/highlight.2.12.png, 透明度:0.4)
2、雀斑妆:
眼影(makeup/eyeshadow/taohuafen.2.31.png 透明度:0.7)、
睫毛(makeup/eyelash/yesheng.2.31.png 透明度:0.5)、
腮红(makeup/blush/cool.2.31.png 透明度:0.8)、
眼线(makeup/eyeliner_292929/guima.2.31.png 透明度:0.5)、
口红(makeup/mouth_yaochun/nanguase.2.31.png 透明度:0.5)、
高光(makeup/highlight/highlight.2.12.png, 透明度:0.4)
3、活泼妆:
眼影(makeup/eyeshadow/tianchengse.2.31.png 透明度:0.7)、
睫毛(makeup/eyelash/lingdong.2.31.png 透明度:0.5)、
腮红(makeup/blush/luori.2.31.png 透明度:0.8)、
眼线(makeup/eyeliner_292929/qizhi.2.31.png 透明度:0.5)、
口红(makeup/mouth_yaochun/nanguase.2.31.png 透明度:0.5)、
高光(makeup/highlight/highlight.2.12.png, 透明度:0.4)
4、夜店妆:
眼影(makeup/eyeshadow/yeqiangwei.2.31.png 透明度:0.7)、
睫毛(makeup/eyelash/zhixing.2.31.png 透明度:0.5)、
腮红(makeup/blush/shaonv.2.31.png 透明度:0.8)、
眼线(makeup/eyeliner_292929/wenrou.2.31.png 透明度:0.5)、
口红(makeup/mouth_zirun/zhenggongse.2.31.png 透明度:0.5)、
高光(makeup/highlight/highlight.2.12.png, 透明度:0.4)
*/
}
- (void)testFaceShape
{
// 打开美型功能开关
// 第三个参数为美型的模式,可以设置为kQueenBeautyFilterModeFaceShape_Baseline、kQueenBeautyFilterModeFaceShape_Main、
kQueenBeautyFilterModeFaceShape_High、kQueenBeautyFilterModeFaceShape_Max四种模式,形变的幅度会依次变强
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeFaceShape enable:YES mode:kQueenBeautyFilterModeFaceShape_Main];
// 设置大眼系数
[self.beautyEngine setFaceShape:kQueenBeautyFaceShapeTypeBigEye value:1.0f];
// 设置发际线系数
[self.beautyEngine setFaceShape:kQueenBeautyFaceShapeTypeHairLine value:1.0f];
// 设置嘴角上扬(微笑)系数
[self.beautyEngine setFaceShape:kQueenBeautyFaceShapeTypeSmile value:1.0f];
}
- (void)testBodyShape
{
// 打开美型功能开关
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeBodyShape enable:YES];
// 设置长腿系数
[self.beautyEngine setFaceShape:kQueenBeautyBodyShapeTypeLongLag value:1.0f];
// // 设置小头系数
// [self.beautyEngine setFaceShape:kQueenBeautyBodyShapeTypeSmallHead value:1.0f];
}
- (void)testFilter
{
// 打开滤镜功能开关
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeLUT enable:YES];
// 设置滤镜资源,也可以是资源的绝对路径
[self.beautyEngine setLutImagePath:@"lookups/ly1.png"];
// 设置滤镜强度
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsLUT value:0.8f];
}
- (void)testSticker
{
// 添加贴纸,也可以是资源的绝对路径
[self.beautyEngine addMaterialWithPath:@"sticker/1"];
// // 添加贴纸,贴纸图层从下往上叠加
// [self.beautyEngine addMaterialWithPath:@"sticker/2"];
// // 删除贴纸
// [self.beautyEngine removeMaterialWithPath:@"sticker/1"];
// [self.beautyEngine removeMaterialWithPath:@"sticker/2"];
}
- (void)testGreenScreenOrBlueScreenCutout
{
// 开启绿幕抠图功能
NSString *backgroundImgPath = @"background/red.png";//也可以是资源的绝对路径
BOOL enableBlue = NO;
float threshold = 0;
BOOL autoThreshold = YES;
[self.beautyEngine setGreenScreen:backgroundImgPath blueScreenEnabled:enableBlue threshold:threshold autoThresholdEnabled:autoThreshold];
// // 开启蓝幕抠图功能
// enableBlue = YES;
// [self.beautyEngine setGreenScreen:backgroundImgPath blueScreenEnabled:enableBlue threshold:threshold autoThresholdEnabled:autoThreshold];
// // 取消幕布抠图功能
// [self.beautyEngine setGreenScreen:nil blueScreenEnabled:enableBlue threshold:threshold autoThresholdEnabled:autoThreshold];
}
- (void)testBackgroundCutout
{
// 开启智能抠像前,可以根据需要设置其性能模式,包括自动模式、最佳画质模式、平衡模式、最佳性能模式,如果不设置则默认为自动模式
// [self.beautyEngine setSegmentPerformanceMode:kQueenSegmentPMAuto];
// // 人像背景虚化开启
// [self.beautyEngine setQueenBeautyType:kQueenBeautyTypeBackgroundProcess enable:YES];
// // 开启后默认是背景虚化,可以通过如下API设置为背景透明,适用于将输出当做前景,自行合成背景的场合
// [self.beautyEngine setSegmentBackgroundProcessType:kQueenBackgroundTransparent];
// // 人像背景虚化关闭
// [self.beautyEngine setQueenBeautyType:kQueenBeautyTypeBackgroundProcess enable:NO];
//
NSString *backgroundResPath = @"background/static_changlang";//也可以是资源的绝对路径
// 替换人像背景为静态图,相同资源不能重复添加
[self.beautyEngine addMaterialWithPath:backgroundResPath];
// // 取消人像背景设置为静态图
// [self.beautyEngine removeMaterialWithPath:backgroundResPath];
}
- (void)testAutoFilter
{
// 开启智能动态优化:
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeAutoFilter enable:YES];
// 关闭智能动态优化:
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeAutoFilter enable:NO];
}
- (void)testGestureDetect
{
// 开启手势检测
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeHandGestureDetect enable:YES];
// // 关闭手势检测
// [self.beautyEngine setQueenBeautyType:kQueenBeautyTypeHandGestureDetect enable:NO];
// 设置代理 self.beautyEngine.delegate = self;
}
- (void)testSportDetect
{
// 开启动作检测
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeBodyDetect enable:YES];
// 清空动作计数
[self.beautyEngine clearBodySportCount];
// 设置需要检测计数的动作类型,0: 姿势识别; 1: 跳绳; 2: 开合跳; 3: 深蹲; 4: 手臂划圈; 5: 菱形伸展; 6: 伸展扩胸; 7: 仰卧起坐; 8: 俯卧撑; 9: 跪姿俯卧撑
[self.beautyEngine setBodyDetectSportType:0];
// // 关闭动作检测
// [self.beautyEngine setQueenBeautyType:kQueenBeautyTypeBodyDetect enable:NO];
// 设置代理
self.beautyEngine.delegate = self;
}
- (void)queenEngine:(QueenEngine *)engine didDetectBodyInfo:(QEBodyInfoData *)bodyInfoData
{
if (bodyInfoData.bodySportType <= 0)
{
/*
{{1, Normal}, //直立
{2, HandsUp}, //举双手
{3, HandsOnHead}, //双手比心/摸头
{4, LHandUp}, //举左手
{5, RHandUp}, //举右手
{6, HandLeft}, //向左1
{7, HandRight}, //向右1
{8, DaShape}, //大字型
{9, HandLeft2},//叉腰向左2
{10, HandRight2},//叉腰向右2
{11, SuperLeft}, //超人左
{12, SuperRight}, //超人右
{13, Akimbo}} //叉腰
*/
NSLog(@"识别到姿势类型: %ld", (long)bodyInfoData.bodyPoseType);
}
else
{
NSLog(@"识别到动作类型:%ld,动作计数:%ld", (long)bodyInfoData.bodySportType, (long)bodyInfoData.sportCount);
}
}
- (void)testReHairColor
{
// 打开换发色功能开关
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeHairColor enable:YES];
// 设置头发颜色
[self.beautyEngine setHairColorWithRed:0.3137254901960784
withGreen:0.3137254901960784
withBlue:0.6274509803921569];
/*
* 参考颜色:
* ('blue', [0.3137254901960784, 0.3137254901960784, 0.6274509803921569])
* ('purple', [0.6078431372549019, 0.35294117647058826, 0.6274509803921569])
* ('sky', [0.3333333333333333, 0.5490196078431373, 0.5490196078431373])
* ('yellow', [0.6470588235294118, 0.5294117647058824, 0.35294117647058826])
* ('green', [0.37254901960784315, 0.5882352941176471, 0.3137254901960784])
* ('original', [0.39215686274509803, 0.3333333333333333, 0.3137254901960784])
* ('red', [0.5098039215686274, 0.27450980392156865, 0.27450980392156865])
*/
}
- (void)testARWriting
{
// 打开AR隔空写字功能开关
[self.beautyEngine setARWriting:YES mode:0];
}
- (void)testDebug
{
// 展示人脸识别特征点
[self.beautyEngine showFaceDetectPoint:YES];
// 展示美妆三角剖分信息, 需要先开启美妆功能
[self.beautyEngine showMakeupLine:YES];
// 展示手部识别特征点
[self.beautyEngine showHandDetectPoint:YES];
}
- (CVPixelBufferRef)getProcessedPixelBufferRefWithCurrentPixelBufferRef:(CVPixelBufferRef)pixelBufferRef
{
if (self.beautyEngine && pixelBufferRef)
{
QEPixelBufferData *bufferData = [QEPixelBufferData new];
bufferData.bufferIn = pixelBufferRef;
bufferData.bufferOut = pixelBufferRef;
#if kEnableCustomSettingImgAngle
bufferData.inputAngle = self.cameraRotate; //要正确传入pixelBufferRef的方向,否则人脸识别会失败,如果不知道pixelBufferRef的方向,可参考此demo属性cameraRotate取值的方法
bufferData.outputAngle = self.cameraRotate; //一般和inputAngle取值一样就可以了
#endif
// 对pixelBuffer进行图像处理,输出处理后的buffer
kQueenResultCode resultCode = [self.beautyEngine processPixelBuffer:bufferData];//执行此方法的线程需要始终是同一条线程
if (resultCode == kQueenResultCodeOK && bufferData.bufferOut)
{
return bufferData.bufferOut;
}
else if (resultCode == kQueenResultCodeInvalidLicense)
{
NSLog(@"license校验失败。");
}
else if (resultCode == kQueenResultCodeInvalidParam)
{
NSLog(@"非法参数");
}
else if (resultCode == kQueenResultCodeNoEffect)
{
NSLog(@"没有开启任何特效");
}
return pixelBufferRef;
}
else
{
return pixelBufferRef;
}
}
- (void)captureReset
{
if (self.beautyEngine)
{
//释放queen,确保当前线程与执行processPixelBuffer:是同一条线程
[self.beautyEngine destroyEngine];
self.beautyEngine = nil;
}
}
- (void)captureBegin
{
#if kEnableCustomSettingImgAngle
[self startRetainCameraRotate];
#endif
}
- (void)captureEnd
{
#if kEnableCustomSettingImgAngle
[self stopRetainCameraRotate];
#endif
}
#pragma mark - QueenEngineDelegate
- (void)queenEngine:(QueenEngine *)engine didDetectGesture:(QEGestureData *)gestureData
{
NSLog(@"识别到手势类型:%ld,动作类型:%d", (long)gestureData.gesture, gestureData.action);
}
数据、纹理分离调用示例
/**
通知QueenEngine处理回调纹理
*/
- (int)onProcessTexture:(int)texture textureWidth:(int)width textureHeight:(int)height
{
if (self.pushConfig.beautyOn && nil != self.queenEngine) {
QETextureData* textureData = [[QETextureData alloc] init];
textureData.inputTextureID = texture;
textureData.width = width;
textureData.height = height;
kQueenResultCode result = [self.beautyEngine processTexture:textureData];
if (result != kQueenResultCodeOK) {
NSLog(@"queen beauty processTexture error. code: %lu", result);
}
return textureData.outputTextureID;
}
return texture;
}
/**
通知QueenEngine检测处理回调
*/
- (long)onDetectorProcessData:(long)data w:(int)w h:(int)h rotation:(int)rotation format:(int)format
{
if (self.pushConfig.beautyOn && nil != self.queenEngine) {
[self.beautyEngine updateInputDataAndRunAlg:(uint8_t*)data
withImgFormat:(kQueenImageFormat)(format)
withWidth:w
withHeight:h
withStride:0
withInputAngle:rotation
withOutputAngle:rotation
withFlipAxis:0];
}
return data;
}
/**
通知QueenEngine销毁回调
*/
- (void)onDestory
{
if (nil != self.beautyEngine) {
[self.beautyEngine destroyEngine];
self.beautyEngine = nil;
}
}
文档内容是否对您有帮助?