本文主要介绍iOS使用百度AI人脸检测实现简单的人脸年龄和性别检测。

效果图

在这里插入图片描述

首先在平台里注册账号

注册app后拥有API Key和Secret Key

获取Access Token

请求URL数据格式
向授权服务地址https://aip.baidubce.com/oauth/2.0/token发送请求(推荐使用POST),并在URL中带上以下参数:
grant_type: 必须参数,固定为client_credentials;
client_id: 必须参数,应用的API Key;
client_secret: 必须参数,应用的Secret Key;
例如:
https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHlA4Fq5

利用AFNetworking库中POST请求:

     //设API Key为123
     //设Secret Key为456
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    [manager POST:@"https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=123&client_secret=456" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        AccessModel *accessModel = [[AccessModel alloc] initWithDictionary:responseObject error:nil];
        successBlock(accessModel);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
    }];

服务器返回的JSON文本参数如下:
access_token: 要获取的Access Token;
expires_in: Access Token的有效期(秒为单位,一般为1个月);
其他参数忽略,暂时不用;

故需要将Access Token取出再将值传给Manager

申请到Access Token后才可以进行人脸数据请求

注意事项:
请求体格式化:Content-Type为application/json,通过json格式化请求体。
Base64编码:请求的图片需经过Base64编码,图片的base64编码指将图片数据编码成一串字符串,使用该字符串代替图像地址。您可以首先得到图片的二进制,然后用Base64格式编码即可。需要注意的是,图片的base64编码是不包含图片头的,如data:image/jpg;base64,
图片格式:现支持PNG、JPG、JPEG、BMP,不支持GIF图片

    UIImage *image = [UIImage imageNamed:@"mmm.jpg"];
    NSData *data = UIImageJPEGRepresentation(image, 1.0f);
    NSString *imageBase64 = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
    NSString *imageStr = [imageBase64 mutableCopy];
    
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //我这里实现了年龄,表情,性别的功能,若还想实现其他功能在 @"face_field"的值里添加即可
    NSDictionary *paramDict = @{@"access_token":self.access, @"Content-Type":@"application/json",@"image":imageStr, @"image_type":@"BASE64", @"face_field": @"age,gender,expression"};
    [manager POST:@"https://aip.baidubce.com/rest/2.0/face/v3/detect" parameters:paramDict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        ImageModel *imageModel = [[ImageModel alloc] initWithDictionary:responseObject error:nil];
        successBlock(imageModel);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"error == %@", error);
    }];

GitHub地址

人脸识别

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