# HTEffect_AndroidX_Android
**Repository Path**: htai-open/HTEffect_AndroidX_Android
## Basic Information
- **Project Name**: HTEffect_AndroidX_Android
- **Description**: 虹图人像人体SDK中包含UI的模块,该仓库为AndroidX版本
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: https://www.texeljoy.com
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 1
- **Created**: 2022-09-23
- **Last Updated**: 2024-11-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 美颜SDK, Android, 人像人体特效, 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_APPID" withDelegate:self];
/**
* 离线鉴权初始化方法
*/
// [[HTEffect shareInstance] initHTEffect:@"YOUR_LICENSE"];
```
- (可选) 如果需要使用 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];
```
- 图片
```objective-c
/**
* byte[]
*/
if (!_isRenderInit) {
[[HTEffect shareInstance] releaseImageRenderer];
_isRenderInit = [[HTEffect shareInstance] initImageRenderer:format width:width height:height rotation:rotation isMirror:isMirror maxFaces:maxFaces];
}
[[HTEffect shareInstance] processImage:pixels];
/**
* UIImage
*/
// UIImage *resultImage = [[HTEffect shareInstance] processUIImage:image];
```
**销毁**
- 结束渲染时,需根据对应格式,调用对应的释放方法,通常写在 dealloc 方法里
```objective-c
// 销毁视频帧渲染资源
/**
* texture
*/
[[HTEffect shareInstance] releaseTextureRenderer];
/**
* buffer
*/
// [[HTEffect shareInstance] releaseBufferRenderer];
// 销毁图片渲染资源
/**
* byte[]
*/
// [[HTEffect shareInstance] releaseImageRenderer];
/**
* UIImage
*/
// [[HTEffect shareInstance] releaseUIImageRenderer];
```
### **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_APPID", new InitCallback() {
@Override public void onInitSuccess() {}
@Override public void onInitFailure() {}
});
// 离线鉴权初始化方法
//HTEffect.shareInstance().initHTEffect(context,"YOUR_LICENSE");
```
**添加 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);
```
- 图片:
```java
/**
* byte[] 图片类型
*/
if (!isRenderInit) {
isRenderInit = HTEffect.shareInstance().initImageRenderer(format,width, height,rotation,isMirror,maxFaces);
}
HTEffect.shareInstance().processImage(buffer);
/**
* Bitmap 图片类型
*/
Bitmap newBitmap = HTEffect.shareInstance().processBitmap(bitmap);
```
**销毁**
- 结束渲染时,为防止内存泄漏的发生,需根据视频帧格式的不同,调用对应的 destroy 方法释放掉资源,调用位置通常在 视频帧回调接口 的销毁处,或者是 Activity , Fragment 的生命周期结束处,同时将定义的布尔变量 **isRenderInit** 置为 false
```java
/**
* 使用其中一个
*/
HTEffect.shareInstance().releaseTextureOESRenderer();
HTEffect.shareInstance().releaseTextureRenderer();
HTEffect.shareInstance().releaseBufferRenderer();
/*
* 将 bool 置为 false
*/
isRenderInit = false;
/**
* 销毁图片渲染资源,图片为byte[]类型
*/
HTEffect.shareInstance().releaseImageRenderer();
/**
* 销毁图片渲染资源,图片为Bitmap类型
*/
HTEffect.shareInstance().releaseBitmapRenderer();
```
----
## **示例代码**
> [Demo下载](https://doc.texeljoy.com/document/hummanBody/beauty/quickStart/demo.html)
----
## **最近更新**
- **2024.11.19:** v3.5.2
- 修复皮肤检测的问题
- 优化内部结构,减少内存占用率
- **2024.10.30:** v3.5.1
- 完善Android端Texture转ByteBuffer接口
- 增加Windows端网络鉴权接口
- 更改Windows端本地鉴权接口名称
- 提升Windows端AI抠图算法性能
- **2024.10.22:** v3.5.0
- 更新美妆特效和接口
- 新增带参数的滤镜接口
- 更改妆容推荐的特效和接口
- 剥离3D特效
- 新增更换网络鉴权节点接口
- 新增切换人脸检测算法接口
- 完善日志系统
- 优化人像抠图算法
- 优化美发特效
- 修复一些Bug
- **2024.06.26:** v3.4.0
- 新增一组初始化接口,剥离AI驱动加载方法
- 新增加载/卸载AI驱动的方法
- 更新祛黑眼圈素材
- 新增人脸检测和参数相关的开闭逻辑
- 更换人脸检测模型版本
- 减小包体
- 修复一些Bug
- **2024.06.06:** v3.3.2
- 优化人像分割特效,实现多层级渲染
- **2024.05.30:** v3.3.2-beta
- 修复人脸检测多人脸支持相关Bug
- 增加美颜滤镜强度调节的接口
- **2024.05.24:** v3.3.1
- 日志信息转换为英文(初始化信息除外)
- Windows端人像分割更换推理框架,提升性能
- **2024.04.23:** v3.3.0
- 新增切换人脸检测模型的接口
- 新增通过增加CPU处理核数提升性能的接口
- 新增设置人脸检测距离级别的接口
- 新增Android端预览类自定义画面方向接口
- 解决了一些已知问题
- **2024.03.28:** v3.3.0-beta
- 新增美体特效,包括细腰、美肩、瘦大腿、修胯、天鹅颈、丰胸
- 新增特效滤镜,包括三分屏、碎玻璃、一键乐高
- SDK融入Avatar特效
- 优化人脸关键点跟踪算法
- 优化人体检测模型
- 完善日志系统
- 解决了一些已知问题
- **2024.02.06:** v3.2.1
- 增加设置性能优先模式接口
- 提升内部渲染和算法性能
- **2024.01.29:** v3.2.0
- 增加单张图片渲染处理接口
- 人脸的检测、关键点、追踪性能提升
- 简化算法模型文件结构
- 实现RGB、BGR的格式支持
- 完整实现透明背景图渲染开关接口
- 完善算法模型文件相关日志系统、容错机制、向下兼容逻辑
- **2023.12.28:** v3.1.0
- 优化手势特效底层算法
- 增加对部分透明图片的渲染支持
- 完善日志系统的输出打印
- 解决了一些已知问题
- **2023.11.30:** v3.0.2
- 优化磨皮、清晰算法
- 解决了一些已知问题
- **2023.11.23:** v3.0.1
- 提升美妆贴合度
- 优化美妆眼线拉伸问题
- **2023.11.20:** v3.0.0
- 绿幕抠图增加背景图片本地上传功能
- 美妆、妆容推荐等效果提升
- 美发、人像抠图、手势识别、绿幕抠图等底层算法优化
- 解决了一些已知问题
- **2023.09.27:** v3.0.0-beta
- 新增美妆功能,包含眉毛、腮红、眼影、眼线、睫毛、口红、美瞳等美妆特效
- 新增妆容推荐功能,包含狐系美人、纯欲妆、女团妆等多种热门妆效
- 新增美体功能,包含长腿、瘦身两种特效
- 优化了美发算法,效果更加稳定支持CPU/GPU
- 优化了人像分割算法,边缘更加自然稳定
- 优化了手势识别算法,支持跟手移动效果
- **2023.07.18:** v2.2.0
- 新增4个面具素材
- 解决了一些已知问题
- **2023.06.09:** v2.1.0
- 新增16种高级滤镜
- **2023.06.07:** v2.0.2
- 修复部分机型闪烁的问题
- 优化资源内存空间处理
- **2023.06.01:** v2.0.1
- 修复绿幕默认值问题
- **2023.05.17:** 全新2.0版本
- 新增30多种风格滤镜、特效滤镜、哈哈镜
- 新增美发、面具、礼物及自定义可拖拽水印
- 绿幕抠图新增蓝、白两种幕布颜色和参数调节
- 优化了手势特效和人像分割特效效果
- [更多](https://doc.texeljoy.com/document/hummanBody/beauty/Introduce/function.html)
----
## **联系与反馈**
虹图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. 公众号: