共计 7598 个字符,预计需要花费 19 分钟才能阅读完成。
概述
即构虚构形象引擎(Zego Avatar)反对自定义治理人物的虚构形象,通过默认的虚构形象或者自定义生成的专有虚构形象,以表情随动、声音驱动等形式与真人实时互动,可广泛应用于语聊直播、社交互动、在线培训等多种场景中。
集成 SDK
筹备环境
在开始集成 ZegoAvatar SDK 前,请确保开发环境满足以下要求:
- Android Studio 2.1 或以上版本。
- Android SDK 25、Android SDK Build-Tools 25.0.2、Android SDK Platform-Tools 25.x.x 或以上版本。
- Android 5.1 或以上版本,且反对音视频的 Android 真机设备。
- 设施的前置摄像头和麦克风性能失常。
集成 SDK
1(可选)新建我的项目
此步骤以如何创立新我的项目为例,如果是集成到已有我的项目,可疏忽此步。
2 导入 SDK
目前反对的平台架构包含:armeabi-v7a、arm64-v8a。
- 请返回下载页面,获取最新版本的 SDK。
- 解压 SDK 压缩包,将 ZegoAvatar 的制品包中的
ZegoAvatar.aar
拷贝至本人的我的项目目录下,如“app/libs”。
3. 增加 SDK 援用。进入到“app”目录,关上“build.gradle”文件,在“dependencies”节点引入“libs”下所有的 jar。
implementation fileTree(dir: 'libs', include: ['*.jar', "*.aar"]) // 通配引入
3 设置权限
依据理论利用须要,设置利用所需权限。
进入“app/src/main”目录,关上“AndroidManifest.xml”文件,增加权限。
<!-- SDK 必须应用的权限 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- App 须要应用的局部权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
因为 Android 6.0 在一些比拟重要的权限上要求必须申请动静权限,不能只通过“AndroidMainfest.xml”文件申请动态权限。因而还须要参考执行如下代码,其中“requestPermissions”是“Activity”的办法。
String[] permissionNeeded = {"android.permission.CAMERA"};
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {if (ContextCompat.checkSelfPermission(this, "android.permission.CAMERA") != PackageManager.PERMISSION_GRANTED) {requestPermissions(permissionNeeded, 101);
}
}
必要性 | 权限 | 权限阐明 | 申请起因 |
---|---|---|---|
必要权限 | CAMERA | 拜访相机权限。 | 通过摄像头画面推理面部表情时,须要应用该权限。 |
RECORD_AUDIO | 录制音频权限。 | 通过声音稳定推理面部表情时,须要应用该权限。 | |
WRITE\_EXTERNAL\_STORAGE | 内置 SDK 写权限。 | SDK 会将日志和相干配置文件保留在内置 SDK 内。须要保留截图或录制的视频时,也须要应用该权限。 | |
非必要权限 | INTERNET | 拜访网络权限。 | SDK 鉴权获取时,须要应用该权限。 |
READ\_EXTERNAL\_STORAGE | 文件读取权限。 | SDK 须要读取资源包时,须要应用该权限。 |
4 避免混同代码
在“proguard-rules.pro”文件中,为 SDK 增加 -keep
类的配置,避免混同 SDK 公共类名称。
-keep class **.zego.**{*;}
导入资源
应用 Avatar 提供的各项 AI 能力之前,须要导入相应的资源包,请返回下载页面,获取下列资源包。
开发者能够通过 动静下载
或从本地增加
两种形式,导入资源包。
(举荐)动静下载
资源名称 | 阐明 | 资源大小 | 是否反对 动静下载 |
倡议下载机会 |
---|---|---|---|---|
AIModel.bundle | Avatar 的 AI 模型资源。当应用表情随动、声音随动、AI 捏脸等能力时,必须先将该资源的绝对路径设置给 Avatar SDK。 | <ul> <li> 表情随动:8.2 MB</li> <li> 声音随动:2.4 MB</li> <li>AI 捏脸:12.4 MB</li> </ul> |
是 | 必须 在 ZegoAvatarService 初始化前实现下载。 |
base.bundle | 美术资源,蕴含根底 3D 人物模型资源、资源映射表、人物模型默认形状等。 | <ul> <li>Android: 13 MB</li> <li>iOS: 14.4 MB</li> </ul> |
是 | 必须 在创立 ZegoCharacterHelper 前实现下载。 |
Packages | 美妆、挂件、装璜等资源。 | 每个资源 200 KB ~ 1 MB 不等,跟资源复杂度相干。 | 是 | 倡议在须要应用相干资源时再去下载,不应用时可不下载,缩小对本地存储空间的占用。 |
<div class=”mk-hint”>
Packages 中蕴含了局部美术资源,开发者如有须要,请分割 ZEGO 商务人员
,获取所有的美术资源。
</div>
从本地增加
- 请返回下载页面,获取相干的资源包。
- 解压获取到的资源包,找到“assets”文件夹,拷贝到本人创立我的项目的“assets”文件夹下。
-
运行我的项目时,将“AIModel.bundle”、“base.bundle”、”Packages” 文件,通过以下代码,拷贝到设施的公有目录(/data/data/ 包名 /files)下。(留神:Android 零碎的 assets 文件夹只能读取。)
AssetsFileTransfer.copyAssetsDir2Phone(this.getApplication(), "AIModel.bundle"/*apk 里的 assets 根目录 */, "assets"/* sd 卡里的目录, 值为:getFilesDir().getAbsolutePath() + File.separator + destPath */); AssetsFileTransfer.copyAssetsDir2Phone(this.getApplication(), "base.bundle", "assets"); AssetsFileTransfer.copyAssetsDir2Phone(this.getApplication(), "Packages", "assets");
/** * 把 assets/${filePath}目录中的所有内容拷贝到 手机的 Storage 的 ${destPath}/ 目录中 * * @param activity activity 应用 CopyFiles 类的 Activity * @param filePath String 绝对于 Android APK 内的 assets 目录的文件门路, 如:AIModel.bundle * @param destPath String 拷贝的指标,如:/data/data/ 包名 /files/assets/ */ public static void copyAssetsDir2Phone(Context activity, String filePath, String destPath) { try {String[] fileList = activity.getAssets().list(filePath); if (fileList.length > 0) {// 如果是目录 File file = new File(activity.getFilesDir().getAbsolutePath() + File.separator + destPath + File.separator + filePath); if (file.exists()) {deleteAllFiles(file); } file.mkdirs();// 如果文件夹不存在,则递归 for (String fileName : fileList) { filePath = filePath + File.separator + fileName; copyAssetsDir2Phone(activity, filePath, destPath); filePath = filePath.substring(0, filePath.lastIndexOf(File.separator)); Log.i(TAG, filePath); } } else {// 如果是文件 InputStream inputStream = activity.getAssets().open(filePath); File file = new File(activity.getFilesDir().getAbsolutePath() + File.separator + destPath + File.separator + filePath); if (file.exists()) {boolean delete = file.delete(); } if (!file.exists() || file.length() == 0) {FileOutputStream fos = new FileOutputStream(file); int len = -1; byte[] buffer = new byte[1024]; while ((len = inputStream.read(buffer)) != -1) {fos.write(buffer, 0, len); } fos.flush(); inputStream.close(); fos.close();} } } catch (IOException e) {Log.e(TAG, "copy file faild, src:" + filePath + "dest:" + destPath); e.printStackTrace();} }
- 拷贝资源后,在挪动设施上运行时,会存在如下的构造。留神:不同的挪动设施,
getFilesDir().getAbsolutePath()
返回的目录可能不一样。这里以华为手机为例,其返回的是:/data/data/im.zego.zegoavatarexample
。
5. 应用某一性能时,在对应接口中,传入接口要求的资源的 绝对路径
即可。
应用步骤
本节介绍如何应用 ZegoAvatar SDK 实现根本的图像处理性能,API 调用时序如下图:
1 申请鉴权
ZEGO Avatar 目前应用 在线鉴权
的形式获取 License 受权文件。
1.1 开明 ZegoAvatar 权限
- 请先在 ZEGO 控制台创立我的项目,并申请无效的 AppID,详情请参考控制台 – 项目管理中的“我的项目信息”。
- 请分割 ZEGO 商务人员,提供申请到的 AppID,以及本人我的项目的 Bundle Id,获取鉴权须要应用的 AppSign,并开明相干权限。
1.2 获取参考代码
请将从下载获取到的示例源码中的 LicenseHelper 文件夹中的代码,拷贝到本人的我的项目下。
-
批改
ZegoAvatarConfig.h
文件,请应用已获取的 AppID 和 AppSign 正确填写,否则示例源码无奈失常运行。// 鉴权服务器的地址 static NSString *AVATAR_BASE_URL = @"https://aieffects-api.zego.im?Action=DescribeAvatarLicense"; // 向 ZEGO 申请的 AppID, APPID 跟 Bundle Id 有绑定关系,“Bundle Identifier”设置为申请 AppID 时所提供的 Bundle Id static NSUInteger AVATAR_APPID = YOUR_APP_ID; // 向 ZEGO 申请的失去的 AppSign static NSString *AVATAR_APP_SIGN = YOUR_APP_SIGN;
- 在我的项目中,抉择“TARGETS > Signing & Capabilities”菜单,将“Bundle Identifier”设置为申请 AppID 时所提供的 Bundle Id。
1.3 装置依赖库
- 关上终端,进入我的项目根目录,执行
pod 'YTKNetwork'
,引入依赖库。 - 执行
pod install
命令装置依赖库。
1.4 获取 License
通过 ZGAvatarLicenseHelper 中的 requestLicense
接口,发动网络申请,获取鉴权 License 字符串。
// 发动网络申请获取 License
[ZGAvatarLicenseHelper requestLicense:^(NSString * _Nonnull license) {if (license.length > 0) {
// 初始化 avatar Service
[self initAvatarService: license];
}
}];
2 初始化 AvatarService
-
初始化 AvatarService 之前,请先导入以下相干的头文件,筹备根底工作。
// 引入 头文件 #import <ZegoAvatar/ZegoAvatarService.h>
-
导入头文件后,调用
initWithConfi
g 接口,传入之前获取到的鉴权 License 字符串,初始化 AvatarService。// 初始化 AvatarService - (void) initAvatarService: (NSString*) license{ // 创立 config ZegoServiceConfig *config = [[ZegoServiceConfig alloc] init]; // 将获取到的 License 文件传入 config.license = license; // 指定 AI 模型的门路 config.AIPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingString:@"/assets/AIModel.bundle"]; // 监听初始化状态,addServiceObserver 须要在 "主线程" 执行!!![[ZegoAvatarService sharedInstance] addServiceObserver:self]; // 初始化 AvatarService [[ZegoAvatarService sharedInstance] initWithConfig:config]; }
-
注册
onStateChange
回调,接管初始化状态的相干回调告诉。// avatarService 初始化状态回调 - (void)onStateChange:(ZegoAvatarServiceState)state { // SDK 初始化胜利 if (state == ZegoAvatarServiceState_InitSucceed) { // 初始化虚构形象 [self initAvatar]; } }
3 创立虚构形象
在创立虚构人物形象时,为了简化 Character(虚构人物形象)的 初始化、序列化、数据缓存、门路拼接 等性能的接入流程,ZEGO Avatar SDK 提供了ZegoCharacterHelper 类(开源),帮忙开发者疾速创立人物虚构形象,详情请参考 ZegoCharacterHelper 应用阐明。
初始化 AvatarService 后,通过创立 ZegoCharacterHelper
对象,传入虚构人物形象的外观数据(捏脸、换装、妆容等),设置视图参数(宽、高、地位等),创立一个虚构形象。
- (void) initAvatar{
// 创立 Helper,传入根底资源的门路
NSString *resourcePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingString:@"/assets/base.bundle"];
_characterHelper = [[ZegoCharacterHelper alloc] init:resourcePath];
// 设置素材资源包地址,如果是动静下载,则传入下载的目标目录
NSString *packagesPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingString:@"/assets/Packages"];
[_characterHelper setExtendPackagesPath:packagesPath];
// 应用默认形象,以男性角色为例
[_characterHelper setDefaultAvatar:MODEL_ID_MALE];
// 创立 AvatarView
_avatarView = [[ZegoAvatarService sharedInstance] createAvatarView:CGRectMake(0, 0, 200, 200)];
[self.view addSubview:_avatarView];
// 角色上屏
[_characterHelper setCharacterView:_avatarView];
}
获取优惠活动
- 近期有开发布局的开发者可上即构官网查看,恰逢即构七周年全线音视频产品 1 折的优惠,适宜有估算要求的中小型企业和集体开发工作室。
- 七周年福利:提交表单“Avatar”,取得 ”ZEGO Avatar1 个月收费试用 ”。;
- 获取更多商务活动热门产品,也可提交信息分割商务;