# HTEffect_Demo_PC
**Repository Path**: texeljoy_0/hteffect_demo_pc
## Basic Information
- **Project Name**: HTEffect_Demo_PC
- **Description**: 虹图人像人体特效PC(Windows)端集成示例Demo
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-03-27
- **Last Updated**: 2024-06-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 人像人体特效, Windows, ar
## README
简体中文 | [English](README_EN.md) | [日本語](README_JP.md)
# **虹图人像人体 SDK**
## **简介**
- 提供面部精致的美颜美型美妆和发色变换效果
- 提供不少于60款风格滤镜、画面炫彩变幻效果的特效滤镜、人脸变形的趣味哈哈镜
- 精致的2D动态贴纸、3D道具、面具、及丰富的全屏3D礼物特效功能
- 可拖拽水印贴纸:支持用户上传,拖拽、缩放、旋转等
- 多种手势识别,并触发特效
- 支持AI背景分割和多种幕布颜色的绿幕抠图功能
### **特色**
- 【特效更丰富】:多种AR特效全覆盖,特效类型丰富多样,满足用户多样需求
- 【对接更便捷】:开箱即用型UI可直接对C端使用,对接快且体验好,三行代码快速实现对接
- 【资源支持自设计】:所有素材都支持平台自设计和自定义,打造和平台定位一致的AR素材特效
- 【性能更极致】:行业领先的 AI 算法能力,946人脸关键点让五官定位更精准,人脸表情情绪捕捉更高效、更稳定、更准确
- 【平台化服务更自主】:用户自行注册、登录虹图AI开放平台即可获得人像人体SDK能力,实时对应用状态和信息具备更自由、精准的把控
### **效果展示**
- 通过人脸美颜美型、贴纸道具、手势特效到人像背景分割等AR特效,为用户提供围绕人像人体丰富多样的AI+AR技术

