2 Android SDK Mini OCR使用说明
Mini OCR版本是Pro的精简版本,其剥离了Pro版本中的接口,仅仅保留OCR功能。Mini OCR能完成的功能,都可以在Pro版本中找到相应实现,本文档中,Android部分都以Android Studio做集成说明,以下章节开始详细描述Mini OCR的使用说明。
2.1 导入开发包
解压 PayEgisAuthenticationSDK.zip,解压后得到三个文件。如下图所示:
名称 |
具体内容 |
说明 |
备注 |
*.aar |
pgsocr-release.aar |
SDK主体 |
|
jniLibs |
armeabi-v7a 等so包 |
So库 |
建议使用v7a架构的so库,如果需要其它架构的so,将v7下的库拷贝至其它arm架构下即可(注:arm64-v8a除外,我们的so库仅支持32位环境运行,如果您的项目下包含arm64-v8a文件夹将导致搭载64位处理器的设备强制加载64位库文件报错) |
license |
aip.license |
授权文件 |
授权文件和应用包名一一绑定,不可在多个应用下使用 |
将解压出的pgsocr-release.aar拷贝到项目的libs中
在工程的gradle文件中添加对pgsocr-release.aar的依赖,参见下图:
在项目工程中添加license授权文件,license文件需要拷贝至项目assets文件夹中.
[danger] 注意
license文件是和应用包名绑定的,因此不同应用使用远程实名认证SDK,需要申请相应的license。
在项目工程中添加对应的so库文件,我们建议使用v7a架构的so库,如果需要其它架构的so,将v7下的库拷贝至其它arm架构下即可(注:arm64-v8a除外,我们的so库仅支持32位环境运行,如果您的项目下包含arm64-v8a文件夹将导致搭载64位处理器的设备强制加载64位库文件报错)。
2.2 身份证识别
Mini OCR中细化封装了身份证识别接口,用以获取身份证正反面图,并调用相关接口识别身份证正反面文字信息。
2.2.1 身份证正反面图像获取
1.实例化PayegisAuthOCRSDK类。
sdk = new PayegisAuthOCRSDK(this, Const.AppId, Const.AppKey);
2.调用身份证OCR扫描页,获取身份证正反面图像,获取图像都以startActivityForResult()方式获取,具体分为三步:
step1 获取相应Intent。具体方法名:
public Intent createIDCardOCRIntent(Context context, int requestCode)
调用方法createIDCardOCRIntent(),获取相应Intent。以获取身份证正面为例:
//获取身份证OCR Intent
Intent it = sdk.createIDCardOCRIntent(this, PayegisAuthOCRSDK.LF_SCAN_ID_CARD_FRONT_REQUEST);
createIDCardOCRIntent()方法第二个参数指定了获取身份证正面或者反面,其具体定义在PayegisAuthOCRSDK常量中,对于身份证OCR主要有两个常量定义:
常量名称 |
定义 |
PayegisAuthOCRSDK.LF_SCAN_ID_CARD_FRONT_REQUEST |
获取身份证正面 |
PayegisAuthOCRSDK.LF_SCAN_ID_CARD_BACK_REQUEST |
获取身份证反面 |
如果您希望同时获取身份证正反面,则获取拍摄正反两面的Intent。具体方法名:
public Intent createIDCardOCRIntent(Context context, int requestCode, boolean hasFrontImg, boolean hasBackImg)
第三个参数hasFrontImg代表是否已有正面照片,第四个参数hasBackImg代表是否已有反面照片,调用方法createIDCardOCRIntent(),获取相应Intent。以优先获取身份证正面为例:
boolean hasFrontImg = idCardFrontData == null ? false : true;
boolean hasBackImg = idCardBackData == null ? false : true;
//获取身份证OCR Intent
Intent it = sdk.createIDCardOCRIntent(this, PayegisAuthOCRSDK.LF_SCAN_ID_CARD_FRONT_REQUEST, hasFrontImg, hasBackImg);
step2 调用扫描页,并处理结果
获取图像,以startActivityForResult()方式获取,在activity回调中获取相应图片,获取单面和正反两面的处理代码如下:
//调用扫描页,获取身份证正面图
startActivityForResult(it, PayegisAuthOCRSDK.LF_SCAN_ID_CARD_FRONT_REQUEST);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
boolean needBothSide = false;
if (data != null) {
needBothSide = data.getBooleanExtra(PayegisAuthOCRSDK.KEY_NEED_BOTHSIDE_IDCARD, false);
}
switch (requestCode) {
case PayegisAuthOCRSDK.LF_SCAN_ID_CARD_FRONT_REQUEST:
if (resultCode == RESULT_OK) {
if (!needBothSide) {
//显示身份证正面
String frontCropBitmapPath = data.getStringExtra(PayegisAuthOCRSDK.KEY_IMAGE_PATH);
// String frontFullBitmapPath = data.getStringExtra(PayegisAuthOCRSDK.KEY_IMAGE_FULL_PATH);//未裁剪的完整图片的路径
setImage(requestCode, frontCropBitmapPath);
} else {
//显示身份证正反两面
HashMap pathMap = (HashMap) data.getSerializableExtra(PayegisAuthOCRSDK.KEY_IMAGE_PATH);
// String frontFullBitmapPath = (String) pathMap.get(PayegisAuthOCRSDK.KEY_FRONT_FULL_PATH);//未裁剪的正面完整图片的路径
// String backFullBitmapPath = (String) pathMap.get(PayegisAuthOCRSDK.KEY_BACK_FULL_PATH);//未裁剪的反面完整图片的路径
setImage(pathMap);
}
}
break;
case PayegisAuthOCRSDK.LF_SCAN_ID_CARD_BACK_REQUEST:
if (resultCode == RESULT_OK) {
if (!needBothSide) {
//显示身份证反面
String frontCropBitmapPath = data.getStringExtra(PayegisAuthOCRSDK.KEY_IMAGE_PATH);
// String frontFullBitmapPath = data.getStringExtra(PayegisAuthOCRSDK.KEY_IMAGE_FULL_PATH);//未裁剪的完整图片的路径
setImage(requestCode, frontCropBitmapPath);
} else {
//显示身份证正反两面
HashMap pathMap = (HashMap) data.getSerializableExtra(PayegisAuthOCRSDK.KEY_IMAGE_PATH);
// String frontFullBitmapPath = (String) pathMap.get(PayegisAuthOCRSDK.KEY_FRONT_FULL_PATH);//未裁剪的正面完整图片的路径
// String backFullBitmapPath = (String) pathMap.get(PayegisAuthOCRSDK.KEY_BACK_FULL_PATH);//未裁剪的反面完整图片的路径
setImage(pathMap);
}
}
break;
}
}
[danger] 注意
如果需要获取未裁剪的完整图片,请按以上代码中注释部分获取图片路径。
step3 从本地获取相应图片
在对应的requestCode下获取图像,在onActivityResult()回调中取出Intent,并从Intent PayegisAuthOCRSDK.KEY_IMAGE_PATH KEY中获取图像本地路径,获取到真实图像文件,以下贴出以上参考代码setImage()方法的全部源代码。
/**
* 显示身份证单面图片和保存
*
* @param requestCode
* @param filePath 文件路径
*/
private void setImage(int requestCode, final String filePath) {
try {
switch (requestCode) {
case PayegisAuthOCRSDK.LF_SCAN_ID_CARD_FRONT_REQUEST:
// 正面显示与保存
new Thread(new Runnable() {
@Override
public void run() {
final Bitmap map = ImgUtil.getBitmapByPath(filePath);
idCardFrontData = SDKUtil.Bitmap2Bytes(map);
runOnUiThread(new Runnable() {
@Override
public void run() {
img_id_front.setImageBitmap(map);
}
});
}
}).start();
break;
case PayegisAuthOCRSDK.LF_SCAN_ID_CARD_BACK_REQUEST:
// 反面显示与保存
new Thread(new Runnable() {
@Override
public void run() {
final Bitmap map = ImgUtil.getBitmapByPath(filePath);
idCardBackData = SDKUtil.Bitmap2Bytes(map);
runOnUiThread(new Runnable() {
@Override
public void run() {
img_id_back.setImageBitmap(map);
}
});
}
}).start();
break;
}
} catch (OutOfMemoryError e) {
e.printStackTrace();
}
}
/**
* 显示身份证两面图片和保存
*
* @param pathMap 文件路径
*/
private void setImage(final HashMap pathMap) {
try {
// 正面显示与保存
new Thread(new Runnable() {
@Override
public void run() {
String frontFilepath = (String) pathMap.get(PayegisAuthOCRSDK.KEY_FRONT_PATH);
if (!TextUtils.isEmpty(frontFilepath)) {
final Bitmap frontBitmap = ImgUtil.getBitmapByPath(frontFilepath);
idCardFrontData = SDKUtil.Bitmap2Bytes(frontBitmap);
runOnUiThread(new Runnable() {
@Override
public void run() {
img_id_front.setImageBitmap(frontBitmap);
}
});
}
String backFilepath = (String) pathMap.get(PayegisAuthOCRSDK.KEY_BACK_PATH);
if (!TextUtils.isEmpty(backFilepath)) {
final Bitmap backBitmap = ImgUtil.getBitmapByPath(backFilepath);
idCardBackData = SDKUtil.Bitmap2Bytes(backBitmap);
runOnUiThread(new Runnable() {
@Override
public void run() {
img_id_back.setImageBitmap(backBitmap);
}
});
}
}
}).start();
} catch (OutOfMemoryError e) {
e.printStackTrace();
}
}
以上代码中ImgUtil和SDKUtil为SDK Pro 中提供的工具类,您可以通过ImgUtil.getBitmapByPath(filePath)快速从本地路径获取一个Bitmap对象;通过SDKUtil.Bitmap2Bytes(map)快速将Bitmap对象转化成字节数组,以方便图像展示和上传识别。
2.2.2 识别身份证文字信息
获取到身份证正反面图像后,可以调用Mini OCR识别接口,识别出身份证证反面信息。具体方法名:
public void recognizeIdCard(byte[] idFrontImage, byte[] idBackImage, IDCardRecognizeCallBack idCardRecognizeCallBack)
此方法有三个参数:
参数名称 |
类型 |
说明 |
idFrontImage |
byte[] |
身份证正面图像 |
idBackImage |
byte[] |
身份证反面图像 |
idCardRecognizeCallBack |
IDCardRecognizeCallBack |
识别回调接口 |
调用识别接口个,参考代码如下:
sdk.recognizeIdCard(idCardFrontData, idCardBackData, new IDCardRecognizeCallBack() {
@Override
public void onIDCardRecognize(IdCardInfo idCardInfo, int status, String message) {
if (status == 0) {
tv_name.setText(idCardInfo.getName());
tv_cardNo.setText(idCardInfo.getIdCard());
tv_cardDate.setText(idCardInfo.getValidateFrom() + "-" + idCardInfo.getValidateTo());
} else {
showToast(message);
}
}
});
IDCardRecognizeCallBack回调接口封装了识别后的身份证文字信息,识别结束后回调此类void onIDCardRecognize(IdCardInfo idCardInfo,int status,String message)方法,当status==0时,表示识别成功,可从idCardInfo对象中取出相关信息,否则idCardInfo为null。message封装了相关描述信息。IdCardInfo对象封装了身份证文字信息,具体见下表:
名称 |
类型 |
描述 |
name |
String |
姓名 |
idCard |
String |
身份证号 |
sex |
String |
性别 |
folk |
String |
民族 |
birthday |
String |
出生 |
address |
String |
地址 |
authority |
String |
发证机关 |
validateFrom |
String |
有效期开始时间 |
validateTo |
String |
有效期结束时间 |
2.3 银行卡识别
Mini OCR 中细化封装了银行卡识别接口,用以获取银行卡正面图,并调用相关接口识别银行卡信息。
2.3.1 银行卡正面图像获取
1.实例化PayegisAuthOCRSDK类。
sdk = new PayegisAuthOCRSDK (this, Const.AppId, Const.AppKey);
2.调用银行卡OCR扫描页,获取银行卡正面图像,获取图像以startActivityForResult()方式获取,具体分为三步:
step1 获取相应Intent,并调用扫描页。具体方法名:
public Intent createBankCardOCRIntent(Context context)
调用方法createBankCardOCRIntent (),获取相应Intent。参考代码:
//获取银行卡OCR Intent
Intent it = sdk.createBankCardOCRIntent(this);
//调用扫描页,获取银行卡正面图
if (it != null) {
startActivityForResult(it, PayegisAuthOCRSDK.LF_SCAN_BANK_CARD_REQUEST);
}
startActivityForResult ()方法第二个参数指定了获取银行卡正面图像,其具体定义在PayegisAuthOCRSDK常量中,对于银行卡OCR主要有1个常量定义:
常量名称 |
定义 |
PayegisAuthOCRSDK.LF_SCAN_BANK_CARD_REQUEST |
获取银行卡正面 |
step2 调用扫描页,并处理结果
获取图像,以startActivityForResult()方式获取,在activity回调中获取相应图片,参考代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (PayegisAuthOCRSDK.LF_SCAN_BANK_CARD_REQUEST == requestCode && resultCode == RESULT_OK) {
final String filePath = data.getStringExtra(PayegisAuthOCRSDK.KEY_IMAGE_PATH);
new Thread(new Runnable() {
@Override
public void run() {
final Bitmap map = ImgUtil.getBitmapByPath(filePath);
bankCardData = SDKUtil.Bitmap2Bytes(map);
runOnUiThread(new Runnable() {
@Override
public void run() {
bankcardImg.setImageBitmap(map);
}
});
}
}).start();
}
}
step3 从本地获取相应图片
在对应的requestCode下获取图像,在onActivityResult()回调中取出Intent,并从Intent PayegisAuthOCRSDK.KEY_IMAGE_PATH KEY中获取图像本地路径,获取到真实图像文件。以上代码中ImgUtil和SDKUtil为SDK-Pro 中提供的工具类,您可以通过ImgUtil.getBitmapByPath(filePath)快速从本地路径获取一个Bitmap对象,通过SDKUtil.Bitmap2Bytes(map)快速将Bitmap对象转化成字节数组,以方便图像展示和上传识别。
2.3.2 识别银行卡
获取到银行卡正面图像后,可以调用Mini OCR识别接口,识别出银行卡信息。具体方法名:
public void recognizeBankCard(byte[] bankCardImage, BankCardRecognizeCallBack bankCardRecognizeCallBack)
此方法有两个个参数:
参数名称 |
类型 |
说明 |
bankCardImage |
byte[] |
银行卡正面图像 |
bankCardRecognizeCallBack |
BankCardRecognizeCallBack |
识别回调接口 |
调用识别接口个,参考代码如下:
sdk.recognizeBankCard(bankCardData, new BankCardRecognizeCallBack() {
@Override
public void onBankCardRecognize(BankCardOCRInfo bankCardOCRInfo, int status, String message) {
if (status == 0) {
bankcardBank.setText(bankCardOCRInfo.getBankName());
bankcardNo.setText(bankCardOCRInfo.getCardNo());
bankcardType.setText(bankCardOCRInfo.getCardType());
} else {
showToast(message);
}
}};
IDCardRecognizeCallBack回调接口封装了识别后的银行卡信息,识别结束后回调此类
void onBankCardRecognize(BankCardOCRInfo bankCardOCRInfo, int status, String message)
方法,当status==0时,表示识别成功,可从bankCardOCRInfo对象中取出相关信息,否则bankCardOCRInfo为null。message封装了相关描述信息。BankCardOCRInfo对象封装了银行卡信息,具体见下表:
名称 |
类型 |
描述 |
bankName |
String |
发卡行 |
cardNo |
String |
银行卡号 |
cardType |
String |
卡类型 |
2.4 驾驶证识别
Mini OCR中细化封装了驾驶证识别接口,用以获取驾驶证图片,并调用相关接口识别银行卡信息。
2.4.1 驾驶证图像获取
1.实例化PayegisAuthOCRSDK类。
sdk = new PayegisAuthOCRSDK (this, Const.AppId, Const.AppKey);
2.调用驾驶证OCR扫描页,获取驾驶证图像,获取图像以startActivityForResult()方式获取,具体分为三步:
step1 获取相应Intent,并调用扫描页。具体方法名:
public Intent createCommonOCRIntent(Context context)
调用方法createCommonOCRIntent (),获取相应Intent。参考代码:
//获取通用OCR Intent
Intent it = sdk.createCommonOCRIntent(this);
//调用扫描页,获取图片
if (it != null) {
startActivityForResult(it, PayegisAuthOCRSDK.LF_SCAN_COMMON_REQUEST);
}
startActivityForResult ()方法第二个参数指定了获取通用图像,其具体定义在PayegisAuthOCRSDK常量中,对于通用OCR主要有1个常量定义:
常量名称 |
定义 |
PayegisAuthOCRSDK.LF_SCAN_COMMON_REQUEST |
获取通用图片 |
step2 调用扫描页,并处理结果
获取图像,以startActivityForResult()方式获取,在activity回调中获取相应图片,参考代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (PayegisAuthOCRSDK.LF_SCAN_COMMON_REQUEST == requestCode && resultCode == RESULT_OK) {
filePath = data.getStringExtra(PayegisAuthOCRSDK.KEY_IMAGE_PATH);
new Thread(new Runnable() {
@Override
public void run() {
final Bitmap map = ImgUtil.getBitmapByPath(filePath);
bitmapData = SDKUtil.Bitmap2Bytes(map);
runOnUiThread(new Runnable() {
@Override
public void run() {
mDemo_img_drive_ocr.setImageBitmap(map);
}
});
}
}).start();
}
}
step3 从本地获取相应图片
在对应的requestCode下获取图像,在onActivityResult()回调中取出Intent,并从Intent PayegisAuthOCRSDK.KEY_IMAGE_PATH KEY中获取图像本地路径,获取到真实图像文件。以上代码中ImgUtil和SDKUtil为Mini OCR 中提供的工具类,您可以通过ImgUtil.getBitmapByPath(filePath)快速从本地路径获取一个Bitmap对象,通过SDKUtil.Bitmap2Bytes(map)快速将Bitmap对象转化成字节数组,以方便图像展示和上传识别。
2.4.2 识别驾驶证
获取到驾驶证图像后,可以调用Mini OCR驾驶证识别接口,识别出驾驶证信息。具体方法名:
public void recognizeDriveLicense(byte[] driveImage, DriveLicenseRecognizeCallBack driveLicenseRecognizeCallBack)
此方法有两个个参数:
参数名称 |
类型 |
说明 |
driveImage |
byte[] |
驾驶证图像 |
driveLicenseRecognizeCallBack |
DriveLicenseRecognizeCallBack |
识别回调接口 |
调用识别接口,参考代码如下:
sdk.recognizeDriveLicense(bitmapData, new DriveLicenseRecognizeCallBack() {
@Override
public void onDriveLicenseRecognize(DriveLicenseOCRInfo driveLicenseOCRInfo, int status, String message) {
if (status == 0) {
mDemo_drive_name.setText(driveLicenseOCRInfo.getName());
mDemo_drive_no.setText(driveLicenseOCRInfo.getCertNo());
mDemo_drive_sex.setText(driveLicenseOCRInfo.getSex());
mDemo_drive_nation.setText(driveLicenseOCRInfo.getNationality());
mDemo_drive_address.setText(driveLicenseOCRInfo.getAddress());
mDemo_drive_birthday.setText(driveLicenseOCRInfo.getBirthday());
mDemo_drive_get_day.setText(driveLicenseOCRInfo.getGetCertTime());
mDemo_drive_type.setText(driveLicenseOCRInfo.getType());
mDemo_drive_effect_day.setText(driveLicenseOCRInfo.getValidateFrom() + "-" + driveLicenseOCRInfo.getValidateTo());
mDemo_drive_effect_year.setText(driveLicenseOCRInfo.getValidateTime());
} else {
showToast(message);
}
}
});
DriveLicenseRecognizeCallBack回调接口封装了识别后的驾驶证信息,识别结束后回调此类
public void onDriveLicenseRecognize(DriveLicenseOCRInfo driveLicenseOCRInfo, int status, String message)
方法,当status==0时,表示识别成功,可从driveLicenseOCRInfo对象中取出相关信息,否则driveLicenseOCRInfo为null。message封装了相关描述信息。DriveLicenseOCRInfo对象封装了驾驶证信息,具体见下表:
名称 |
类型 |
描述 |
name |
String |
姓名 |
certNo |
String |
证号 |
sex |
String |
性别 |
nationality |
String |
国籍 |
address |
String |
住址 |
birthday |
String |
出生日期 |
getCertTime |
String |
初次领证日期 |
type |
String |
准驾车型 |
validateFrom |
String |
有效开始日期 |
validateTo |
String |
有效结束日期 |
validateTime |
String |
有效年限 |
2.5 行驶证识别
SDK Pro中细化封装了行驶证识别接口,用以获取行驶证图片,并调用相关接口识别行驶证信息。
2.5.1 行驶证图像获取
1.实例化PayegisAuthOCRSDK类。
sdk = new PayegisAuthOCRSDK (this, Const.AppId, Const.AppKey);
2.调用行驶证OCR扫描页,获取行驶证图像,获取图像以startActivityForResult()方式获取,具体分为三步:
step1 获取相应Intent,并调用扫描页。具体方法名:
public Intent createCommonOCRIntent(Context context)
调用方法createCommonOCRIntent (),获取相应Intent。参考代码:
//获取通用OCR Intent
Intent it = sdk.createCommonOCRIntent(this);
//调用扫描页,获取图片
if (it != null) {
startActivityForResult(it, PayegisAuthOCRSDK.LF_SCAN_COMMON_REQUEST);
}
startActivityForResult ()方法第二个参数指定了获取通用图像,其具体定义在PayegisAuthOCRSDK常量中,对于通用OCR主要有1个常量定义:
常量名称 |
定义 |
PayegisAuthOCRSDK.LF_SCAN_COMMON_REQUEST |
获取通用图片 |
step2 调用扫描页,并处理结果
获取图像,以startActivityForResult()方式获取,在activity回调中获取相应图片,参考代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (PayegisAuthOCRSDK.LF_SCAN_COMMON_REQUEST == requestCode && resultCode == RESULT_OK) {
filePath = data.getStringExtra(PayegisAuthOCRSDK.KEY_IMAGE_PATH);
new Thread(new Runnable() {
@Override
public void run() {
final Bitmap map = ImgUtil.getBitmapByPath(filePath);
bitmapData = SDKUtil.Bitmap2Bytes(map);
runOnUiThread(new Runnable() {
@Override
public void run() {
mDemo_img_drive_ocr.setImageBitmap(map);
}
});
}
}).start();
}
}
step3 从本地获取相应图片
在对应的requestCode下获取图像,在onActivityResult()回调中取出Intent,并从Intent PayegisAuthOCRSDK.KEY_IMAGE_PATH KEY中获取图像本地路径,获取到真实图像文件。以上代码中ImgUtil和SDKUtil为Mini OCR 中提供的工具类,您可以通过ImgUtil.getBitmapByPath(filePath)快速从本地路径获取一个Bitmap对象,通过SDKUtil.Bitmap2Bytes(map)快速将Bitmap对象转化成字节数组,以方便图像展示和上传识别。
2.5.2 识别行驶证
获取到行驶证图像后,可以调用Mini OCR行驶证识别接口,识别出行驶证信息。具体方法名:
public void recognizeVehicleLicense(byte[] vehicleImage, VehicleLicenseRecognizeCallBack vehicleLicenseRecognizeCallBack)
此方法有两个个参数:
参数名称 |
类型 |
说明 |
vehicleImage |
byte[] |
行驶证图像 |
vehicleLicenseRecognizeCallBack |
VehicleLicenseRecognizeCallBack |
识别回调接口 |
调用识别接口,参考代码如下:
sdk.recognizeDriveLicense(bitmapData, new DriveLicenseRecognizeCallBack() {
@Override
public void onDriveLicenseRecognize(DriveLicenseOCRInfo driveLicenseOCRInfo, int status, String message) {
if (status == 0) {
mDemo_drive_name.setText(driveLicenseOCRInfo.getName());
mDemo_drive_no.setText(driveLicenseOCRInfo.getCertNo());
mDemo_drive_sex.setText(driveLicenseOCRInfo.getSex());
mDemo_drive_nation.setText(driveLicenseOCRInfo.getNationality());
mDemo_drive_address.setText(driveLicenseOCRInfo.getAddress());
mDemo_drive_birthday.setText(driveLicenseOCRInfo.getBirthday());
mDemo_drive_get_day.setText(driveLicenseOCRInfo.getGetCertTime());
mDemo_drive_type.setText(driveLicenseOCRInfo.getType());
mDemo_drive_effect_day.setText(driveLicenseOCRInfo.getValidateFrom() + "-" + driveLicenseOCRInfo.getValidateTo());
mDemo_drive_effect_year.setText(driveLicenseOCRInfo.getValidateTime());
} else {
showToast(message);
}
if (!DriveLicenseActivity.this.isFinishing() && processDialog != null && processDialog.isShowing()) {
processDialog.dismiss();
}
}
});
VehicleLicenseRecognizeCallBack回调接口封装了识别后的行驶证信息,识别结束后回调此类
public void onVehicleLicenseRecognize(VehicleLicenseOCRInfo vehicleLicenseOCRInfo, int status, String message)
方法,当status==0时,表示识别成功,可从vehicleLicenseOCRInfo对象中取出相关信息,否则vehicleLicenseOCRInfo为null。message封装了相关描述信息。VehicleLicenseOCRInfo对象封装了行驶证信息,具体见下表:
名称 |
类型 |
描述 |
plate |
String |
号牌号码 |
carType |
String |
车辆类型 |
name |
String |
所有人 |
address |
String |
住址 |
useType |
String |
使用性质 |
brand |
String |
品牌型号 |
nickNo |
String |
车辆识别代码 |
engine |
String |
发动机号码 |
registerDate |
String |
注册日期 |
certDate |
String |
发证日期 |
2.6 权限说明
远程实名认证Mini OCR需要获取系统相关权限,在使用SDK时,需要动态获取以下3个权限,否则SDK将无法正常使用。
名称 |
描述 |
READ_PHONE_STATE |
读取手机状态 |
WRITE_EXTERNAL_STORAGE |
读写磁盘 |
CAMERA |
使用相机 |
授权参考代码如下:
/**
* 申请权限
*/
private void initPermission() {
ArrayList<String> perList = new ArrayList<>();
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
perList.add(Manifest.permission.READ_PHONE_STATE);
}
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
perList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
perList.add(Manifest.permission.CAMERA);
}
if (perList.size() > 0) {
String[] perArr = new String[perList.size()];
perList.toArray(perArr);
ActivityCompat.requestPermissions(this, perArr, 100);
}
}
2.7 混淆说明
远程实名认证SDK已经经过混淆,所以在打包时添加以下忽略:
-dontwarn com.**
-dontwarn cn.**
-dontwarn org.**
-dontwarn android.**
-dontwarn android.support.**
-dontwarn org.apache.**
#ocr
-keep public class com.payegis.authsdk.** { *;}
-keep public class com.payegis.pgsocr.** { *;}
-keep public class com.baidu.**{ *;}