开发准备
Android 端 OCR SDK 接入流程
Android 端OCR SDK 介绍
SDK 提供的文件为 OCR_Android_SDK_V1.0.9,该文件封装了 OCR 识别终端能力。目前包括了身份证识别、银行卡识别、名片识别、车辆 Vin 码识别、车牌识别、驾驶证识别以及行驶证识别。
环境依赖
当前 Android 端 OCR 识别 SDK 适用于 API 19 (Android 4.4) 及以上版本。
接入步骤
将 OcrSDKv1.0.2-alpha.aar 添加到您工程目录的 libs 目录下。
在您工程的 build.gradle 中进行如下配置:
dependencies { // 依赖腾讯云的 OcrSDK 的 aar implementation files('libs/OcrSDKv1.0.2-alpha.aar') // OCR SDK 返回实体对象需要的依赖 implementation 'com.google.code.gson:gson:2.8.5' }
同时需要在 AndroidManifest.xml 文件中进行必要的权限声明
<!--摄像头使用权限--> <uses-feature android:name="android.hardware.camera" /> <uses-permission android:name="android.permission.CAMERA" android:required="true" /> <!--文件存储使用权限--> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--网络访问权限--> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
对于需要兼容 Android 6.0 以上的用户,以上权限除了需要在 AndroidManifest.xml 文件中声明权以外,还需使用代码动态申请权限。
SDK 接口使用说明
SDK 初始化:
使用 OCR SDK 之前需要进行初始化,您可以按照您的需求设置默认值。
// 启动参数配置
OcrModeType modeType = OcrModeType.OCR_DETECT_AUTO_MANUAL; // 设置默认的业务识别模式自动 + 手动步骤模式
OcrType ocrType = OcrType.BankCardOCR; // 设置默认的业务识别,银行卡
OcrSDKConfig configBuilder = OcrSDKConfig.newBuilder(SecretPamera.secretId, SecretPamera.secretKey, null)
.ocrType(ocrType)
.setModeType(modeType)
.build();
// 初始化 SDK
OcrSDKKit.getInstance().initWithConfig(this.getApplicationContext(), configBuilder);
目前 OCR SDK 支持的业务模式:
OcrModeType 类型 | 代表含义 |
---|---|
OCR_DETECT_MANUAL | 手动拍摄模式 |
OCR_DETECT_AUTO_MANUAL | 自动识别模式(tips:20s后提示,是否切换到手动拍摄) |
更新临时密钥
OCR SDK 支持使用临时密钥接口,使用临时密钥的好处主要有以下两点,第一将固定密钥与终端分离可以增加安全性;第二因为兑换临时密钥是您完全可控的行为,因此您可以根据自定义规则来控制最终用户的接口访问权限。因此建议您使用临时密钥的方式,具体可以参考文档 (临时密钥文档与流程链接)
OcrSDKKit.getInstance().updateFederationToken(tmpSecretId, tmpSecretKey, token);
OCR 识别(返回 Json 字符串):
当您需要使用 OCR 识别的功能的时候,您可以直接调用识别接口,进行 OCR 业务识别。
// 启动 ocr 识别,识别类型为身份证正面
OcrSDKKit.getInstance().startProcessOcr(MainActivity.this, OcrType.IDCardOCR_FRONT, customConfigUi, new ISDKKitResultListener() {
@Override
public void onProcessSucceed(String response, String srcBase64Image, String requestId) {
popTip(response, "Succeed"); // 展示 ocr 识别结果
}
@Override
public void onProcessFailed(String errorCode, String message, String requestId) {
popTip(message, errorCode); // 展示 ocr 识别错误信息
}
});
OCR 识别(返回对象实体类):
当您需要使用 OCR 识别功能,同时需要直接获取实体对象而非 JsonString 时,可以使用此方法。
OcrSDKKit.getInstance().startProcessOcrResultEntity(OcrTypeIdCardActivity.this,
OcrType.IDCardOCR_FRONT, null, IdCardOcrResult.class,
new ISdkOcrEntityResultListener<IdCardOcrResult>() {
@Override
public void onProcessSucceed(IdCardOcrResult idCardOcrResult, String base64Str) {
Log.e(TAG, "IdCardOcrResult:" + idCardOcrResult.toString()); // OCR 识别成功 IdCardOcrResult
}
@Override
public void onProcessFailed(String errorCode, String message, String requestId) {
Log.e(TAG, "errorCode:" + errorCode + " message:" + message); // OCR 识别失败 IdCardOcrResult
}
});
目前 OCR SDK 支持五种类型的识别模式如下表所示,以及对应的实体类返回结果。
OcrType 类型 | 代表含义 | 对应结果实体类 |
---|---|---|
OcrType.IDCardOCR_FRONT | 身份证人像面识别模式 | IdCardOcrResult |
OcrType.IDCardOCR_BACK | 身份证国徽面识别模式 | IdCardOcrResult |
OcrType.BankCardOCR | 银行卡正面识别模式 | BankCardOcrResult |
OcrType.BusinessCardOCR | 名片卡正面识别模式 | BusinessCardOcrResult |
OcrType.MLIdCardOCR | 马来西亚身份证识别模式 | MalaysiaIdCardOcrResult |
OcrType.VinOCR | 车辆的 VIN 识别模式 | VinOcrResult |
OcrType.LicensePlateOCR | 车辆的车牌识别模式 | CarLicensePlateResult |
OcrType.DriverLicenseOCR_FRONT | 驾驶证主页识别模式 | DriverLicenseCardResult |
OcrType.DriverLicenseOCR_BACK | 驾驶证副页识别模式 | DriverLicenseCardResult |
OcrType.VehicleLicenseOCR_FRONT | 行驶证主页识别模式 | VehicleLicenseCardResult |
OcrType.VehicleLicenseOCR_BACK | 行驶证副页识别模式 | VehicleLicenseCardResult |
SDK 版本号获取:
OCR SDK 提供了直接获取 SDK 版本号的接口,您可以调用此接口获取。
OcrSDKKit.getInstance().getVersion()
SDK 资源释放:
在您 App 退出使用或者需要重启加载 OCR 功能的时候,可以调用 SDK 资源释放接口。
@Override
protected void onDestroy() {
if (mDialog != null) {
mDialog.dismiss();
}
// 释放 OCR SDK 的资源
OcrSDKKit.getInstance().release();
super.onDestroy();
}
混淆规则配置
如果您的应用开启了混淆功能,为确保 SDK 的正常使用,请把以下部分添加到您的混淆文件中。
#保留自定义的 OcrSDKKit 类和类成员不被混淆
-keep class com.tencent.ocr.sdk.** {*;}
#第三方 jar 包不被混淆
-keep class com.tencent.youtu.** {*;}
常见问题
如同时集成其余 SDK,出现 More than one file was found with OS independent path 'lib/armeabi-v7a/libc++_shared.so'. 的问题。
主要是 OCR SDK 和其余 SDK 都添加了libc++_shared.so
这个库,解决办法可以在 build.gradle 中添加如下配置:android { ... // 过滤重复定义 so 的问题 packagingOptions{ pickFirst 'lib/armeabi-v7a/libc++_shared.so' } }
如果集成方使用了 AndResGuard 的混淆工具,可以添加混淆配置:
// for OCR SDK "R.string.ocr_*", "R.string.rst_*", "R.string.net_*", "R.string.msg_*",
集成 OCR SDK 后如果出现 Invoke-customs are only supported starting with Android O (--min-api 26) 错误?
需要在 build.gradle 中添加如下配置:// java 版本支持1.8 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }