IOS Demo2.0 接入、运行
1. demo 下载
下载地址:
官网:https://ai.arcsoft.com.cn/bbs/forum.php?mod=viewthread&tid=1566&extra=page%3D1
gitHub:
所有demo下载目录:https://github.com/ArcsoftEscErd
IOS下载目录:https://github.com/ArcsoftEscErd/ArcfaceDemo_IOS
2. demo 接入指南
快速上手
1、从官网申请sdk:http://www.arcsoft.com.cn/ai/arcface.html,下载iOS2.0版本SDK;
2、打开xcode,将解压好的SDK中的ArcSoftFaceEngine.framework文件导入进示例Demo中,如下图所示:
3、由于SDK采用了Objective-C++实现,需要保证工程中至少有一个.mm 后缀的源文件(可以将任意一个.m后缀的文件改名为.mm);
4、需要在Demo中引入系统库:libstdc++.6.0.9.tbd,xcode10.0及以上版本没有该文件,需要从xcode9.0版本的libstdc++.6.0.9.tbd复制过来,引入到Demo中,如下图所示:
5、修改Demo中的Info.plist文件,新增一个属性App Transport Security Settings,在该属性下添加Allow Arbitrary Loads类型Boolean,值设为YES;
6、上述配置修改好之后,将Demo中ViewController.mm文件中的appid、sdkkey替换为从官网申请的APP_ID、SDK_KEY;
7、运行程序。
问题指南
1、详细接入指南可见官网:http://ai.arcsoft.com.cn/manual/arcface_android_guideV2.html
2、常见问题可见SDK中的doc文档ARCSOFT_ARC_FACE_DEVELOPER'S_GUIDE.pdf,或官网帮助与支持
3. 关于demo 2.0 运行的各种坑以及解决办法
(1)导入SDK 、libstdc++.6.0.9.tbd编译出现:
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解决方法: 1.这个错误一般是由于 libstdc++.6.0.9.tbd 库不起作用引起的,需要引入正确的库; 亲测可用 libstdc++.6.0.9.tbd 库下载地址:https://www.jianshu.com/p/3b9731b84e87 2.ios 10以上的需要引入 libc++.tbd库
(2)viewcontroller 编译通不过,出现如下错误
解决方法: 1. 由object-c、c++混编引起的, 在General -> Build Settings -> 在Other Linker Flags 添加 -ObjC标记;
2. 因为demo使用了其他的库,并没有加载到项目里面,尝试把库加进来。 用到的第三方库如下:
(4)相册访问报权限错误,原demo的相册权限是错的
1.原demo里面info.list 标注的是 Privacy -Photo Library Additions Usage Description, 正确的是: Privacy - Photo Library Usage Description 2.info.list 需要加入 App Transport Security Settings Allow Arbitrary Loads YES
(5) 配置官网注册后生成的 APP_ID、SDK_Key,不然会报 90115
(6)静态图片人脸对比算法调用坑:
使用的场景:选择2张照片对比,获取相似度; SDK算法调用思路:
1.照片人脸检测;
2.提前人脸特征;
3.人脸特征对比,获取相似度;
在从2-3步骤中,方法3中的 copyFeature1、feature2参数是:LPASF_FaceFeature类型的, 如果这两个参数均使用ASF_FaceFeature类型传入,则相似度对比始终为1.00;
因此需要在在调用方法3前, 要把ASF_FaceFeature类型转换为LPASF_FaceFeature类型;
转换方法如下:
LPASF_FaceFeature copyFeature1 =
(LPASF_FaceFeature)malloc(sizeof(ASF_FaceFeature));
copyFeature1->featureSize = feature1.featureSize;
copyFeature1->feature = (MByte*)malloc(feature1.featureSize);
memcpy(copyFeature1->feature,
feature1.feature,
copyFeature1->featureSize);
最后,真机Demo运行效果图: