[iOS]阿里云人脸身份证校验
之前使用人脸身份证校验时,一直返回code=-1提示“照片质量太低”。当时以为是图片太小不清晰,传大一些的图片时又提示“图片过大”,那时弄得很懵因为安卓端能正常调用接口。经过了一段痛苦的摸索过程,发现图片转成BASE64字符串后还需要对字符串进行URL编码。认证比对-人脸身份证认证-人脸识别-人脸身份证校验/*阿里云人脸识别接口输入人脸图片(BASE64格式,图片大小小于100...
·
之前使用人脸身份证校验时,一直返回code=-1提示“照片质量太低”。当时以为是图片太小不清晰,传大一些的图片时又提示“图片过大”,那时弄得很懵因为安卓端能正常调用接口。
经过了一段痛苦的摸索过程,发现图片转成BASE64字符串后还需要对字符串进行URL编码。
认证比对-人脸身份证认证-人脸识别-人脸身份证校验
/*
阿里云人脸识别接口
输入人脸图片(BASE64格式,图片大小小于100k,base64转换时参数需要去掉data:image/jpeg;base64,)、姓名、身份证号,验证身份证号与姓名是否匹配,若匹配,则将匹配的身份证头像与人脸图片进行比对,返回比对分数,由此判断是否为同一人。
*/
- (void)newtAliyunAuthInfo {
NSString *rz_name = _nameText.text;
NSString *rz_card = _cardText.text;
NSString *appcode = @“自己的appcode”;
NSString *host = @"https://rlsfzdb.market.alicloudapi.com";
NSString *path = @"/face_id/check";
NSString *method = @"POST";
NSString *querys = @"";
NSString *url = [NSString stringWithFormat:@"%@%@%@", host, path , querys];
NSString *baseImgstr = [self encodeToBase64String:_photoIV.image];
// 必须对base64图片进行URL编码
baseImgstr = [self URLEncodedString:baseImgstr];
NSString *bodys = [NSString stringWithFormat:@"idcard=%@&image=%@&name=%@",_cardText.text, baseImgstr, _nameText.text];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString: url] cachePolicy:1 timeoutInterval: 90];
request.HTTPMethod = method;
[request addValue: [NSString stringWithFormat:@"APPCODE %@", appcode] forHTTPHeaderField: @"Authorization"];
[request addValue: @"application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField: @"Content-Type"];
NSData *data = [bodys dataUsingEncoding: NSUTF8StringEncoding];
[request setHTTPBody: data];
NSURLSession *requestSession = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD showHUDAddedTo:KWindow withTitle:@"身份校验中.." animated:YES];
});
NSURLSessionDataTask *task = [requestSession dataTaskWithRequest:request
completionHandler:^(NSData * _Nullable body , NSURLResponse * _Nullable response, NSError * _Nullable error) {
dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView:KWindow animated:YES];
});
NSDictionary *responseJSON = [NSJSONSerialization JSONObjectWithData:body options:NSJSONReadingMutableLeaves error:nil];
if (responseJSON) {
NSString *code = responseJSON[@"code"];
if ([code isEqualToString:@"0"]) {
[self netSaveRealNameObject:responseJSON Name:rz_name Card:rz_card];
} else {
NSString *message = responseJSON[@"message"];
dispatch_async(dispatch_get_main_queue(), ^{
[KWindow makeToast:message];
});
}
}
}];
[task resume];
}
// UIImage转Base64
- (NSString *)encodeToBase64String:(UIImage *)image {
UIImage *newImag = [self yasuoImage:image];
// return [UIImagePNGRepresentation(newImag) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
NSData *data = UIImageJPEGRepresentation(newImag, 1.0f);
NSString *encodedImageStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
return encodedImageStr;
}
// Base64转UIImage
- (UIImage *)decodeBase64ToImage:(NSString *)strEncodeData {
NSData *data = [[NSData alloc]initWithBase64EncodedString:strEncodeData options:NSDataBase64DecodingIgnoreUnknownCharacters];
return[UIImage imageWithData:data];
}
// 压缩图片
- (UIImage *)yasuoImage:(UIImage *)image {
// 图片限制大小100KB
NSData *tpData = UIImagePNGRepresentation(image);
NSInteger dxLengh = [tpData length]/1024;
NSInteger num = 0;
while (dxLengh >= 100) {
if (num > 100) {
break;
}
UIImage *tpImg = [UIImage imageWithData:tpData];
CGSize tpSize = tpImg.size;
UIImage *newImg = [self scaleToSize:tpImg size:CGSizeMake(tpSize.width*0.8, tpSize.height*0.8)];
tpData = UIImageJPEGRepresentation(newImg, 1);
// tpData = UIImageJPEGRepresentation(tpImg,0.5);
dxLengh = [tpData length]/1024;
num = num + 1;
}
UIImage *rImage = [UIImage imageWithData:tpData];
return rImage;
}
/// 压缩图片大小 并不是截取图片而是按照size绘制图片
- (UIImage*)scaleToSize:(UIImage*)img size:(CGSize)size {
// 创建一个基于位图的上下文(context),并将其设置为当前上下文(context)
UIGraphicsBeginImageContext(size);
// 绘制改变大小的图片
[img drawInRect:CGRectMake(0, 0, size.width, size.height)];
// 从当前context中创建一个改变大小后的图片
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
// 使当前的context出堆栈
UIGraphicsEndImageContext();
// 保存图片
// UIImageWriteToSavedPhotosAlbum(scaledImage, nil, nil, nil);
return scaledImage;
}
/// URLEncode
- (NSString *)URLEncodedString:(NSString *)tempStr {
// CharactersToBeEscaped = @":/?&=;+!@#$()~',*";
// CharactersToLeaveUnescaped = @"[].";
NSString *unencodedString = tempStr;
NSString *encodedString = (NSString *) CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)unencodedString, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8));
return encodedString;
}
更多推荐
所有评论(0)