OCR Harmony SDK 接入

最近更新时间:2024-07-05 15:41:11

我的收藏

申请权限

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 接口的回调结果。
其中,卡片识别结果定义在如下几个类里面,不同的卡片类型,对应相应类型的结果对象。

身份证识别

身份证识别的时候,入参卡片类型可以选择如下三个:
idCard,进入是连续识别模式,先识别人像面,再识别国徽面
idCardFrontSide,人像面识别
idCardBackSide,国徽面识别
身份证识别的结果返回类型为 IdCardFrontModel,参数字段如下。
/*
* @brief WBIDCardInfoModel类封装了身份证的正反面信息
* SDK会将识别结果包装成一个WBIDCardInfoModel实例,通过回调block通知第三方

* @detail 字段含义
- idcard 公民身份号码
- name 姓名
- sex 性别
- nation 民族
- address 住址
- birth 出生
- authority 签发机关
- validDate 有效期限
- frontFullImg 国徽面截图
- backFullImg 人像面截图
- warning 识别结果警告信息
- multiWarning 多重告警码,人像面是frontMultiWarning,国徽面对应backMultiWarning
- clarity 图片清晰度,人像面是frontClarity,国徽面对应backClarity
*/

export class IDCardModel extends KYCOCRBaseModel {
/// 身份证人像面信息
idcard = ''
name = ''
sex = ''
nation = ''
address = ''
birth = ''
/// 身份证国徽面信息
authority = ''
validDate = ''
/// 人像面/国徽面识别结果截图信息
frontFullImg = ''
backFullImg = ''
frontCode = ''
frontMsg = ''
backCode = ''
backMsg = ''
/// warning,人像面/国徽面识别结果对应的警告信息
frontWarning = ''
frontMultiWarning = ''
backWarning = ''
backMultiWarning = ''
frontClarity = ''
backClarity = ''
/// 人像面/国徽面识别视频 URL
frontVideoURL = ''
backVideoURL = ''
/// 人像面/国徽面切边图 base64 编码字符串
frontCrop = ''
backCrop = ''
}

export { KYCOCRBaseModel }


Harmony OCR 错误码

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