全部產品
Search
文件中心

:功能說明

更新時間:Mar 13, 2025

美顏特效SDK功能樣本

- (void)initBeautyEngine
{
 // 初始化引擎配置資訊對象
 QueenEngineConfigInfo *configInfo = [QueenEngineConfigInfo new];

 // 填寫licenseKey和licenseFile,也可以在應用的Info.plist檔案加入AlivcLicenseKey欄位和AlivcLicenseFile欄位,內容類型為字串,填入相應值即可。優先順序:configInfo指定>Info.plist指定
 configInfo.licenseKey = @"xxx";
 // 相當於mainBundlePath的檔案路徑,樣本工程的crt檔案放在跟目錄,所以直接填寫檔案名稱即可。
 configInfo.licenseFile = @"AliVideoCert.crt";

 // 設定資源根目錄
 NSString *bundlPath = [[NSBundle mainBundle] bundlePath];
 bundlPath = [bundlPath stringByAppendingPathComponent:@"Contents/Resources/res"];
 configInfo.resRootPath = bundlPath;

 // 引擎初始化
 self.beautyEngine = [[QueenEngine alloc] initWithConfigInfo:configInfo];
 self.beautyEngine.delegate = self;

 [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
{
 // 展示Face Service特徵點
 [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的方向,否則Face Service會失敗,如果不知道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;
 }
}