iOS离线检测器

简介

本文简单说明Face++ iOS人脸检测器的使用方法,如有更多疑问,欢迎到Face++开发者论坛 (http://bbs.faceplusplus.com) 讨论。

注意:Face++提供的人脸检测器无法在模拟器中使用,仅能在设备上(armv6/armv7)上运行。

相关文件

请到“开发者中心”-->“我的应用”-->任选一个应用,点击“管理”,再点击“应用描述”-->“离线SDK”-->“IOS离线检测器下载”,解压。

解压后相关文件如下:

  • FaceppLocalDetectorSDK\FaceppDetection+LocalResultUploader.h: 离线检测器与在线API协同的类方法定义
  • FaceppLocalDetectorSDK\FaceppLocalDetector.h: 离线检测器头文件

  • FaceppLocalDetectorSDK\libFaceppLocalDetector.a: 离线检测器二进制库

  • FaceppSDK: Face++ 在线API SDK

使用流程

本节内容简单介绍如何使用Face++ iOS离线检测器。

1. 在Xcode中建立一个iOS工程。

2. 将离线SDK三个文件 以及 Face++ iOS SDK加入到工程中,如下图所示:

1

此时,应该可以在工程的Build Phases中看到libFaceppLocalDetector.a文件。

2

3.修改Building Setting中的C++语言编译器,修改为默认编译器。如下图所示:

3

4. 由于Face++的库使用C++编写,因此将任何引用到Face++离线检测相关函数的.m代码后缀名都改为.mm(否则会出现编译错误),包括项目自动生成的AppDelegate.m和main.m。如下图所示:

4

5. 接着,在程序中新建一个FaceppLocalDetector类即可。注意,类初始化时需要使用到对应的API_Key, 这个API_Key必须与下载离线检测器的App对应的API_Key一致才可以正确调用这个库。下面是一个调用示例:

  1. 初始化:

    NSDictionary *options = [NSDictionary dictionaryWithObjects:[
            NSArray arrayWithObjects:[NSNumber numberWithBool:YES],
            [NSNumber numberWithInt:20],
            FaceppDetectorAccuracyHigh, nil]
        forKeys:[
            NSArray arrayWithObjects:FaceppDetectorTracking,
            FaceppDetectorMinFaceSize,
            FaceppDetectorAccuracy, nil]];
    
    FaceppLocalDetector *detector = [
        FaceppLocalDetector detectorOfOptions: options andAPIKey:@"xx"];
    
  1. 检测,并获取检测结果:

    FaceppLocalResult *result = [
        detector detectWithImage:[UIImage imageNamed:@"2007011321.jpg"]];
    NSLog(@"count = %d", result.faces.count);
    for (size_t i=0; i < result.faces.count; i++) {
        FaceppLocalFace *face = [result.faces objectAtIndex:i];
        NSLog(@"    rect = %@, trackingId = %d",
              NSStringFromCGRect(face.bounds),
              face.trackingID);
    }
    

6. 离线检测器与线上API的协同功能:如果需要用到线上API的更多功能,可以将本地的检测结果直接上传(从而节省传输的数据量,仅会上传脸部图像)。使用离线SDK中为FaceppDetection类添加的新方法,可将离线结果直接同步至线上,并获取face_id进行后续操作,如下所示:

// Test Sync Local Result to Server
[FaceppAPI initWithApiKey:@"YOUR_API_KEY" andApiSecret:@"YOUR_API_SECRET"
    andRegion:APIServerRegionCN];
[FaceppAPI setDebugMode:YES];
[[FaceppAPI detection] uploadLocalResult:result
    attribute:FaceppDetectionAttributeAge|FaceppDetectionAttributeGlass
    tag:@""];