阿里云人脸对比API主要有两种方式,一种是通过url识别对比,一种是通过图片的base64编码进行对比,API接口调用很简单,根据自己的需求传入type和url或者content就行:

但是在调用API之前需要进行签名,API签名包含 公共请求头(HTTP协议header参数)、URL(规范资源)、Body

官方文档对于签名除了以上的简单说明外还给了个签名格式:Authorization: Dataplus AccessKeyId:Signature,对于签名处理直接上代码吧
{
NSString*method =@"POST";
NSString *accept = @"application/json";
NSString*content_type =@"application/json";
NSString*AccessKeyId =@"Your AccessKeyId";
NSString *AccessKeySecret = @"Your AccessKeySecret";
NSString *url = @"https://dtplus-cn-shanghai.data.aliyuncs.com/face/verify";
NSString*path = [[NSURL URLWithString:url]path];
//GTM时间
NSDate*date = [NSDate date];
NSTimeZone *tzGMT = [NSTimeZone timeZoneWithName:@"GMT"];
[NSTimeZone setDefaultTimeZone:tzGMT];
NSDateFormatter *iosDateFormater=[[NSDateFormatter alloc]init];
iosDateFormater.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss 'GMT'";
iosDateFormater.locale=[[NSLocale alloc]initWithLocaleIdentifier:@"en_US"];
NSString*dateGMT = [iosDateFormater stringFromDate:date];
// 开始签名处理
// 对参数进行处理 type为1,content_1和content_2为图片base64编码数据,type为0,image_url_1和image_url_2
// 代码中的data的type为1
// DataTOjsonString是将data转成json字符串
// 获取到json字符串后进行md5加密
NSString*inputString = [self DataTOjsonString:data];
constchar*cStr = [inputString UTF8String];
unsigned char digest[CC_MD5_DIGEST_LENGTH];
CC_MD5( cStr, (CC_LONG)strlen(cStr), digest );
NSData*base64 = [[NSData alloc]initWithBytes:digestlength:CC_MD5_DIGEST_LENGTH];
base64 = [GTMBase64 encodeData:base64];
NSString *md5Body = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding];
// StringToSign
NSString*stringToSign = [NSStringstringWithFormat:@"POST\n%@\n%@\n%@\n%@\n%@", accept, md5Body, content_type, dateGMT, path];
// HMAC-SHA1加密
NSString*signature = [self HmacSha1WithSecret:AccessKeySecretdata:stringToSign];
// Authorization
NSString*authHeader = [NSString stringWithFormat:@"Dataplus %@:%@", AccessKeyId, signature];
// 设置网络请求相关配置
NSURL*nsurl = [NSURLURLWithString:url];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:nsurl];
request.HTTPMethod= method;
[request setValue:@"application/json" forHTTPHeaderField:@"Content-type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:dateGMT forHTTPHeaderField:@"Date"];
[request setValue:authHeaderforHTTPHeaderField:@"Authorization"];
[request setValue:@"keep-alive" forHTTPHeaderField:@"Connection"];
request.HTTPBody = [inputString dataUsingEncoding:NSUTF8StringEncoding];
// 调用阿里云的API
NSURLSession *requestSession = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
dispatch_async(dispatch_get_main_queue(), ^{
// 主线程处理一些等待操作
self.tipLabel.text=@"正在对比请稍后...";
});
NSURLSessionDataTask*task = [requestSessiondataTaskWithRequest:request
completionHandler:^(NSData*_Nullablebody ,NSURLResponse*_Nullableresponse,NSError*_Nullableerror) {
// 请求结果
NSDictionary*responseJSON = [NSJSONSerialization JSONObjectWithData:bodyoptions:NSJSONReadingMutableLeaves error:nil];
NSLog(@" 人脸识别 : %@", responseJSON);
dispatch_async(dispatch_get_main_queue(), ^{
// 返回主线程处理
});
if(responseJSON) {
NSString*code = responseJSON[@"errno"];
if(code.intValue==0) {
NSString*result = responseJSON[@"confidence"];
CGFloat min = [result floatValue];
if(min >=60.0) {
// 识别成功
}else{
// 图片模糊或图片相差太大等其他原因识别失败
}
}else{
dispatch_async(dispatch_get_main_queue(), ^{
// 识别失败
});
}
}
}];
[taskresume];
}
// 获取json字符串
-(NSString*)DataTOjsonString:(id)object {
NSString*jsonString =nil;
NSError*error;
NSData*jsonData = [NSJSONSerialization dataWithJSONObject:object
options:NSJSONWritingPrettyPrinted
error:&error];
if(! jsonData) {
NSLog(@"error: %@", error);
}else{
jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
return jsonString;
}
// HMAC-SHA1加密
- (NSString*)HmacSha1WithSecret:(NSString*)keydata:(NSString*)data {
const char*cKey = [key cStringUsingEncoding:NSUTF8StringEncoding];
const char *cData = [data cStringUsingEncoding:NSUTF8StringEncoding];
unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA1, cKey,strlen(cKey), cData,strlen(cData), cHMAC);
NSData*HMAC = [[NSData alloc]initWithBytes:cHMAClength:sizeof(cHMAC)];
NSString *hash = [HMAC base64EncodedStringWithOptions:0];
return hash;
}
对于阿里云的1:1人脸识别就到这,如有问题请大家指正,谢谢