SellyCloudSDK_demo/Example/SellyCloudSDK/Live/Beauty/FURenderKit.framework/Headers/FURenderer.h

917 lines
33 KiB
Objective-C
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// FURenderer.h
//
// Created by ly on 16/11/2.
// Copyright © 2016年 liuyang. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <GLKit/GLKit.h>
#import "CNamaSDK.h"
typedef struct {
CVPixelBufferRef pixelBuffer;
GLuint bgraTextureHandle;
} FUOutput;
typedef enum {
FUFormatBGRABuffer = FU_FORMAT_BGRA_BUFFER,
FUFormatRGBABuffer = FU_FORMAT_RGBA_BUFFER,
FUFormatNV12Buffer = FU_FORMAT_NV12_BUFFER,
FUFormatI420Buffer = FU_FORMAT_I420_BUFFER,
FUFormatRGBATexture = FU_FORMAT_RGBA_TEXTURE,
} FUFormat;
typedef enum {
FURotationMode0 = FU_ROTATION_MODE_0,
FURotationMode90 = FU_ROTATION_MODE_90,
FURotationMode180 = FU_ROTATION_MODE_180,
FURotationMode270 = FU_ROTATION_MODE_270,
} FURotationMode;
__attribute__((visibility("default"))) @interface FURotatedImage : NSObject
@property void* mData;
@property int mWidth;
@property int mHeight;
- (instancetype)init;
@end
;
__attribute__((visibility("default"))) @interface FUAvatarInfo : NSObject {
@public
float landmarks[150];
float identity[75];
float expression[56];
float translation[3];
float rotation[4];
float rotationMode[1];
float pupilPos[2];
int isValid;
TAvatarInfo info;
}
@end
__attribute__((visibility("default"))) @interface FURenderer : NSObject
/**
获取 FURenderer 单例
@return FURenderer 单例
*/
+ (FURenderer*)shareRenderer;
/**
context切换
*/
- (void)setBackCurrentContext;
- (void)setUpCurrentContext;
/**
初始化接口1:
- 初始化 SDK并对 SDK 进行授权,在调用其他接口前必须要先进行初始化。
- 使用该接口进行初始化的话,需要在代码中配置 EAGLContext
环境,并且保证我们的接口是在同一个 EAGLContext 下调用的
@param data v3.bundle 对应的二进制数据地址
@param dataSize v3.bundle 数据的字节数
@param ardata 该参数已舍弃,传 NULL 即可
@param package 密钥数组必须配置好密钥SDK 才能正常工作
@param size 密钥数组大小
@return 初始化结果为0则初始化失败大于0则初始化成功
*/
- (int)setupWithData:(void*)data
dataSize:(int)dataSize
ardata:(void*)ardata
authPackage:(void*)package
authSize:(int)size;
/**
初始化接口2
- 初始化 SDK并对 SDK 进行授权,在调用其他接口前必须要先进行初始化。
- 与 初始化接口1 相比此接口新增 shouldCreate
参数如果传入YES我们将在内部创建并持有一个 EAGLContext无需外部再创建
EAGLContext 环境。
@param data v3.bundle 对应的二进制数据地址
@param dataSize v3.bundle 数据的字节数
@param ardata 该参数已废弃,传 NULL 即可
@param package 密钥数组必须配置好密钥SDK 才能正常工作
@param size 密钥数组大小
@param shouldCreate 如果设置为 YES我们会在内部创建并持有一个
EAGLContextOpenGL相关操作建议所用OC层接口
(注OC接口会切换到内部创建的EAGLContext上执行防止多EAGLContext异常问题)
@return 初始化结果为0则初始化失败大于0则初始化成功
*/
- (int)setupWithData:(void*)data
dataSize:(int)dataSize
ardata:(void*)ardata
authPackage:(void*)package
authSize:(int)size
shouldCreateContext:(BOOL)shouldCreate;
/**
初始化接口3
- 初始化SDK并对 SDK 进行授权,在调用其他接口前必须要先进行初始化。
- 与 初始化接口2 相比改为通过 v3.bundle
的文件路径进行初始化,并且删除了废弃的 ardata 参数。
@param v3path v3.bundle 对应的文件路径
@param package 密钥数组必须配置好密钥SDK 才能正常工作
@param size 密钥数组大小
@param shouldCreate 如果设置为 YES我们会在内部创建并持有一个
EAGLContextOpenGL相关操作建议所用OC层接口
(注OC接口会切换到内部创建的EAGLContext上执行防止多EAGLContext异常问题)
@return 初始化结果为0则初始化失败大于0则初始化成功
*/
- (int)setupWithDataPath:(NSString*)v3path
authPackage:(void*)package
authSize:(int)size
shouldCreateContext:(BOOL)shouldCreate;
/**
初始化接口4
- 初始化SDK采用离线鉴权方式
@param v3path v3.bundle 对应的文件路径
@param offLinePath offLineBundle.bundle 离线鉴权包路径
@param package 密钥数组必须配置好密钥SDK 才能正常工作
@param size 密钥数组大小
@param shouldCreate 如果设置为 YES我们会在内部创建并持有一个
EAGLContextOpenGL相关操作建议所用OC层接口
(注OC接口会切换到内部创建的EAGLContext上执行防止多EAGLContext异常问题)
@return 第一次鉴权成功后的文件
*/
- (NSData*)setupLocalWithV3Path:(NSString*)v3path
offLinePath:(NSString*)offLinePath
authPackage:(void*)package
authSize:(int)size
shouldCreateContext:(BOOL)shouldCreate;
/**
视频处理接口1
- 将 items 中的道具绘制到 pixelBuffer 中
@param pixelBuffer 图像数据支持的格式为BGRA、YUV420SP
@param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
将无法驱动道具中的特效动画
@param items 包含多个道具句柄的 int 数组,包括普通道具、美颜道具、手势道具等
@param itemCount 句柄数组中包含的句柄个数
@return 被处理过的的图像数据,返回 nil 视频处理失败
*/
- (CVPixelBufferRef)renderPixelBuffer:(CVPixelBufferRef)pixelBuffer
withFrameId:(int)frameid
items:(int*)items
itemCount:(int)itemCount;
/**
视频处理接口2
- 将 items 中的道具绘制到 pixelBuffer 中
- 与 视频处理接口1 相比新增 flip 参数,将该参数设置为 YES
可使道具做水平镜像翻转
@param pixelBuffer 图像数据支持的格式为BGRA、YUV420SP
@param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
将无法驱动道具中的特效动画
@param items 包含多个道具句柄的 int 数组
@param itemCount 句柄数组中包含的句柄个数
@param flip 道具镜像使能,如果设置为 YES 可以将道具做镜像操作
@return 被处理过的的图像数据,返回 nil 视频处理失败
*/
- (CVPixelBufferRef)renderPixelBuffer:(CVPixelBufferRef)pixelBuffer
withFrameId:(int)frameid
items:(int*)items
itemCount:(int)itemCount
flipx:(BOOL)flip;
/**
视频处理接口3
- 将 items 中的道具绘制到 pixelBuffer 中
- 与 视频处理接口2 相比新增 customSize 参数,可以自定义输出分辨率
@param pixelBuffer 图像数据支持的格式为BGRA、YUV420SP
@param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
将无法驱动道具中的特效动画
@param items 包含多个道具句柄的 int 数组
@param itemCount 句柄数组中包含的句柄个数
@param flip 道具镜像使能,如果设置为 YES 可以将道具做镜像操作
@param customSize 自定义输出的分辨率目前仅支持BGRA格式
@return 被处理过的的图像数据,返回 nil 视频处理失败
*/
- (CVPixelBufferRef)renderPixelBuffer:(CVPixelBufferRef)pixelBuffer
withFrameId:(int)frameid
items:(int*)items
itemCount:(int)itemCount
flipx:(BOOL)flip
customSize:(CGSize)customSize NS_AVAILABLE_IOS(8_0);
/**
视频处理接口4
- 将 items 中的道具绘制到一个新的 pixelBuffer 中,输出与输入不是同一个
pixelBuffer
@param pixelBuffer 图像数据支持的格式为BGRA、YUV420SP
@param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
将无法驱动道具中的特效动画
@param items 包含多个道具句柄的 int 数组,包括普通道具、美颜道具、手势道具等
@param itemCount 句柄数组中包含的句柄个数
@return 被处理过的的图像数据,返回 nil 视频处理失败
*/
- (CVPixelBufferRef)renderToInternalPixelBuffer:(CVPixelBufferRef)pixelBuffer
withFrameId:(int)frameid
items:(int*)items
itemCount:(int)itemCount
NS_AVAILABLE_IOS(8_0);
/**
视频处理接口5
- 将 items 中的道具绘制到 textureHandle 及 pixelBuffer 中
- 该接口适用于可同时输入 GLES texture 及 pixelBuffer 的用户,这里的
pixelBuffer 主要用于 CPU 上的人脸检测,如果只有 GLES texture 此接口将无法工作。
@param pixelBuffer 图像数据支持的格式为BGRA、YUV420SP用于人脸识别
@param textureHandle 用户当前 EAGLContext 下的 textureID用于图像处理
@param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
将无法驱动道具中的特效动画
@param items 包含多个道具句柄的 int 数组,包括普通道具、美颜道具、手势道具等
@param itemCount 句柄数组中包含的句柄个数
@return 被处理过的的图像数据
*/
- (FUOutput)renderPixelBuffer:(CVPixelBufferRef)pixelBuffer
bgraTexture:(GLuint)textureHandle
withFrameId:(int)frameid
items:(int*)items
itemCount:(int)itemCount NS_AVAILABLE_IOS(8_0);
/**
视频处理接口6
- 将items中的道具绘制到 textureHandle 及 pixelBuffer 中
- 与 视频处理接口5 相比新增 flip 参数,将该参数设置为 YES
可使道具做水平镜像翻转。
@param pixelBuffer 图像数据支持的格式为BGRA、YUV420SP用于人脸识别
@param textureHandle 用户当前 EAGLContext 下的 textureID用于图像处理
@param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
将无法驱动道具中的特效动画
@param items 包含多个道具句柄的int数组包括普通道具、美颜道具、手势道具等
@param itemCount 句柄数组中包含的句柄个数
@param flip 道具镜像使能,如果设置为 YES 可以将道具做镜像操作
@return 被处理过的的图像数据
*/
- (FUOutput)renderPixelBuffer:(CVPixelBufferRef)pixelBuffer
bgraTexture:(GLuint)textureHandle
withFrameId:(int)frameid
items:(int*)items
itemCount:(int)itemCount
flipx:(BOOL)flip NS_AVAILABLE_IOS(8_0);
/**
视频处理接口7
- 将items中的道具绘制到 textureHandle 及 pixelBuffer 中
- 与 视频处理接口6 相比新增 customSize 参数,可以自定义输出分辨率。
@param pixelBuffer 图像数据支持的格式为BGRA、YUV420SP用于人脸识别
@param textureHandle 用户当前 EAGLContext 下的 textureID用于图像处理
@param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
将无法驱动道具中的特效动画
@param items 包含多个道具句柄的int数组包括普通道具、美颜道具、手势道具等
@param itemCount 句柄数组中包含的句柄个数
@param flip 道具镜像使能,如果设置为 YES 可以将道具做镜像操作
@param customSize 自定义输出的分辨率目前仅支持BGRA格式
@return 被处理过的的图像数据
*/
- (FUOutput)renderPixelBuffer:(CVPixelBufferRef)pixelBuffer
bgraTexture:(GLuint)textureHandle
withFrameId:(int)frameid
items:(int*)items
itemCount:(int)itemCount
flipx:(BOOL)flip
customSize:(CGSize)customSize NS_AVAILABLE_IOS(8_0);
/**
视频处理接口8
-
该接口不包含人脸检测功能,只能对图像做美白、红润、滤镜、磨皮操作,不包含瘦脸及大眼等美型功能。
@param pixelBuffer 图像数据支持的格式为BGRA、YUV420SP
@param item 美颜道具句柄
@return 被处理过的的图像数据 返回 nil 视频处理失败
*/
- (CVPixelBufferRef)beautifyPixelBuffer:(CVPixelBufferRef)pixelBuffer
withBeautyItem:(int)item;
/**
视频处理接口9
- 将 items 中的道具绘制到 YUV420P 图像中
@param y Y帧图像地址
@param u U帧图像地址
@param v V帧图像地址
@param ystride Y帧stride
@param ustride U帧stride
@param vstride V帧stride
@param width 图像宽度
@param height 图像高度
@param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
将无法驱动道具中的特效动画
@param items 包含多个道具句柄的 int 数组,包括普通道具、美颜道具、手势道具等
@param itemCount 句柄数组中包含的句柄个数
*/
- (void)renderFrame:(uint8_t*)y
u:(uint8_t*)u
v:(uint8_t*)v
ystride:(int)ystride
ustride:(int)ustride
vstride:(int)vstride
width:(int)width
height:(int)height
frameId:(int)frameid
items:(int*)items
itemCount:(int)itemCount;
/**
视频处理接口10
- 将 items 中的道具绘制到 YUV420P 图像中
- 与 视频处理接口9 相比新增 flip 参数,将该参数设置为 YES
可使道具做水平镜像翻转
@param y Y帧图像地址
@param u U帧图像地址
@param v V帧图像地址
@param ystride Y帧stride
@param ustride U帧stride
@param vstride V帧stride
@param width 图像宽度
@param height 图像高度
@param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
将无法驱动道具中的特效动画
@param items 包含多个道具句柄的 int 数组,包括普通道具、美颜道具、手势道具等
@param itemCount 句柄数组中包含的句柄个数
@param flip 道具镜像使能,如果设置为 YES 可以将道具做镜像操作
*/
- (void)renderFrame:(uint8_t*)y
u:(uint8_t*)u
v:(uint8_t*)v
ystride:(int)ystride
ustride:(int)ustride
vstride:(int)vstride
width:(int)width
height:(int)height
frameId:(int)frameid
items:(int*)items
itemCount:(int)itemCount
flipx:(BOOL)flip;
/**
视频处理接口11
- 将 items 中的道具绘制到 pixelBuffer 中
- 与 视频处理接口2 相比新增 masks 参数,用来指定 items
中的道具画在多人中的哪一张脸上
@param pixelBuffer 图像数据支持的格式为BGRA、YUV420SP
@param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
将无法驱动道具中的特效动画
@param items 包含多个道具句柄的 int 数组
@param itemCount 句柄数组中包含的句柄个数
@param flip 道具镜像使能,如果设置为 YES 可以将道具做镜像操作
@param masks 指定items中的道具画在多张人脸中的哪一张脸上的 int 数组,其长度要与
items 长度一致,
masks中的每一位与items中的每一位道具一一对应。使用方法为要使某一个道具画在检测到的第一张人脸上
对应的int值为 "2的0次方"画在第二张人脸上对应的int值为
“2的1次方”第三张人脸对应的int值为 “2的2次方” 以此类推。例masks =
{pow(2,0),pow(2,1),pow(2,2)....},值得注意的是美颜道具对应的int值为 0。
@return 被处理过的的图像数据,返回 nil 视频处理失败
*/
- (CVPixelBufferRef)renderPixelBuffer:(CVPixelBufferRef)pixelBuffer
withFrameId:(int)frameid
items:(int*)items
itemCount:(int)itemCount
flipx:(BOOL)flip
masks:(void*)masks;
/**
视频处理接口12 注意:目前仅支持背景分割场景
- 将 items 中的道具绘制到 pixelBuffer 中
- 与 视频处理接口2 相比新增 customSize 参数,可以自定义输出分辨率
@param pixelBuffer 图像数据支持的格式为BGRA、YUV420SP
@param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
将无法驱动道具中的特效动画
@param items 包含多个道具句柄的 int 数组
@param itemCount 句柄数组中包含的句柄个数
@param flip 道具镜像使能,如果设置为 YES 可以将道具做镜像操作
@param customSize 自定义输出的分辨率目前仅支持BGRA格式
@param useAlpha 是否带道具透明通道if useAlpha = NO,RGBA 数据alpha
会被强制设置为1其他视频处理接口皆为该模式
@return 被处理过的的图像数据,返回 nil 视频处理失败
*/
- (CVPixelBufferRef)renderPixelBuffer:(CVPixelBufferRef)pixelBuffer
withFrameId:(int)frameid
items:(int*)items
itemCount:(int)itemCount
flipx:(BOOL)flip
customSize:(CGSize)customSize
useAlpha:(BOOL)useAlpha;
- (int)renderItems:(void*)inPtr
inFormat:(FUFormat)inFormat
outPtr:(void*)outPtr
outFormat:(FUFormat)outFormat
width:(int)width
height:(int)height
frameId:(int)frameid
items:(int*)items
itemCount:(int)itemCount
flipx:(BOOL)flip;
- (int)renderBundles:(void*)inPtr
inFormat:(FUFormat)inFormat
outPtr:(void*)outPtr
outFormat:(FUFormat)outFormat
width:(int)width
height:(int)height
frameId:(int)frameid
items:(int*)items
itemCount:(int)itemCount;
- (int)renderBundlesSplitView:(void*)inPtr
inFormat:(FUFormat)inFormat
outPtr:(void*)outPtr
outFormat:(FUFormat)outFormat
width:(int)width
height:(int)height
frameId:(int)frameid
items:(int*)items
itemCount:(int)itemCount
splitViewInfoPtr:(TSplitViewInfo*)splitViewInfoPtr;
- (CVPixelBufferRef)renderBundlesWithPixelBuffer:(CVPixelBufferRef)pixelBuffer
withFrameId:(int)frameid
items:(int*)items
itemCount:(int)itemCount;
- (CVPixelBufferRef)
renderBundlesSplitViewWithPixelBuffer:(CVPixelBufferRef)pixelBuffer
withFrameId:(int)frameid
items:(int*)items
itemCount:(int)itemCount
splitViewInfoPtr:(TSplitViewInfo*)splitViewInfoPtr;
- (void)setInputCameraMatrix:(int)flip_x
flip_y:(int)flip_y
rotate_mode:(int)rotate_mode;
- (void)setOutputResolution:(int)w h:(int)h;
/*
@return 1代表成功0代表失败
*/
- (int)rotateImage:(FURotatedImage*)outImage
inPtr:(void*)inPtr
inFormat:(FUFormat)inFormat
width:(int)width
height:(int)height
rotationMode:(FURotationMode)rotationMode
flipX:(BOOL)flipX
flipY:(BOOL)flipY;
/**
resize视频图像目前仅支持BGRA格式的pixelBuffer
@param pixelBuffer BGRA格式的pixelBuffer
@param resizeSize resizeSize
@return resizeSize之后的pixelBuffer
*/
- (CVPixelBufferRef)resizePixelBuffer:(CVPixelBufferRef)pixelBuffer
resizeSize:(CGSize)resizeSize NS_AVAILABLE_IOS(8_0);
/**
通过texture获取指定大小与格式的pixelBuffer
@param texture rgba texture
@param textureSize texture 尺寸
@param outPutSize 输出的pixelBuffer的尺寸
@param outputFormat
输出的pixelBuffer的格式接受的参数有两个分别为FU_FORMAT_NV12_BUFFER、FU_FORMAT_BGRA_BUFFER
@return 从texture获取到的指定大小与格式的pixelBuffer
*/
- (CVPixelBufferRef)getPixelBufferFromTexture:(int)texture
textureSize:(CGSize)textureSize
outputSize:(CGSize)outPutSize
outputFormat:(int)outputFormat
NS_AVAILABLE_IOS(8_0);
/**
切换摄像头时需调用的接口:
- 切换摄像头时需要调用该接口,我们会在内部重置人脸检测的一些状态
*/
+ (void)onCameraChange;
/**
销毁所有gl资源时需调用的接口
- 销毁所有gl资源时需要调用该接口
*/
+ (void)ReleaseGLResources;
/**
销毁所有道具时需调用的接口:
- 销毁所有道具时需要调用该接口我们会在内部销毁每个指令中的OpenGL资源
*/
+ (void)OnDeviceLost;
/**
销毁所有道具时需调用的接口:
- 销毁所有道具时需要调用该接口我们仅销毁Cpu资源
*/
+ (void)OnDeviceLostSafe;
/**
通过道具二进制文件创建道具:
- 通过道具二进制文件创建道具句柄
@param data 道具二进制文件
@param size 文件大小
@return 创建的道具句柄
*/
+ (int)createItemFromPackage:(void*)data size:(int)size;
/**
通过道具文件路径创建道具:
- 通过道具文件路径创建道具句柄
@param path 道具文件路径
@return 创建的道具句柄
*/
+ (int)itemWithContentsOfFile:(NSString*)path;
/**
销毁单个道具:
- 通过道具句柄销毁道具,并释放相关资源
- 销毁道具后请将道具句柄设为 0 ,以避免 SDK 使用无效的句柄而导致程序出错。
@param item 道具句柄
*/
+ (void)destroyItem:(int)item;
/**
销毁所有道具:
- 销毁全部道具,并释放相关资源
- 销毁道具后请将道具句柄数组中的句柄设为 0 ,以避免 SDK
使用无效的句柄而导致程序出错。
*/
+ (void)destroyAllItems;
/**
加载AI能力模型bundle
@param data AI能力模型二进制文件
@param size 文件大小
@param type AI能力类型,定义在FUAITYPE中
@return 加载成功返回1否则返回0
*/
+ (int)loadAIModelFromPackage:(void*)data size:(int)size aitype:(FUAITYPE)type;
/**
在不需要的时候释放AI能力模型bundle
@param type AI能力类型,定义在FUAITYPE中
@return 释放成功返回1否则返回0
*/
+ (int)releaseAIModel:(FUAITYPE)type;
/**
获取AI能力模型是否加载。
@param type AI能力类型,定义在FUAITYPE中
@return 已加载返回1否则返回0
*/
+ (int)isAIModelLoaded:(FUAITYPE)type;
/**
为道具设置参数:
@param item 道具句柄
@param name 参数名
@param value 参数值:只支持 NSString 、 NSNumber 两种数据类型
@return 执行结果:返回 0 代表设置失败,大于 0 表示设置成功
*/
+ (int)itemSetParam:(int)item withName:(NSString*)name value:(id)value;
/**
为道具设置参数:
@param item 道具句柄
@param name 参数名
@param value 参数值double 数组
@param length 参数值double 数组长度
@return 执行结果:返回 0 代表设置失败,大于 0 表示设置成功
*/
+ (int)itemSetParamdv:(int)item
withName:(NSString*)name
value:(double*)value
length:(int)length;
/**
从道具中获取 double 数组:
@param item 道具句柄
@param name 参数名
@param value 参数值double 数组
@param length 参数值double 数组长度
@return 执行结果:返回获取的数组长度
*/
+ (int)itemGetParamdv:(int)item
withName:(NSString*)name
buffer:(double*)buffer
length:(int)length;
/**
从道具中获取 float 数组:
@param item 道具句柄
@param name 参数名
@param value 参数值float 数组
@param length 参数值float 数组长度
@return 执行结果:返回获取的数组长度
*/
+ (int)itemGetParamfv:(int)item
withName:(NSString*)name
buffer:(float*)buffer
length:(int)length;
/**
从道具中获取 double 型参数值:
@param item 道具句柄
@param name 参数名
@return 参数值
*/
+ (double)getDoubleParamFromItem:(int)item withName:(NSString*)name;
/**
从道具中获取 NSString 型参数值:
@param item 道具句柄
@param name 参数名
@return 参数值
*/
+ (NSString*)getStringParamFromItem:(int)item withName:(NSString*)name;
+ (int)itemSetParamu8v:(int)item
withName:(NSString*)name
buffer:(void*)buffer
size:(int)size;
+ (int)itemGetParamu8v:(int)item
withName:(NSString*)name
buffer:(void*)buffer
size:(int)size;
+ (int)itemSetParamu64:(int)item
withName:(NSString*)name
value:(unsigned long long)value;
/**
判断是否检测到人脸:
@return 检测到的人脸个数,返回 0 代表没有检测到人脸
*/
+ (int)isTracking;
/**
判断SDK是否已经初始化
@return 返回1代表初始化返回0代表未初始化
*/
+ (int)isLibraryInit;
/**
开启多人检测模式:
- 开启多人检测模式,最多可同时检测 8 张人脸
@param maxFaces 设置多人模式开启的人脸个数,最多支持 8 个
@return 上一次设置的人脸个数
*/
+ (int)setMaxFaces:(int)maxFaces;
/**
人脸信息跟踪:
- 该接口只对人脸进行检测,如果程序中没有运行过视频处理接口( 视频处理接口8
除外),则需要先执行完该接口才能使用 获取人脸信息接口 来获取人脸信息
@param inputFormat 输入图像格式FU_FORMAT_BGRA_BUFFER 或 FU_FORMAT_NV12_BUFFER
@param inputData 输入的图像 bytes 地址
@param width 图像宽度
@param height 图像高度
@return 检测到的人脸个数,返回 0 代表没有检测到人脸
*/
+ (int)trackFace:(int)inputFormat
inputData:(void*)inputData
width:(int)width
height:(int)height;
+ (int)trackFaceWithTongue:(int)inputFormat
inputData:(void*)inputData
width:(int)width
height:(int)height;
/**
获取人脸信息:
- 在程序中需要先运行过视频处理接口( 视频处理接口8 除外)或 人脸信息跟踪接口
后才能使用该接口来获取人脸信息;
-
该接口能获取到的人脸信息与我司颁发的证书有关,普通证书无法通过该接口获取到人脸信息;
- 具体参数及证书要求如下:
landmarks: 2D人脸特征点返回值为75个二维坐标长度75*2
证书要求: LANDMARK证书、AVATAR证书
landmarks_ar: 3D人脸特征点返回值为75个三维坐标长度75*3
证书要求: AVATAR证书
rotation: 人脸三维旋转返回值为旋转四元数长度4
证书要求: LANDMARK证书、AVATAR证书
translation: 人脸三维位移返回值一个三维向量长度3
证书要求: LANDMARK证书、AVATAR证书
eye_rotation: 眼球旋转,返回值为旋转四元数,长度4
证书要求: LANDMARK证书、AVATAR证书
rotation_raw: 人脸三维旋转不考虑屏幕方向返回值为旋转四元数长度4
证书要求: LANDMARK证书、AVATAR证书
expression: 表情系数长度46
证书要求: AVATAR证书
projection_matrix: 投影矩阵长度16
证书要求: AVATAR证书
face_rect: 人脸矩形框,返回值为(xmin,ymin,xmax,ymax)长度4
证书要求: LANDMARK证书、AVATAR证书
rotation_mode: 人脸朝向0-3分别对应手机四种朝向长度1
证书要求: LANDMARK证书、AVATAR证书
@param faceId 被检测的人脸 ID ,未开启多人检测时传 0
,表示检测第一个人的人脸信息;当开启多人检测时,其取值范围为 [0 ~ maxFaces-1]
,取其中第几个值就代表检测第几个人的人脸信息
@param name 人脸信息参数名: "landmarks" , "eye_rotation" , "translation" ,
"rotation" ....
@param pret 作为容器使用的 float 数组指针,获取到的人脸信息会被直接写入该 float
数组。
@param number float 数组的长度
@return 返回 1 代表获取成功,返回 0 代表获取失败
*/
+ (int)getFaceInfo:(int)faceId
name:(NSString*)name
pret:(float*)pret
number:(int)number;
+ (int)getFaceInfoRotated:(int)faceId
name:(NSString*)name
pret:(float*)pret
number:(int)number;
/**
获取正在跟踪人脸的标识符用于在SDK外部对多人情况下的不同人脸进行区别。
@param faceId人脸编号表示识别到的第 x
张人脸从0开始到n-1,n为当前跟踪到的人脸数。
@return 人脸的标识符 [1,maxFaces]
*/
+ (int)getFaceIdentifier:(int)faceId;
/**
将普通道具绑定到avatar道具
- 该接口主要应用于 P2A 项目中,将普通道具绑定到 avatar
道具上,从而实现道具间的数据共享;
- 在视频处理时只需要传入 avatar 道具句柄,普通道具也会和 avatar
一起被绘制出来。
- 普通道具又分免费版和收费版,免费版有免费版对应的 contract
文件,收费版有收费版对应的 contract 文件,当绑定时需要同时传入这些 contracts
文件才能绑定成功。
- 注意: contract 的创建和普通道具创建方法一致
@param avatarItem avatar 道具句柄
@param items 需要被绑定到 avatar 道具上的普通道具的句柄数组
@param itemsCount 句柄数组包含的道具句柄个数
@param contracts contract 道具的句柄数组
@param contractsCount contracts 数组中 contract 道具句柄的个数
@return 被绑定到 avatar 道具上的普通道具个数
*/
+ (int)avatarBindItems:(int)avatarItem
items:(int*)items
itemsCount:(int)itemsCount
contracts:(int*)contracts
contractsCount:(int)contractsCount
DEPRECATED_MSG_ATTRIBUTE("use bindItems:items:itemsCount: instead");
/**
将普通道具从avatar道具上解绑
- 该接口可以将普通道具从 avatar
道具上解绑,主要应用场景为切换道具或去掉某个道具
@param avatarItem avatar 道具句柄
@param items 需要从 avatar 道具上的解除绑定的普通道具的句柄数组
@param itemsCount 句柄数组包含的道具句柄个数
@return 从 avatar 道具上解除绑定的普通道具个数
*/
+ (int)avatarUnbindItems:(int)avatarItem
items:(int*)items
itemsCount:(int)itemsCount
DEPRECATED_MSG_ATTRIBUTE("use unBindItems:items:itemsCount: instead");
/**
绑定道具:
-
该接口可以将一些普通道具绑定到某个目标道具上,从而实现道具间的数据共享,在视频处理时只需要传入该目标道具句柄即可
@param item 目标道具句柄
@param items 需要被绑定到目标道具上的其他道具的句柄数组
@param itemsCount 句柄数组包含的道具句柄个数
@return 被绑定到目标道具上的普通道具个数
*/
+ (int)bindItems:(int)item items:(int*)items itemsCount:(int)itemsCount;
/**
解绑道具:
- 该接口可以将一些普通道具从某个目标道具上解绑
@param item 目标道具句柄
@param items 需要从目标道具上解除绑定的普通道具的句柄数组
@param itemsCount 句柄数组包含的道具句柄个数
@return 被绑定到目标道具上的普通道具个数
*/
+ (int)unBindItems:(int)item items:(int*)items itemsCount:(int)itemsCount;
/**
解绑所有道具:
- 该接口可以解绑绑定在目标道具上的全部道具
@param item 目标道具句柄
@return 从目标道具上解除绑定的普通道具个数
*/
+ (int)unbindAllItems:(int)item;
/**
获取 SDK 版本信息:
@return 版本信息
*/
+ (NSString*)getVersion;
+ (void)setDefaultRotationMode:(int)mode;
+ (void)setDeviceOrientation:(int)orientation;
+ (int)getCurrentRotationMode;
+ (int)setMultiSamples:(int)samples;
+ (void)setAsyncTrackFaceEnable:(int)enable;
+ (void)setTongueTrackingEnable:(int)enable;
+ (int)loadTongueModel:(void*)model size:(int)size;
+ (int)SetLoadQuality:(int)quality;
/**
统计接口调用次数
@param 接口名称
@return 返回 1 代表调用成功,返回 0 代表代表失败
**/
+ (int)authCountWithAPIName:(NSString*)name;
/**
释放nama资源
*/
+ (void)namaLibDestroy;
+ (void)humanProcessorReset;
/**
prepare GL resource for a list of items in advance
This function needs a GLES 2.0+ context.
@param items the list of items
@param itemCount the number of items
*/
- (void)prepareGLResource:items:(int*)items itemCount:(int)itemCount;
/**
check prepare gl resource is ready.
1 for ready prepared, 0 false.
@param items the list of items
@param itemCount the number of items
*/
- (int)isGLPrepared:items:(int*)items itemCount:(int)itemCount;
/**
check gl error
@return OpenGL error information, 0 for no error
*/
+ (int)checkGLError;
@end