A: 鉴权需要使用配对的密钥传入SDK以激活使用, 并且SDK会检查使用者的包名, 如果包名不是合约允许的名字, 则会抛出异常.
A: demo里面内置了一部分资源(占空间较小), 这部分素材不依赖具体的特效, 主要是默认的美颜美妆等在使用, 方便用户离线启动。 如果客户认为有必要做在线下发, 这也是支持的, 只需要下载至任意可访问目录, 然后将目录传入即可。除此之外iOS端部分AI算法所需的ycnn_metal.bundle
也作为内置资源存在。这个bundle务必放在app根目录。否则有些算法可能会报Metal相关错误。
A:
1.首先, 素材资源较大, 直接打进apk包安装时间较长, 不利于安装和传播
2.其次, 客户必然会自行开发素材更新下载的逻辑, 以此共客户参考. 最终素材的交付方式以合约为准。
A: 此类问题一般主要是集中在传入的YUV数据格式上。可以从如下几个方向查询:
A: SDK功能主要集中在渲染和AI算法两类
1.按照文档接入SDK后如果能够看到跟输入图一致的画面基本可以确定数据交换没有问题了,此时可以通过跑一个简单的滤镜来验证渲染流程是否调通。例如在在resource
目录放了一个测试用例文件夹叫test_case
。里面有一张滤镜图叫 lut.png
。可以跑一下这个滤镜。
实例化完SDK后iOS调用如下方法开启滤镜特效并且设定该滤镜
MELookupInfo info;
info.dimension = 8;
info.intensity = 1.0;
strcpy(info.path, lutPath.UTF8String);
info.type = MELookupType_NxN;
[magicEngine setEffectEnabledWidthEffectType:MEEffectType_Lookup enable:YES];
[magicEngine setLookupInfo:info];
安卓调用如下方法开启滤镜特效并且设定该滤镜
magicEngine.setEffectEnabled(MagicEngineDefines.EffectType.Lookup, true);
MagicEngineDefines.LookupInfo lookupInfo = new MagicEngineDefines.LookupInfo();
lookupInfo.path = "/path/to/lut.png";
lookupInfo.dimension = 8;
lookupInfo.intensity = 1.0f;
lookupInfo.lutType = MagicEngineDefines.LookupTableType.NxN;
magicEngine.setLookupInfo(lookupInfo);
如果能够看到一个红色滤镜画面说明渲染流程是正常的。
2.通过第一步跑通滤镜后,接下来可以验证一下算法和素材逻辑是否正常。在resource/test_case
中放了一个素材交landmark
。是一个显示人脸关键点的素材。这个素材依赖人脸关键点AI模型。
iOS通过下面的方法,先确保关键点模型路径已经被设定后再设定次素材。
//模型相关描述参考文档: 4.3模型配置
[magicEngine setModelPathDic:@{ @"magic_ycnn_model_landmark" : @"path/to/landmark/model" }];
[magicEngine setMagicEffectWithPath:@"path/to/resource/landmark"];
安卓通过下面的方法,先确保关键点模型路径已经被设定后再设定次素材。
//模型相关描述参考文档: 4.3模型配置
Map<String, String> modelMap = new HashMap<String, String>();
modelMap.put("magic_ycnn_model_landmark", "path/to/landmark/model");
magicEngine.setModelPathMap(modelMap);
此时能够看到人脸关键点说明AI算法也是正常的。剩下的主要是补充业务自己的业务逻辑了。
3.通过第二步验证后,如果有对接特效的需求,会提供对应的特效素材包,素材包里面会有一个ai_models.txt
文件,里面会有说明给出的每一个素材需要依赖的AI模型。如果在使用这些素材的时候,需要保证每个素材依赖的模型路径已被设定,并且模型存在,要不然素材显示的实际效果会与设计的效果有一些差异。
//AI所有的模型的素材都是在sdk的包里面,具体位置参考4.3模型配置
特效素材出于设计上的互斥原则,是不允许同时加载两个魔表的,但是由于魔表的不同的设计情况,某些魔表可以叠加美颜/美妆/美体
具体特效可以叠加的其他的美颜素材,可以参考5.2
A: MEEgnineConfig中的宽高是必填项,并且务必得是大于0,如果业务刚开始不确定渲染尺寸可以设小一点,例如宽高都设为64x64 。然后真正开始传数据时MEFrameData中也有宽高。主要确保这里的宽高是对的就好,SDK内部会做resize确保不会出问题。
A: iOS端部分AI算法会用metal来做推理,需要把资源目录下的ycnn_metal.bundle
放在APP根目录,否则可能会出现相关问题。如果加了之后还出现metal相关问题可以联系开发同学。
A: 往SDK设YUV数据时需要把对应buffer设给FrameData中data成员中。但由于需要在SDK native层放文档对应的数据这个buffer必须得是DirectBuffer。否则访问到的数据可能会是错误的所以出现乱码。如果不是DirtectBuffer可能会崩溃也有可能会是直接乱码。
A: 首先需要确定文件是否存在,然后还需确定一下release包是不是做了混淆。需要按文档 2. 工程配置
做一下防混淆。
A: 需要确保一下FrameData中的fov是否传对,如果没传3D头套可能会出现没效果的问题。
A: 确保是否已经在 target->Build Settings 的 Other Linker Flags 中添加了 $(inherited),-ObjC, -l"c++"。否则可能会报这个错误。
processWithTexture:
接口时返回的纹理是透明或者花屏可能会是什么原因?A: 该接口的输入必须是TEXTURE_2D
,如果外面传入的是GL_TEXTURE_EXTERNAL_OES
可能会出现这个问题。需要外面把OES纹理渲染到Texture 2D再传进来。