----
## **快速集成**
### **iOS**
#### **1. 前提条件**
- Xcode 13.0+
- iOS 11.0 以上的 iPhone 真机
- APP ID,由[虹图AI开放平台](https://console.texeljoy.com/login)控制台获取
#### **2. 安装**
您可以选择使用 CocoaPods 自动加载的方式,或者先下载 SDK,再将其导入到您当前的工程项目中
**CocoaPods**
- 编辑Podfile文件
```shell
pod 'HTEffect'
```
- 安装
```shell
pod install
```
**手动集成**
- 将下载好的 **HTEffect.framework** 库文件和 **HTEffect.bundle** 资源包放到您的项目文件夹下
- 在 Xcode > General 中添加动态库,确保 **Embed** 属性设置为 **Embed&Sign**
- 在 Xcode > Build Settings 中搜索 bitcode ,将 **Enable Bitcode** 设置为 **No**
- 在 Xcode > Info 中添加 **App Transport Security Settings** > **Allow Arbitrary Loads** 并设置为 **YES**
#### **3. 引用**
- 在项目需要使用 SDK API 的文件里,添加模块引用
```objective-c
#import
```
- (可选) HTUI 可根据项目需求选用,将 HTUI 文件夹添加到您的项目文件夹中,在项目需要使用的文件里,添加引用
```objective-c
#import "HTUIManager.h"
```
#### **4. 使用**
**初始化**
- 在您的 App 调用 HTEffect 的相关功能之前(建议在 [AppDelegate application:didFinishLaunchingWithOptions:] 中)进行如下设置
```objective-c
/**
* 在线鉴权初始化方法
*/
[[HTEffect shareInstance] initHTEffect:@"YOUR_APP_ID" withDelegate:self];
/**
* 离线鉴权初始化方法
*/
// [[HTEffect shareInstance] initHTEffect:@"YOUR_APP_ID"];
```
- (可选) 如果需要使用 HTUI,您可以在 viewDidLoad 中添加以下方法
```objective-c
[[HTUIManager shareManager] loadToWindowDelegate:self];
[self.view addSubview:[HTUIManager shareManager].defaultButton];
```
**渲染**
- 定义一个 BOOL 变量 **isRenderInit** ,用来标志渲染器的初始化状态,根据获取到的视频格式,采用对应的方法进行渲染
```objective-c
/**
* 视频帧
*/
CVPixelBufferLockBaseAddress(pixelBuffer, 0);
unsigned char *buffer = (unsigned char *) CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 0);
if (!_isRenderInit) {
[[HTEffect shareInstance] releaseBufferRenderer];
_isRenderInit = [[HTEffect shareInstance] initBufferRenderer:format width:width height:height rotation:rotation isMirror:isMirror maxFaces:maxFaces];
}
[[HTEffect shareInstance] processBuffer:buffer];
CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
/**
* 纹理
*/
// if (!_isRenderInit) {
// [[HTEffect shareInstance] releaseTextureRenderer];
// _isRenderInit = [[HTEffect shareInstance] initTextureRenderer:width height:height rotation:rotation isMirror:isMirror maxFaces:maxFaces];
// }
// [[HTEffect shareInstance] processTexture:textureId];
```
**销毁**
- 结束渲染时,需根据视频格式,调用对应的释放方法,通常写在 dealloc 方法里
```objective-c
/**
* 销毁纹理渲染资源
*/
[[HTEffect shareInstance] releaseTextureRenderer];
/**
* 销毁buffer渲染资源
*/
// [[HTEffect shareInstance] releaseBufferRenderer];
```
### **Android**
#### **1. 导入工程**
- 将 **HTEffect.aar** 文件拷贝到 app 模块中的 libs 文件夹下,并在 app 模块的 build.gradle 文件的 dependencies 中,增加如下依赖
```shell
dependencies {
implementation files('libs/HTEffect.aar')
}
```
- 将 jniLibs 文件夹中,各个 ABI 对应的 **libHTEffect.so** 文件,拷贝到对应目录中
- 将 assets 资源文件拷贝到项目的对应目录中
#### **2. 使用 HTUI (可选)**
- 依赖我们的 htui 工程,使用我们提供的开源 UI 库,将 htui 文件夹拷贝到工程根目录下,在工程根目录的 settings.gradle 文件中,增加如下代码
```java
include(":htui")
```
- 在 app 模块中的 build.gradle 文件的 dependencies 中,增加如下代码
```shell
implementation project(':htui')
```
#### **3. 集成开发**
**初始化**
- HTEffect 初始化函数程序中调用一次即可生效,建议您在 Application 创建的时候调用;如果渲染功能使用不频繁,也可以在使用的时候调用,接口如下
```java
// 在线鉴权初始化方法
HTEffect.shareInstance().initHTEffect(context, "YOUR_APP_ID", new InitCallback() {
@Override public void onInitSuccess() {}
@Override public void onInitFailure() {}
});
// 离线鉴权初始化方法
//HTEffect.shareInstance().initHTEffect(context,"YOUR_APP_ID");
```
**添加 HTUI (可选)**
- 设置使用 htui 的 Activity 继承或间接继承 FragmentActivity,例如
```java
public class CameraActivity extends FragmentActivity {
//...
}
```
- 如果需要使用 htui,请调用 addcontentView 实现UI的添加,代码如下
```java
addContentView(
new HTPanelLayout(this).init(getSupportFragmentManager()),
new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT)
);
```
**渲染**
- 定义布尔变量 **isRenderInit** ,用来标志渲染方法是否初始化完成,然后根据得到的视频帧格式的不同,使用对应的方法进行渲染
```java
/**
* GL_TEXTURE_EXTERNAL_OES 纹理格式
*/
if (!isRenderInit) {
isRenderInit = HTEffect.shareInstance().initTextureOESRenderer(width, height, rotation, isMirror, maxFaces);
}
int textureId = HTEffect.shareInstance().processTextureOES(textureOES);
/**
* GL_TEXTURE_2D 纹理格式
*/
if (!isRenderInit) {
isRenderInit = HTEffect.shareInstance().initTextureRenderer(width, height, rotation, isMirror, maxFaces);
}
int textureId = HTEffect.shareInstance().processTexture(texture2D);
/**
* byte[] 视频帧
*/
if (!isRenderInit) {
isRenderInit = HTEffect.shareInstance().initBufferRenderer(format,width, height, rotation, isMirror, maxFaces);
}
HTEffect.shareInstance().processBuffer(buffer);
```
**销毁**
- 结束渲染时,为防止内存泄漏的发生,需根据视频帧格式的不同,调用对应的 destroy 方法释放掉资源,调用位置通常在 视频帧回调接口 的销毁处,或者是 Activity , Fragment 的生命周期结束处,同时将定义的布尔变量 **isRenderInit** 置为 false
```java
/**
* 使用其中一个
*/
HTEffect.shareInstance().releaseTextureOESRenderer();
HTEffect.shareInstance().releaseTextureRenderer();
HTEffect.shareInstance().releaseBufferRenderer();
/*
* 将 bool 置为 false
*/
isRenderInit = false;
```
### **Windows**
#### **1. 前提条件**
- 建议使用VS2019及以上版本
- license、HTEffectBundle、ThirdParty,请联系商务获取
#### **2. 安装**
**示例Demo**
- **HTEffectDemo** 相关文件分别放在ThirdParty和HTEffectBundle文件夹中
- **目标文件名**需更改为和商务备案的名称
**文件组成**
- **HTEffectBundle** 资源包
- **HTEffectSDK**
- include
- lib
- win64
- HTEffect.lib
- HTEffect.dll
- ncnn.dll
- TNN.dll
- MNN.dll
- glad.c OpenGL文件依赖文件
- gl3w.c OpenGL文件依赖文件
**其它**
- opencv
#### **3. 接口**
- 接口说明,也可以参考头文件
```c++
/**
* 美肤类型枚举
*/
enum HTE_W_BeautyTypes {
HTE_W_BeautySkinWhitening = 0, //!< 美白,0~100,0为无效果
HTE_W_BeautyClearSmoothing = 1, //!< 精细磨皮,0~100,0为无效果
HTE_W_BeautySkinRosiness = 2, //!< 红润,0~100,0为无效果
HTE_W_BeautyImageSharpness = 3, //!< 清晰,0~100,0为无效果
HTE_W_BeautyImageBrightness = 4, //!< 亮度,-50~50,0为无效果
HTE_W_BeautyDarkCircleLessening = 5, //!< 去黑眼圈,0~100,0为无效果
HTE_W_BeautyNasolabialLessening = 6 //!< 去法令纹,0~100,0为无效果
};
/**
* 美型类型枚举
*/
enum HTE_W_ReshapeTypes {
//! 眼睛
HTE_W_HTReshapeEyeEnlarging = 10, //!< 大眼,0-100,0为无效果
HTE_W_ReshapeEyeRounding = 11, //!< 圆眼,0-100,0为无效果
HTE_W_ReshapeEyeSpaceTrimming = 12, //!< 眼间距,-50-50, 0为无效果
HTE_W_ReshapeEyeCornerTrimming = 13, //!< 眼睛角度,-50-50, 0为无效果
HTE_W_ReshapeEyeCornerEnlarging = 14, //!< 开眼角,0-100, 0为无效果
//! 脸廓
HTE_W_ReshapeCheekThinning = 20, //!< 瘦脸,0-100,0为无效果
HTE_W_ReshapeCheekVShaping = 21, //!< V脸,0-100,0为无效果
HTE_W_ReshapeCheekNarrowing = 22, //!< 窄脸,0-100,0为无效果
HTE_W_ReshapeCheekboneThinning = 23, //!< 瘦颧骨,0-100,0为无效果
HTE_W_ReshapeJawboneThinning = 24, //!< 瘦下颌骨,0-100,0为无效果
HTE_W_ReshapeTempleEnlarging = 25, //!< 丰太阳穴,0-100,0为无效果
HTE_W_ReshapeHeadLessening = 26, //!< 小头,0-100,0为无效果
HTE_W_ReshapeFaceLessening = 27, //!< 小脸,0-100,0为无效果
HTE_W_ReshapeCheekShortening = 28, //!< 短脸,0-100,0为无效果
//! 鼻部
HTE_W_ReshapeNoseEnlarging = 30, //!< 长鼻
HTE_W_ReshapeNoseThinning = 31, //!< 瘦鼻,0-100,0为无效果
HTE_W_ReshapeNoseApexLessening = 32, //!< 鼻头,0-100,0为无效果
HTE_W_ReshapeNoseRootEnlarging = 33, //!< 山根,0-100,0为无效果
//! 嘴部
HTE_W_ReshapeMouthTrimming = 40, //!< 嘴型,-50-50, 0为无效果
HTE_W_ReshapeMouthSmiling = 41, //!< 微笑嘴角,0-100,0为无效果
//! 其它
HTE_W_ReshapeChinTrimming = 0, //!< 下巴,-50-50, 0为无效果
HTE_W_ReshapeForeheadTrimming = 1, //!< 发际线,-50-50, 0为无效果
HTE_W_ReshapePhiltrumTrimming = 2 //!< 缩人中,-50-50, 0为无效果
};
/**
* 美发类型枚举
*/
enum HTE_W_HairTypes {
HTE_W_HairTypeNone = 0, //!< 无美发效果
HTE_W_HairType1 = 1, //!< 美发类型1,HTEffect UI显示名称为"神秘紫"
HTE_W_HairType2 = 2, //!< 美发类型2,HTEffect UI显示名称为"巧克力"
HTE_W_HairType3 = 3, //!< 美发类型3,HTEffect UI显示名称为"青木棕"
HTE_W_HairType4 = 4, //!< 美发类型4,HTEffect UI显示名称为"焦糖棕"
HTE_W_HairType5 = 5, //!< 美发类型5,HTEffect UI显示名称为"落日橘"
HTE_W_HairType6 = 6, //!< 美发类型6,HTEffect UI显示名称为"复古玫瑰"
HTE_W_HairType7 = 7, //!< 美发类型7,HTEffect UI显示名称为"深玫瑰"
HTE_W_HairType8 = 8, //!< 美发类型8,HTEffect UI显示名称为"雾霾香芋"
HTE_W_HairType9 = 9, //!< 美发类型9,HTEffect UI显示名称为"孔雀蓝"
HTE_W_HairType10 = 10, //!< 美发类型10,HTEffect UI显示名称为"雾霾蓝灰"
HTE_W_HairType11 = 11, //!< 美发类型11,HTEffect UI显示名称为"亚麻灰棕"
HTE_W_HairType12 = 12 //!< 美发类型12,HTEffect UI显示名称为"亚麻浅灰"
};
/**
* 滤镜类型枚举
*
* 滤镜类型分为风格滤镜,特效滤镜,哈哈镜
*/
enum HTE_W_FilterTypes {
HTE_W_FilterBeauty = 0, //!< 风格滤镜
HTE_W_FilterEffect = 1, //!< 特效滤镜
HTE_W_FilterFunny = 2 //!< 哈哈镜
};
/**
* AR道具类型枚举
*
* AR道具类型目前支持2D贴纸,面具,礼物,水印
*/
enum HTE_W_ARItemTypes {
HTE_W_ItemSticker = 0, //!< 2D贴纸
HTE_W_ItemMask = 1, //!< 面具
HTE_W_ItemGift = 2, //!< 礼物
HTE_W_ItemWatermark = 3 //!< 水印
};
/**
* 推荐妆容推荐类型枚举
* 3.0版本后,将风格推荐效果改为妆容推荐;
*
* 在调用妆容推荐设置接口时,设置类型
*/
enum HTE_W_StyleTypes {
HTE_W_StyleTypeNone = 0, //!< 无,HTEffect UI显示名称为"无"
HTE_W_StyleTypeOne = 1, //!< 妆容一,HTEffect UI显示名称为"清纯白花"
HTE_W_StyleTypeTwo = 2, //!< 妆容二,HTEffect UI显示名称为"狐系美人"
HTE_W_StyleTypeThree = 3, //!< 妆容三,HTEffect UI显示名称为"清甜妆"
HTE_W_StyleTypeFour = 4, //!< 妆容四,HTEffect UI显示名称为"白露"
HTE_W_StyleTypeFive = 5, //!< 妆容五,HTEffect UI显示名称为"冷调"
HTE_W_StyleTypeSix = 6, //!< 妆容六,HTEffect UI显示名称为"元气少女"
HTE_W_StyleTypeSeven = 7, //!< 妆容七,HTEffect UI显示名称为"女团"
HTE_W_StyleTypeEight = 8 //!< 妆容八,HTEffect UI显示名称为"纯欲妆"
};
/**
* 美妆类型枚举
*
* 美妆类型分为口红、眉毛,腮红、眼影、眼线、睫毛、美瞳
*/
enum HTE_W_MakeupTypes {
HTE_W_MakeupLipstick = 0, //!< 口红
HTE_W_MakeupEyebrow = 1, //!< 眉毛
HTE_W_MakeupBlush = 2, //!< 腮红
HTE_W_MakeupEyeshadow = 3, //!< 眼影
HTE_W_MakeupEyeline = 4, //!< 眼线
HTE_W_MakeupEyelash = 5, //!< 睫毛
HTE_W_MakeupPupils = 6 //!< 美瞳
};
/**
* 美体类型枚举
*
* 美体类型分为长腿、瘦身
*/
enum HTE_W_BodyBeautyTypes {
HTE_W_BodyBeautyLegSlimming = 0, //!< 长腿
HTE_W_BodyBeautyBodyThinning = 1 //!< 瘦身
};
/**
* 视频帧格式
*
* 支持对RGB、RGBA、BGR、BGRA、NV12、NV21、I420格式的视频帧进行渲染
*/
enum HTE_W_FormatEnum {
HTE_W_FormatRGB = 0, //!< RGB
HTE_W_FormatRGBA = 1, //!< RGBA
HTE_W_FormatBGR = 2, //!< BGR
HTE_W_FormatBGRA = 3, //!< BGRA
HTE_W_FormatNV12 = 4, //!< NV12
HTE_W_FormatNV21 = 5, //!< NV21
HTE_W_FormatI420 = 6 //!< I420
};
/**
* 视频帧朝向
*
*/
enum HTE_W_RotationEnum {
HTE_W_RotationClockwise0 = 0,
HTE_W_RotationClockwise90 = 90,
HTE_W_RotationClockwise180 = 180,
HTE_W_RotationClockwise270 = 270
};
/**
* authorizeSDK 鉴权接口,用于初始化SDK
*
* @param license 证书文本
* @param resDir 资源路径
*
* @return 鉴权返回值,@see InitCode 说明
* 2 - 初始化成功,测试证书
* 1 - 初始化成功,正式证书
* 0 - 未初始化
* -1 - 无效证书
* -2 - 无效包名
* -3 - 无效应用名
* -4 - 过期证书
* -5 - 无效路径
* -6 - 无效模型
*/
int authorizeSDK(const char* license, std::string resDir);
/**
* setRenderEnable 渲染开关
*
* @param enable 开关
*/
void setRenderEnable(bool enable);
/**
* initTextureRenderer 初始化纹理渲染,PC端暂未开放
*
* @param width 纹理宽度
* @param height 纹理高度
* @param rotation 纹理朝向(即顺时针旋转至朝向为正的角度)
* @param isMirror 纹理是否有镜像
* @param maxFaces 最大检测人脸数量(影响性能,区间为[1, 5])
*
* @return 初始化结果
*/
bool initTextureRenderer(int width, int height, int rotation, bool isMirror, int maxFaces);
/**
* processTexture 纹理渲染接口,PC端暂未开放
*
* @param textureId 纹理ID
*
* @return 渲染后的纹理ID
*/
int processTexture(int textureId);
/**
* releaseTextureRenderer 释放纹理渲染资源
*/
void releaseTextureRenderer();
/**
* initBufferRenderer 初始化视频帧渲染
*
* @param format 视频帧格式
* @param width 视频帧宽度
* @param height 视频帧高度
* @param rotation 视频帧朝向(即顺时针旋转至朝向为正的角度)
* @param isMirror 视频帧是否有镜像
* @param maxFaces 最大检测人脸数量(影响性能,区间为[1, 5])
*
* @return 初始化结果
*/
bool initBufferRenderer(int format, int width, int height, int rotation, bool isMirror, int maxFaces);
/**
* processBuffer 视频帧渲染接口
*
* @param buffer 视频帧数据
*
*/
void processBuffer(unsigned char* buffer);
/**
* releaseBufferRenderer 释放视频帧渲染资源
*/
void releaseBufferRenderer();
/**
* initImageRenderer 初始化图片渲染
*
* @param format 图片格式
* @param width 图片宽度
* @param height 图片高度
* @param rotation 图片朝向(即顺时针旋转至朝向为正的角度)
* @param isMirror 图片是否有镜像
* @param maxFaces 最大检测人脸数量(影响性能,区间为[1, 5])
*
* @return 初始化结果
*/
bool initImageRenderer(int format, int width, int height, int rotation, bool isMirror, int maxFaces);
/**
* processImage 图片渲染接口
*
* @param buffer 图片数据
*
*/
void processImage(unsigned char* buffer);
/**
* releaseImageRenderer 释放图片渲染资源
*/
void releaseImageRenderer();
/**
* setBeauty 设置美肤
*
* @param type 特效类别,@see HTE_W_BeautyTypes
* @param value 特效参数
*/
void setBeauty(int type, int value);
/**
* setReshape 设置美型
*
* @param type 特效类别,@see HTE_W_ReshapeTypes
* @param value 特效参数
*/
void setReshape(int type, int value);
/**
* setHairStyling 设置美发
*
* @param type 特效类别,@see HTE_W_HairTypes
* @param value 特效参数
*/
void setHairStyling(int type, int value);
/**
* setFilter 设置滤镜
*
* @param type 滤镜类别,@see HTE_W_FilterTypes
* @param name 滤镜名称
*/
void setFilter(int type, std::string name);
/**
* setStyle 设置妆容推荐
*
* @param style 风格类别,@see HTE_W_StyleTypes
*/
void setStyle(int style);
/**
* setARItem 设置AR道具
*
* @param type 道具类别, @see HTE_W_ARItemTypes
* @param name 道具名称
*/
void setARItem(int type, std::string name);
/**
* setWatermarkParam 设置AR道具-水印参数,v2.0后启用
* 水印参数为水印图像在手机屏幕中相对视频帧的四个顶点的坐标值,配合外部操作框获取
*
* @param x1 左上角横坐标值
* @param y1 左上角纵坐标值
* @param x2 左下角横坐标值
* @param y2 左下角纵坐标值
* @param x3 右下角横坐标值
* @param y3 右下角纵坐标值
* @param x4 右下角横坐标值
* @param y4 右下角纵坐标值
*/
void setWatermarkParam(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4);
/**
* setAISegmentation 设置AI抠图
*
* @param name AI抠图效果名称,如果传null或者空字符,则取消人像抠图效果
*/
void setAISegmentation(std::string name);
/**
* setChromaKeyingScene 设置色(键)值抠图特效场景
*
* @param name 场景名称
*/
void setChromaKeyingScene(std::string name);
/**
* setChromaKeyingCurtain 设置色(键)值抠图特效幕布颜色
*
* @param color 幕布颜色,传字符串类型16进制色值
* 目前仅支持绿幕 (#00ff00) 蓝幕(#0000ff) 白幕(#ffffff)三种幕布颜色和透明幕布,默认为绿幕
*/
void setChromaKeyingCurtain(std::string color);
/**
* setChromaKeyingParams 设置色(键)值抠图特效调节参数
*
* @param type 参数类型,0-相似度;1-平滑度;2-祛色度;3-精确度
* @param value 调节参数,参数范围0-100
*/
void setChromaKeyingParams(int type, int value);
/**
* setGesture 设置手势识别特效
*
* @param name 手势识别效果名称,如果传null或者空字符,则取消手势识别效果
*/
void setGesture(std::string name);
/**
* setMakeup 设置美妆特效
*
* @param type 美妆类别,@see HTE_W_MakeupTypes
* @param name 美妆名称
* @param value 美妆参数
*/
void setMakeup(int type, std::string name, int value);
/**
* setBodyBeauty 设置美体特效
*
* @param type 美体类别,@see HTE_W_BodyBeautyTypes
* @param value 美体名称
*/
void setBodyBeauty(int type, int value);
/**
* isTracking 判断是否检测到人脸
*
* @return 检测到的人脸个数,返回 0 代表没有检测到人脸
*/
int isTracking();
/**
* setExtremeLimitEnable 设置参数极值限制开关,默认为开
*/
void setExtremeLimitEnable(bool enable);
/**
* getVersionString 获取当前 SDK 版本信息
*
* @return 版本信息
*/
std::string getVersionString();
```
#### **4. 使用**
**初始化**
- 调用初始化接口
```c++
/**
* 离线鉴权初始化方法
*/
int initStatus = HTE::authorizeSDK(hte_license_str.c_str(), ".\\..\\HTEffectBundle");
LOG_I("HTEffect init status: %d", initStatus);
```
**渲染**
- 在视频帧回调里调用渲染接口
```c++
/**
* 视频帧
*/
// 初始化渲染器
if (!isInitHTEffect) {
isInitHTEffect = HTE::initBufferRenderer(3, frame.cols, frame.rows, 0, false, 5);
}
// 渲染特效设置
HTE::setBeauty(0, 100); //! 美白
HTE::setARItem(0, "ht_sticker_effect_angel"); //!动态贴纸
// 其它渲染效果设置
// 渲染
HTE::processBuffer(frame.data);
```
**销毁**
- 结束渲染时,需根据视频格式,调用对应的释放方法
```c++
HTE::releaseBufferRenderer();
```
----
## **示例代码**
> [Demo下载](.\HTEffect_PC)
----
## **联系与反馈**
虹图AI开放平台是基于虹图自研的AI能力,打造的围绕音视频等应用场景的AI技术开放平台。提供人像人体特效、人体行为分析、内容审核、人脸实名认证、图像特效等视觉AI技术,加速AI为中小企业业务赋能。自成立至2022年底,虹图已经累计赋能直播、社交、教育、游戏电竞、IoT、XR、元宇宙等10余个行业赛道,服务平台近1500家,终端使用数量超过1.2亿台。
虹图探索了AI结合场景和生态的方法,围绕“AI产品+场景+生态合作“的方案模式,以音视频应用为切入场景,打造服务音视频应用全生命周期的AI产品矩阵,加以组合生态合作伙伴产品,实现平台的“开放”意义,为用户的业务需求提供整体解决方案,与用户实现价值共生。
### 1. 官网地址: [www.texeljoy.com](https://www.texeljoy.com)
### 2. 商务合作: 400-178-9918
### 3. 邮箱地址: business@texeljoy.com
### 4. 公众号: