2 iOS SDK Mini OCR使用说明
2.1 准备工作
- 确认已经获取AppID、AppKey、OCR License(aip.license)。将aip.license放到CWResource.bundle资源包中。
2.2 引入SDK和配置文到工程中
将下面提到的framework和bundle资源添加到项目。
- PayEgisOCR.framework
- AipBase.framewo
- IdcardQuality.framework
- CWResource.bundle
在Linked Frameworks and Libraries 添加以下库
- Foundation.framework
- AipBase.framework
- AVFoundation.framework
- CoreMedia.framework
- PayEgisOCR.framework
- IdcardQuality.framework
- libstdc++.tbd
- 在General-> Embeded Binaries 中添加:
修改项目配置
Other Link flags添加-ObjC
info.plist 配置- iOS 集成需要在 info.plist 文件中添加“Privacy - Camera Usage Description”字段,客户根据业务需求填写相关说明。
- iOS 集成需要在 info.plist 文件中添加“Privacy - Microphone Usage Description”字段,客户根据业务需求填写相关说明。
- iOS 集成需要在 info.plist 文件中添加“Privacy - Photo Library Usage Description”字段,客户根据业务需求填写相关说明。
- 在所需类中导入.h文件
#import <PayEgisOCR/PayEgisAuthentication.h>
2.3 SDK初始化
方法名为:
- (void) initSDK : (NSMutableDictionary *) context completionBlock:(PayegisAuthInitCompletionBlock)completionBlock
参数说明:
参数名称 | 参数类型 | 描述 | 备注 |
---|---|---|---|
context | NSMutableDictionary | 上下文 | 初始化参数 |
上下文参数说明
参数名称 | 参数类型 | 描述 | 备注 |
---|---|---|---|
PayegisAuthSDKAppId | NSString | AppId | 申请下发的id |
PayegisAuthSDKAppKey | NSString | AppKey | 申请下发的key |
参考代码:
PayegisAuthSDK *_sdk = [PayegisAuthSDK shareInstance];
// OCR扫描界面是否支持选择图库图片
//_sdk.isShowAlbum = YES;
// 设置OCR返回结果是图片对象还是字典对象
// [_sdk setOCRCallBackImageType:NO];
NSMutableDictionary *context = [NSMutableDictionary dictionaryWithObjectsAndKeys:
AppId,PayegisAuthSDKAppId,
AppKey,PayegisAuthSDKAppKey,nil];
[_sdk initSDK:context completionBlock:^(NSError *error) {
if (!error) {
NSLog(@"初始化成功");
}
}];
[danger] 注意
OCR扫描界面是否支持选择图库图片,通过isShowAlbum属性控制;
setOCRCallBackImageType 设置OCR扫描返回结果的类型 YES 返回UIImage对象 NO 返回NSDictionary对象,包括裁剪图和原图
2.4 身份证OCR
先使用'openOCR'方法获取身份证正面和反面图像,然后调用'idOCROnly'方法,获取身份证相关信息
- 身份证OCR扫描获取图片,v3.3.0版本中新增方法,可以无需退出扫描界面直接进行下一面的扫描。可以根据需求选择调用的方法,下面是两个方法的介绍和使用。
1.OCR 扫描(身份证单面扫描)
方法名称为:
- (void) openOCR:(PECardType) cardType completionBlock:(ImageOCRBlock) retunBlock
需要以下入参:
参数 | 参数类型 | 描述 | 备注 |
---|---|---|---|
PECardType | NS_ENUM | 卡片类型 | PECardType_ID_FRONT 身份证正面 PECardType_ID_BACK 身份证反面 PECardType_BANK 银行卡 PECardType_Other 其他类型卡片 |
参考代码:
WeakSelf(weakSelf)
[_sdk openOCR:PECardType_ID_FRONT completionBlock:^(id returnObj) {
if ([returnObj isKindOfClass:[NSDictionary class]] ) {
NSDictionary *imageDic = (NSDictionary *) returnObj;
if (imageDic.allKeys.count > 0) {
// 裁剪过后的图
[weakSelf.idCardFrontImgV setImage:imageDic[@"image"]];
weakSelf.frontImg = imageDic[@"image"];
//原图
weakSelf.frontOriginImg = imageDic[@"orign"];
}
}else{
if (returnObj != nil) {
[weakSelf.idCardFrontImgV setImage:returnObj];
weakSelf.frontImg = returnObj;
}
}
}];
2.OCR 扫描(身份证自动正反面扫描)
方法名称为:
- (void) openOCR:(PECardType) cardType idImgsDictinary:(NSDictionary *) idImgsDictinary completionBlock:(ImageOCROnceBlock) retunBlock
需要以下入参:
参数 | 参数类型 | 描述 | 备注 |
---|---|---|---|
PECardType | NS_ENUM | 卡片类型 | PECardType_ID_FRONT 身份证正面(先进行正面扫描) PECardType_ID_BACK 身份证反面(先进行反面扫描) |
idImgsDictinary | NSDictionary | 正反面图片 | 选填 front 身份证正面图片 back 身份证反面图片 |
参考代码:
WeakSelf(weakSelf)
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:self.frontImg?self.frontImg:@"",@"front",self.backImg,@"back", nil];
[_sdk openOCR:PECardType_ID_FRONT idImgsDictinary:dic completionBlock:^(id frontObj, id backObj) {
if ([frontObj isKindOfClass:[NSDictionary class]] ) {
NSDictionary *frontDic = (NSDictionary *) frontObj;
if (frontDic.allKeys.count > 0) {
[weakSelf.idCardFrontImgV setImage:frontDic[@"image"]];
weakSelf.frontImg = frontDic[@"image"];
// 原图
weakSelf.frontOriginImg = frontDic[@"orign"];
}
NSDictionary *backDic = (NSDictionary *) backObj;
if (backDic.allKeys.count > 0) {
[weakSelf.idCardbackImgV setImage:backDic[@"image"]];
weakSelf.backImg = backDic[@"image"];
// 原图
weakSelf.backOriginImg = backDic[@"orign"];
}
}else{
if (frontObj) {
[weakSelf.idCardFrontImgV setImage:frontObj];
weakSelf.frontImg = frontObj;
}
if (backObj) {
[weakSelf.idCardbackImgV setImage:backObj];
weakSelf.backImg = backObj;
}
}
}];
- 获取身份证相关信息
方法名称为:
- (void) idOCROnly:(UIImage * ) frontImg backImg:(UIImage *) backImg completionBlock:(PayegisTokenAuthCompletionBlock) completionBlock
需要以下入参
参数名称 | 参数类型 | 描述 |
---|---|---|
frontImg | UIImage | 身份证正面 |
backImg | UIImage | 身份证反面 |
参考代码:
WeakSelf(weakSelf)
[_sdk idOCROnly:self.idCardFrontImgV.image backImg:self.idCardbackImgV.image completionBlock:^(NSDictionary *result, NSError *error) {
[weakSelf hideWaiting];
if (error) {
NSString *string = [error.userInfo valueForKey:@"message"]?:[error.userInfo valueForKey:NSLocalizedDescriptionKey];
[weakSelf showError:string];
}else{
[weakSelf.nameView setInfoString:result[@"name"]];
[weakSelf.IDView setInfoString:result[@"cid"]];
[weakSelf.timeView setInfoString:[NSString stringWithFormat:@"%@-%@",result[@"validateFrom"],result[@"validateTo"]]];
}
}];
- result相关身份信息如下:
名称 | 类型 | 描述 |
---|---|---|
name | NSString | 姓名 |
cid | NSString | 身份证号 |
sex | NSString | 性别 |
folk | NSString | 民族 |
birthday | NSString | 出生 |
address | NSString | 地址 |
authority | NSString | 发证机关 |
validateFrom | NSString | 有效期开始时间 |
validateTo | String | 有效期结束时间 |
2.5 银行卡OCR
先使用’openOCR’获取银行卡图片,然后调用’ bankOCROnly’方法,获取银行卡相关信息
- 银行卡OCR扫描获取图片
方法名称为:
- (void) openOCR:(PECardType) cardType completionBlock:(ImageOCRBlock) retunBlock
需要以下入参
参数名称 | 参数类型 | 描述 | 备注 |
---|---|---|---|
PECardType | NS_ENUM | 卡片类型 | PECardType_ID_FRONT 身份证正面 PECardType_ID_BACK 身份证反面 PECardType_BANK 银行卡 PECardType_Other 其他类型卡片 |
参考代码:
WeakSelf(weakSelf)
[_sdk openOCR:PECardType_BANK completionBlock:^(id returnObj) {
if ([returnObj isKindOfClass:[NSDictionary class]]) {
NSDictionary *bankDic = (NSDictionary *) returnObj;
if (bankDic.allKeys.count > 0) {
[weakSelf.bankImgV setImage:bankDic[@"image"]];
weakSelf.bankCardImg = bankDic[@"image"];
// 原图
weakSelf.bankCardOriginImg = bankDic[@"orign"];
}
}else{
if (returnObj == nil) {
return;
}
weakSelf.bankCardImg = returnObj;
[weakSelf.bankImgV setImage:returnObj];
}
}];
- 获取银行卡相关信息
方法名称为:
- (void) bankOCROnly:( UIImage * _Nonnull) bankImg completionBlock:(PayegisTokenAuthCompletionBlock) completionBlock
需要以下入参
参数名称 | 参数类型 | 描述 |
---|---|---|
bankImg | UIImage | 银行卡正面 |
参考代码:
WeakSelf(weakSelf)
[_sdk bankOCROnly:self.bankImgV.image completionBlock:^(NSDictionary *result, NSError *error) {
[weakSelf hideWaiting];
if (error) {
NSString *string = [error.userInfo valueForKey:@"message"]?:[error.userInfo valueForKey:NSLocalizedDescriptionKey];
[weakSelf showError:string];
}else{
NSString *cardNO = [self subStringWithNumber:4 str:result[@"cardno"] padding:@" "];
[weakSelf.cardView setInfoString:cardNO];
[weakSelf.bankView setInfoString:result[@"bankname"]];
[weakSelf.typeView setInfoString:result[@"cardtype"]];
}
}];
- result相关银行信息如下:
名称 | 类型 | 描述 |
---|---|---|
bankname | NSString | 发卡行 |
cardno | NSString | 银行卡号 |
cardtype | NSString | 卡类型 |
2.6 驾驶证OCR
先使用'openOCR'获取驾驶证图片,然后调用'drivingOCROnly'方法,获取驾驶证相关信息。
- 驾驶证OCR扫描获取图片 方法名称为:
- (void) openOCR:(PECardType) cardType completionBlock:(ImageOCRBlock) retunBlock
需要以下入参:
参数 | 参数类型 | 描述 | 备注 |
---|---|---|---|
PECardType | NS_ENUM | 卡片类型 | PECardType_ID_FRONT 身份证正面 PECardType_ID_BACK 身份证反面 PECardType_BANK 银行卡 PECardType_Other 其他类型卡片 |
参考代码:
WeakSelf(weakSelf)
[_sdk openOCR:PECardType_Other completionBlock:^(id returnObj) {
if ([returnObj isKindOfClass:[NSDictionary class]]) {
NSDictionary *bankDic = (NSDictionary *) returnObj;
if (bankDic.allKeys.count > 0) {
[weakSelf.contentIV setImage:bankDic[@"image"]];
weakSelf.contentImg = bankDic[@"image"];
}
}else{
if (returnObj == nil) {
return;
}
weakSelf.contentImg = returnObj;
[weakSelf.contentIV setImage:returnObj];
}
}];
- 获取驾驶证相关信息 方法名称为:
- (void) drivingOCROnly:(UIImage *) contentImg completionBlock:(PayegisTokenAuthCompletionBlock) completionBlock
需要以下入参:
参数 | 参数类型 | 描述 |
---|---|---|
contentImg | UIImage | 驾驶证图片 |
参考代码:
WeakSelf(weakSelf)
[_sdk drivingOCROnly:self.contentImg completionBlock:^(NSDictionary *result, NSError *error) {
[weakSelf hideWaiting];
if (error) {
NSString *string = [error.userInfo valueForKey:@"message"]?:[error.userInfo valueForKey:NSLocalizedDescriptionKey];
[weakSelf showError:string];
}else{
// 处理结果
[weakSelf ocrOnDrivingLicenseSuccessful:result];
}
}];
// 处理结果方法
- (void)ocrOnDrivingLicenseSuccessful:(id)result {
NSLog(@"%@", result);
NSMutableString *message = [NSMutableString string];
if(result){
[self.nameInfoView setInfoString:result[@"name"]];
[self.sexInfoView setInfoString:result[@"sex"]];
[self.bornInfoView setInfoString:result[@"birthday"]];
[self.countryInfoView setInfoString:result[@"nationality"]];
[self.addressInfoView setInfoString:result[@"address"]];
[self.driveTypeInfoView setInfoString:result[@"type"]];
[self.carNumInfoView setInfoString:result[@"certNo"]];
[self.startDateInfoView setInfoString:result[@"validateFrom"]];
[self.initialDateInfoView setInfoString:result[@"getCertTime"]];
if ([result[@"validateTo"] length]) {
[self.effectiveDateInfoView setInfoString:[NSString stringWithFormat:@"%@至%@",result[@"validateTime"],result[@"validateTo"]]];
}else{
[self.effectiveDateInfoView setInfoString:result[@"validateTime"]];
}
}else{
[message appendFormat:@"%@", result];
}
}
- result相关驾驶证信息如下:
名称 | 类型 | 描述 |
---|---|---|
name | NSString | 姓名 |
sex | NSString | 性别 |
birthday | NSString | 出生日期 |
nationality | NSString | 国籍 |
address | NSString | 住址 |
type | NSString | 准驾车型 |
certNo | NSString | 证号 |
validateFrom | NSString | 有效起始日期 |
getCertTime | NSString | 初次领证日期 |
validateTime | NSString | 有效日期(如:6年,或者拼接validateTo形成时间区间) |
validateTo | NSString | 有效日期截止时间 |
2.7 行驶证OCR
先使用'openOCR'获取行驶证图片,然后调用'vehicleOCROnly'方法,获取行驶证相关信息。
- 行驶证OCR扫描获取图片 方法名称为:
- (void) openOCR:(PECardType) cardType completionBlock:(ImageOCRBlock) retunBlock
需要以下入参:
参数 | 参数类型 | 描述 | 备注 |
---|---|---|---|
PECardType | NS_ENUM | 卡片类型 | PECardType_ID_FRONT 身份证正面 PECardType_ID_BACK 身份证反面 PECardType_BANK 银行卡 PECardType_Other 其他类型卡片 |
参考代码:
WeakSelf(weakSelf)
[_sdk openOCR:PECardType_Other completionBlock:^(id returnObj) {
if ([returnObj isKindOfClass:[NSDictionary class]]) {
NSDictionary *bankDic = (NSDictionary *) returnObj;
if (bankDic.allKeys.count > 0) {
[weakSelf.contentIV setImage:bankDic[@"image"]];
weakSelf.contentImg = bankDic[@"image"];
}
}else{
if (returnObj == nil) {
return;
}
weakSelf.contentImg = returnObj;
[weakSelf.contentIV setImage:returnObj];
}
}];
- 获取行驶证相关信息 方法名称为:
- (void) vehicleOCROnly:(UIImage *) contentImg completionBlock:(PayegisTokenAuthCompletionBlock) completionBlock
需要以下入参:
参数 | 参数类型 | 描述 |
---|---|---|
contentImg | UIImage | 行驶证图片 |
参考代码:
WeakSelf(weakSelf)
[_sdk vehicleOCROnly:self.contentImg completionBlock:^(NSDictionary *result, NSError *error) {
[weakSelf hideWaiting];
if (error) {
NSString *string = [error.userInfo valueForKey:@"message"]?:[error.userInfo valueForKey:NSLocalizedDescriptionKey];
[weakSelf showError:string];
}else{
[weakSelf ocrOnVehicleLicenseSuccessful:result];
}
}];
// 处理结果方法
- (void)ocrOnVehicleLicenseSuccessful:(id)result {
NSLog(@"%@", result);
NSMutableString *message = [NSMutableString string];
if(result){
// 所有人、住址、品牌型号、车辆类型、号牌号码、
//发动机号码、使用性质、注册日期、发证日期、车辆识别代码、
[self.nameInfoView setInfoString:result[@"name"]];
[self.addressInfoView setInfoString:result[@"address"]];
[self.brandTyhpeInfoView setInfoString:result[@"brand"]];
[self.carTypeInfoView setInfoString:result[@"carType"]];
[self.numberInfoView setInfoString:result[@"plate"]];
[self.engineNumInfoView setInfoString:result[@"engine"]];
[self.useInfoView setInfoString:result[@"useType"]];
[self.registDateInfoView setInfoString:result[@"registerDate"]];
[self.issueDateInfoView setInfoString:result[@"certDate"]];
[self.idCodeInfoView setInfoString:result[@"nickNo"]];
}else{
[message appendFormat:@"%@", result];
}
}
}
- result相关行驶证信息如下:
名称 | 类型 | 描述 |
---|---|---|
name | NSString | 所有人 |
address | NSString | 住址 |
brand | NSString | 品牌型号 |
carType | NSString | 车辆类型 |
plate | NSString | 号牌号码 |
engine | NSString | 发动机号码 |
useType | NSString | 使用性质 |
registerDate | NSString | 注册日期 |
certDate | NSString | 发证日期 |
nickNo | NSString | 车辆识别代码 |