资讯 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

快速入门

快速入门

支持的系统和硬件版本:

项目 要求
DevEco Studio 5.0.0 及以上
HarmonyOS SDK API 12 及以上
编译 SDK 5.0.0(12)
目标设备 phone
运行系统 HarmonyOS 5.0 及以上

开发包说明

aip-ocr-harmonyos-sdk.zip   // OCR SDK 包,包括文档、sample 工程、SDK 核心库
|- sample/                      // sample 示例工程
|- libs/                        // lib 库,包括 .har 包
|  |- ocr-core.har              // 核心模块
|  |- ocr-online.har            // 在线识别能力模块
|- docs/                        // 说明文档

SDK 以 HAR 形式提供,可以通过 oh-package.json5 依赖引入,Sample 工程使用 DevEco Studio 打开。

为您自己的工程添加必要的依赖

在应用模块的 oh-package.json5 中添加:

{
  "dependencies": {
    "@baidu/ocr-core": "file:./libs/ocr-core.har",
    "@baidu/ocr-online": "file:./libs/ocr-online.har"
  }
}

@baidu/ocr-online 通过副作用导入触发能力注册。使用识别接口前必须在任意入口执行一次 import '@baidu/ocr-online',否则会得到 UNSUPPORTED_OCR_TYPE 错误。

为您自己的工程添加必要的权限

src/main/module.json5 中添加:

"requestPermissions": [
  {
    "name": "ohos.permission.INTERNET"
  },
  {
    "name": "ohos.permission.CAMERA",
    "reason": "$string:permission_camera_reason",
    "usedScene": {
      "abilities": ["YourAbility"],
      "when": "inuse"
    }
  }
]

各个权限的用途说明见下表:

名称 用途
ohos.permission.INTERNET 应用联网,发送请求数据至服务器,获得识别结果
ohos.permission.CAMERA 调用相机进行拍照(仅使用扫描模式时需要)

ohos.permission.CAMERA 声明必须包含 reason 字段,否则系统不会弹出权限弹窗。SDK 不会主动申请相机权限,业务方需在调用扫描接口前自行调用 abilityAccessCtrl 完成权限申请。

放置资源文件(仅使用身份证识别时需要)

