OCR Harmony SDK接入

最近更新时间:2024-07-03 18:06:31

我的收藏

申请权限

SDK 需要使用到网络和相机权限,需要在 module.json5 文件中申请 ohos.permission.INTERNET 和 ohos.permission.CAMERA 权限,权限申请参考鸿蒙官方文档和示例 demo。
"requestPermissions": [
{
"name": "ohos.permission.INTERNET",
"reason": "$string:reason_internet",
"usedScene": {
"abilities": [
"FormAbility"
],
"when": "always"
}
},
{
"name": "ohos.permission.CAMERA",
"reason": "$string:reason_camera",
"usedScene": {
"abilities": [
"FormAbility"
],
"when": "inuse"
}
}
]


SDK 集成

在 oh-package.json5 中添加 SDK 的依赖。




SDK调用流程

调用方法如下。
startOCRService 函数封装了 SDK 的调用,SDK 的调用流程可以分解为三个步骤:
合作方获取签名,SignTool 模拟合作方获取签名
调用 WBOCRService.init 函数初始化 SDK
init 成功之后,调用 WBOCRService.startService 开始识别
注意:
init 和 start 成对调用,一次 init 一次 start。
卡片类型在 init 接口的 OCRParam.sdkType 里面设置。支持的卡片类型见 CardType 定义。
export enum CardType { idCard, idCardFrontSide, idCardBackSide, bankCard, vehicleLicenseHomePage, vehicleLicenseSecondaryPage, driverLicense, } startOCRService 的源代码如下。 startOCRService(type: CardType) { let service = WBOCRService.getInstance() let param = new OCRParam() let signTool = new SignTool() signTool.getSign().then((data) => { console.log(data); this.prompt = `sign:${data}` param.appId = signTool.appid param.orderNo = signTool.randomString(12) param.nonce = signTool.nonce param.userId = signTool.userid param.sign = data param.sdkType = type; service.init(param, { onSuccess: () => { console.log('SDK 初始化成功 - 调用 start 接口') service.startService({ onSuccess: (res: object) => { console.log('SDK 识别成功') console.log(JSON.stringify(res)) this.prompt = JSON.stringify(res) }, onFailure: (error: OCRError) => { console.error('SDK 识别失败!') console.error(JSON.stringify(error)) this.prompt = JSON.stringify(error) } }) }, onFailure: (error: OCRError) => { console.log('SDK 初始化失败!') console.log(JSON.stringify(error)) this.prompt = JSON.stringify(error) } }) }).catch((e: BusinessError) => { console.error(`err:${e.code},${e.message},${e.name}`) this.prompt = `err:${e.code},${e.message},${e.name}` }) }
接入方 APP 需要接收和处理 init 以及 start 接口的回调结果。
其中,卡片识别结果定义在如下几个类里面,不同的卡片类型,对应相应类型的结果对象。

银行卡识别

银行卡识别的时候,入参卡片类型选择 bankCard,返回值类型定义如下。
/** * @brief 银行卡信息 * @detail 字段含义 - bankcardFullImg 银行卡识别的照片 - bankcardNoPhoto 银行卡卡号切图 - bankcardNo 银行卡号 - bankcardValidDate 银行卡有效期(年/月,没有为空) - warningCode 警告码 - warningMsg 警告码描述 - multiWarningCode 多重警告码 - multiWarningMsg 多重警告码描述 - clarity 图片清晰度 - bankcardInfo 卡片信息 - bankcardType 卡片类型 - bankcardName 卡片名称 */ export class BankCardModel extends KYCOCRBaseModel { bankcardFullImg = '' bankcardNoPhoto = '' bankcardNo = '' bankcardValidDate = '' warningCode = '' warningMsg = '' multiWarningCode = '' multiWarningMsg = '' clarity = '' bankcardInfo = '' bankcardType = '' bankcardName = '' }


Harmony OCR 错误码

返回码
返回信息
处理措施
100100
传入 SDK 参数不合法
检查传入参数是否合法
100101
SDK 未登录
未登录 SDK (调用 startOCRService 之前,需要调用 init 登录)
100103
APP 没有相机权限
APP 没有相机权限
200101
用户取消操作
用户主动退出操作
200102
识别超时
用户在身份证正反面识别过程中超过设定的阈值(20S)无法识别,提示超时
300101
不合法请求(300102)
检查传入参数是否正确
300102
网络出小差啦
更换网络环境
400100
SDK 重复进入
重复调用 SDK