申请权限
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.appidparam.orderNo = signTool.randomString(12)param.nonce = signTool.nonceparam.userId = signTool.useridparam.sign = dataparam.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 = ''/// 人像面/国徽面识别视频 URLfrontVideoURL = ''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 |