如果需要身份证自动采集质量检测,将以下文件放到 src/main/resources/rawfile/ 下:

  • License 文件(如 ocr_license.ini
  • 身份证质量检测模型目录(如 baiducard/

不使用身份证识别的应用可跳过此步骤。License 用于身份证质量检测模型的离线鉴权,与在线 API 鉴权是两个独立体系。

Sample 使用说明

SDK 包中提供了一个可快速运行的 Sample 工程,位于 sample/ 目录,已经集成了 SDK 核心库、在线能力模块和默认采集 UI。使用 DevEco Studio 5.0+ 打开工程根目录即可导入。

项目
模块路径 sample/entry/
入口页面 DemoPage.ets
入口 Ability DemoAbility.ets
最低 API 版本 API 12
目标设备 phone、tablet
IDE DevEco Studio 5.0+
构建工具 hvigor
包管理器 ohpm
签名 需配置自动签名(Project Structure -> Signing Configs)
鉴权方式 access_token(从 rawfile 的 local.properties 读取)

配置步骤

  1. 复制 sample/entry/src/main/resources/rawfile/local.properties.examplelocal.properties,填入真实 access_token:
# 通过 API Key + Secret Key 换取的 token
access_token=YOUR_REAL_ACCESS_TOKEN
  1. 如需验证身份证自动采集,将 License 文件与模型目录放到 sample/entry/src/main/resources/rawfile/ 下:
资源 路径
License 文件 sample/entry/src/main/resources/rawfile/license.txt
模型目录 sample/entry/src/main/resources/rawfile/baiducard_models/
  1. 在 DevEco Studio 中配置自动签名:File -> Project Structure -> Signing Configs,勾选 Automatically generate signature,登录华为开发者账号完成签名。
  2. 选择目标设备(真机或模拟器),选择 entry 模块作为运行目标,点击 Run 按钮。

首次运行成功标志:页面显示"初始化成功,支持 N 种类型"。

若运行提示身份验证错误,可能是您还未填写正确的 access_token,或者是还未在百度智能云控制台绑定 HarmonyOS 应用的 bundleName。如何绑定 bundleName 请参考 身份验证与安全 章节。

身份验证与安全

百度 AI 开放平台使用 OAuth2.0 授权调用开放 API,调用 API 时必须在请求中携带鉴权凭据。凭据可用 access_token、AK/SK、IAM API Key 或自定义 Token 提供器方式获得。HarmonyOS SDK 已经为您做了封装,当初始化完毕后,所有识别请求会自动携带鉴权信息,无需业务方在每次调用时手动传入。

OCR HarmonyOS SDK 提供了以下 4 种在线 API 鉴权方式,选其一即可。

方式 参数键 适用场景 安全性 优先级
IAM API Key IAM_API_KEY 企业级权限管理 1(最高)
access_token ACCESS_TOKEN 快速验证、开发调试 2
API Key + Secret Key API_KEY + SECRET_KEY 服务端中转下发 3
自定义 Token 提供器 AUTH_TOKEN_PROVIDER 企业自有鉴权中心,动态获取 token 取决于实现 4(最低)

优先级含义:当同时传入多种鉴权参数时,SDK 按上表从高到低选取第一个有效值。示例:同时设置了 IAM_API_KEYACCESS_TOKEN,SDK 使用 IAM_API_KEY 鉴权。

身份证质量检测能力 License(仅身份证需要)

除了包含远程API调用能力外,鸿蒙SDK中还集成了身份证识别的本地质量控制能力,提供给开发者本地检测身份证的功能。如果使用身份证正面/反面识别(ID_CARD_FRONT / ID_CARD_BACK),且需要自动采集质量检测功能,则还需配置 License 文件。License 用于身份证质量检测模型的离线鉴权,与在线 API 鉴权是两个独立体系,不参与上表的优先级判定。

项目 说明
是否必须 仅使用身份证识别且需要自动采集时必须。不使用身份证则完全不需要
配置位置 通过 OcrOptions.initParams 设置
文件位置 放置在 src/main/resources/rawfile/
绑定方式 绑定应用 bundleName 和签名指纹
失败影响 License 不可用时身份证退回手动拍照,不影响其他所有识别类型

方式 1:IAM API Key

使用百度智能云 IAM 体系的 API Key 进行鉴权,凭据以 Authorization: Bearer 头形式发送。

const options = new OcrOptions();
options.putParam(OnlineAuthParams.IAM_API_KEY, 'your_iam_api_key');

await OnlineOcrClient.getInstance().initializeAsync(context, options);

特点:

项目 说明
权限粒度 支持 IAM 策略精细控制
端侧刷新 有。SDK 内建缓存与后台刷新机制,长期驻留友好
适用场景 企业级多部门、多应用权限隔离
安全建议 通过 IAM 控制台管理密钥生命周期

方式 2:通过 access_token

此方案使用由 AK/SK 换取的短期 token,通常在服务端获取后下发到端侧。

import common from '@ohos.app.ability.common';
import {
  OnlineOcrClient, OcrOptions, OcrInitResult,
  OnlineAuthParams
} from '@baidu/ocr-core';
import '@baidu/ocr-online';

async function initOcrSdk(context: common.Context, accessToken: string): Promise<void> {
  const options = new OcrOptions();
  options.putParam(OnlineAuthParams.ACCESS_TOKEN, accessToken);

  const result: OcrInitResult = await OnlineOcrClient.getInstance()
    .initializeAsync(context, options);

  console.info(`OCR SDK 初始化完成,支持 ${result.getSupportedTypes().length} 种能力`);
}

特点:

项目 说明
有效期 30 天(以百度云实际策略为准)
获取方式 服务端调用百度云鉴权接口,用 AK/SK 换取后下发
端侧刷新 无。SDK 不自动续期,过期后需重新 initializeAsync
安全建议 由服务端获取后下发给端侧,不要在端侧直接存储 AK/SK

方式 2:通过 API Key / Secret Key

直接传入 AK/SK,SDK 内部完成 token 换取并自动刷新。

const options = new OcrOptions();
options.putParam(OnlineAuthParams.API_KEY, 'your_api_key');
options.putParam(OnlineAuthParams.SECRET_KEY, 'your_secret_key');

await OnlineOcrClient.getInstance().initializeAsync(context, options);

特点:

项目 说明
自动刷新 SDK 内部管理 token 生命周期,临近过期自动续期
安全建议 密钥应存储在服务端,通过安全通道下发,不建议硬编码在端侧代码

方式 4:自定义 Token 提供器

当业务有特殊的 token 管理需求(如企业自有鉴权中心、动态切换鉴权通道),可通过自定义提供器接入。

const options = new OcrOptions();
options.putParam(OnlineAuthParams.AUTH_TOKEN_PROVIDER, 'your_provider_identifier');

await OnlineOcrClient.getInstance().initializeAsync(context, options);

身份证质量检测 License 配置

License 不属于在线 API 鉴权方式,而是身份证质量检测模型的独立离线授权。通过 OcrOptions.initParams 配置:

import {
  OcrInitParams, OnlineAuthParams, OnlineOcrTypes
} from '@baidu/ocr-core';
import { IdCardInitParams } from '@baidu/ocr-online';

const options = new OcrOptions();
// 先设置在线 API 鉴权(4 种方式选一)
options.putParam(OnlineAuthParams.ACCESS_TOKEN, 'your_token');

// 再设置身份证质量检测 License(仅使用身份证时需要)
const idCardInit = new OcrInitParams();
idCardInit.putParam(IdCardInitParams.LICENSE_KEY, 'your_license_key');
idCardInit.putParam(IdCardInitParams.LICENSE_NAME, context.resourceDir + '/ocr_license.ini');
idCardInit.params.set(IdCardInitParams.LICENSE_IS_REMOTE, true);
idCardInit.putParam(IdCardInitParams.RESOURCE_DIR_PATH, context.resourceDir + '/baiducard');

options.initParams.set(OnlineOcrTypes.ID_CARD_FRONT.value(), idCardInit);
options.initParams.set(OnlineOcrTypes.ID_CARD_BACK.value(), idCardInit);

await OnlineOcrClient.getInstance().initializeAsync(context, options);

License 绑定应用 bundleName 和签名指纹,攻击者即使拦截了流量、盗取了授权文件,也难以盗用您的配额。不使用身份证识别的应用完全不需要配置以上 License 相关参数。

鉴权流程

initializeAsync(context, options)
  |
  v
按优先级选取在线 API 鉴权方式
  |
  +-> IAM_API_KEY 存在?使用 IAM Bearer 鉴权
  |
  +-> ACCESS_TOKEN 存在?直接使用该 token
  |
  +-> API_KEY + SECRET_KEY 存在?SDK 内部换取 token
  |
  +-> AUTH_TOKEN_PROVIDER 存在?调用自定义提供器
  |
  +-> 均未配置?抛出 AUTH_ERROR
  |
  v
注册识别能力(身份证 License 在此阶段校验)
  |
  +-> initParams 中有身份证 License:初始化质量检测模型
  |     +-> 成功:身份证自动采集可用
  |     +-> 失败:身份证退回手动拍照(其他类型不受影响)
  |
  +-> 无身份证 License:跳过(其他类型正常可用)

最小识别示例

初始化完成后,即可发起一次身份证识别:

import {
  OnlineOcrClient, OcrType, OcrError, OcrJSONCallback,
  OcrCaptureOptions, CaptureMode
} from '@baidu/ocr-core';
import { OnlineOcrTypes, IdCardParams } from '@baidu/ocr-online';

function scanIdCard(abilityContext: common.UIAbilityContext): void {
  const captureOptions = new OcrCaptureOptions();
  captureOptions.setCaptureMode(CaptureMode.AUTO);

  const params = new IdCardParams();

  OnlineOcrClient.getInstance().scanForJSON(
    abilityContext,
    OnlineOcrTypes.ID_CARD_FRONT,
    captureOptions,
    params,
    {
      onSuccess(responseJSON: string): void {
        // responseJSON 为服务端完整 JSON 响应
        console.info('识别成功: ' + responseJSON);
      },
      onFailure(error: OcrError): void {
        console.error(`识别失败: code=${error.code}, message=${error.message}`);
      },
      onCanceled(): void {
        console.info('用户取消');
      }
    } as OcrJSONCallback
  );
}

页面销毁或不再使用时释放资源:

OnlineOcrClient.getInstance().release();

完成上述步骤后即可运行工程,跑通一次完整的采集识别流程。

上一篇
版本更新记录
下一篇
接口调用说明