腾讯云文字识别快速集成(Android)_AI解决方案_同尘科技

文字识别 1年前 (2023-08-08) 浏览 71

开发准备

1. 注册腾讯云账号,单击进入 文字识别控制台,即可开通相应服务。2. 在 账号中心 获取 API 密钥。3. 前往文字识别客户端 SDK 接入页面 下载对应 SDK。


Android 端 OCR SDK 接入流程

Android 端OCR SDK 介绍

SDK 提供的文件为 OCR_Android_SDK_V1.0.9,该文件封装了 OCR 识别终端能力。目前包括了身份证识别、银行卡识别、名片识别、车辆 Vin 码识别、车牌识别、驾驶证识别以及行驶证识别。

环境依赖

当前 Android 端 OCR 识别 SDK 适用于 API 19 (Android 4.4) 及以上版本。

接入步骤

1. 将 OcrSDK-public-v2.0.0.1-release.aarOcrSDK-common-model-v1.0.0-release.aar 和公共库 tencent-ai-sdk-aicamera-1.0.18-release.aartencent-ai-sdk-common-1.1.27-release.aar添加到您工程目录的 libs 目录下。2. 在您工程的 build.gradle 中进行如下配置:

dependencies {  // 依赖腾讯云的 OcrSDK 的 aar  implementation files('libs/OcrSDK-common-model-v1.0.0-release.aar')  implementation files('libs/OcrSDK-public-v2.0.0.1-release.aar')  implementation files('libs/tencent-ai-sdk-aicamera-1.0.18-release.aar')  implementation files('libs/tencent-ai-sdk-common-1.1.28-release.aar')  // OCR SDK 返回实体对象需要的依赖  implementation 'com.google.code.gson:gson:2.8.5'}

3. 同时需要在 AndroidManifest.xml 文件中进行必要的权限声明

对于需要兼容 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)    .setOcrType(ocrType)    .setModeType(modeType)    .build();// 初始化 SDKOcrSDKKit.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() {            @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.VinOCR 车辆的 VIN 识别模式 VinOcrResult
OcrType.LicensePlateOCR 车辆的车牌识别模式 CarLicensePlateResult
OcrType.DriverLicenseOCR_FRONT 驾驶证主页识别模式 DriverLicenseCardResult
OcrType.DriverLicenseOCR_BACK 驾驶证副页识别模式 DriverLicenseCardResult
OcrType.VehicleLicenseOCR_FRONT 行驶证主页识别模式 VehicleLicenseCardResult
OcrType.VehicleLicenseOCR_BACK 行驶证副页识别模式 VehicleLicenseCardResult
OcrType.GENERAL_VIN 车辆的VIN码通用识别模式(主要推荐拍照模式使用) VinOcrResult
OcrType.IDCardOCR_HK03 香港身份证03版本识别模式 HKIDCardOcrResult
OcrType.IDCardOCR_HK18 香港身份证18版本识别模式 HKIDCardOcrResult
OcrType.Exit_Entry_HK_Macao_Card 港澳台通行证识别模式 PermitOcrResult
OcrType.MLID_PASSPORT 国际护照识别模式 MLIDPassportOcrResult
OcrType.HMT_RESIDENT_PERMIT_OCR 港澳台居住证 HmtResidentPermitOcrResult

SDK 版本号获取:

OCR SDK 提供了直接获取 SDK 版本号的接口,您可以调用此接口获取。

OcrSDKKit.getInstance().getVersion()

SDK 资源释放:

在您 App 退出使用或者需要重启加载 OCR 功能的时候,可以调用 SDK 资源释放接口。

@Overrideprotected 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.** {*;}#公共库相关内容不混淆-keep class com.tencent.could.** {*;}

常见问题

1. 如同时集成其余 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' }}

2. 如果集成方使用了 AndResGuard 的混淆工具,可以添加混淆配置:

// for OCR SDK"R.string.ocr_*","R.string.rst_*","R.string.net_*","R.string.msg_*",

3. 集成 OCR SDK 后如果出现 Invoke-customs are only supported starting with Android O (–min-api 26) 错误?
需要在 build.gradle 中添加如下配置:

// java 版本支持1.8compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}

4. 如果使用了 AutoSize 组件,同时又使用了 OCR 的横屏模式时,横屏模式出现页面元素大小异常的问题。主要原因是 AutoSize 默认设置为竖屏情况下的宽高基准,可以在 Application 里注册下面的回调,实现横竖屏基准自适应:

  /*** AutoSize随界面横竖自适应方法, 可在Application中注册* 以design_width_in_dp 360, design_height_in_dp 640 为例(客户可以修改成自己定义的)*     *     **  DESIGN_WIDTH_DP = 360;*  DESIGN_WIDTH_DP = 640;*/  public static void addAutoSizeListener() {   AutoSizeConfig.getInstance().setOnAdaptListener(new onAdaptListener() {       @Override       public void onAdaptBefore(Object target, Activity activity) {           Context context = activity;           int[] currentSize = ScreenUtils.getScreenSize(context);           // 设置当前屏幕的大小           AutoSizeConfig.getInstance().setScreenWidth(currentSize[0]);           AutoSizeConfig.getInstance().setScreenHeight(currentSize[1]);           // 获取当前Activity对应的屏幕方向           int orientation = activity.getResources().getConfiguration().orientation;           // 如果是横屏,调整对应的屏幕基准           if (orientation == Configuration.ORIENTATION_LANDSCAPE) {               AutoSizeConfig.getInstance().setDesignWidthInDp(DESIGN_HEIGHT_DP);               AutoSizeConfig.getInstance().setDesignHeightInDp(DESIGN_WIDTH_DP);           } else {               // 如果是竖屏,调整对应的屏幕基准               AutoSizeConfig.getInstance().setDesignWidthInDp(DESIGN_WIDTH_DP);               AutoSizeConfig.getInstance().setDesignHeightInDp(DESIGN_HEIGHT_DP);           }       }
@Override public void onAdaptAfter(Object target, Activity activity) {
} }); }



对解决方案有疑惑?想了解解决方案收费? 联系解决方案专家

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心,购买腾讯云享受折上折,更有现金返利:同意关联,立享优惠

阿里云解决方案也看看?: 点击对比阿里云的解决方案

- 0人点赞 -

发表点评 (0条)

not found

暂无评论,你要说点什么吗?