文章目录

  • OCR Android SDK 开发者文档
  • 简介
  • 接口能力
  • 远程API能力
  • 本地质量控制能力
  • 版本更新记录
  • 快速入门
  • 开发包说明
  • 为您自己的工程添加必要的权限
  • Proguard配置
  • DEMO使用说明
  • 身份验证与安全
  • API Key / Secret Key
  • 授权文件(安全模式)
  • 接口调用说明
  • OCR-UI模块
  • OCR-UI模块调用示例
  • 数据接口
  • 通用文字识别
  • 通用文字识别(高精度版)
  • 通用文字识别(含位置信息版)
  • 通用文字识别(高精度含位置信息版)
  • 通用文字识别(含生僻字版)
  • 网络图片文字识别
  • 银行卡识别
  • 身份证识别
  • 行驶证识别
  • 驾驶证识别
  • 车牌识别
  • 营业执照识别
  • 通用票据识别
  • FAQ
  • 错误码表


OCR Android SDK 开发者文档

简介

本文档主要介绍OCR Android SDK的安装和使用。在使用本文档前,您需要先了解Optical Character Recognition(OCR)的基础知识,并已经开通了OCR服务。

接口能力

远程API能力

SDK提供了下列百度AI开放平台RESTful接口的封装

接口名称

接口能力简要描述

通用文字识别

识别图片中的文字信息

通用文字识别(高精度版)

更高精度地识别图片中的文字信息

通用文字识别(含位置信息版)

识别图片中的文字信息(包含文字区域的坐标信息)

通用文字识别(高精度含位置版)

更高精度地识别图片中的文字信息(包含文字区域的坐标信息)

通用文字识别(含生僻字版)

识别图片中的文字信息(包含对常见字和生僻字的识别)

网络图片文字识别

识别一些网络上背景复杂,特殊字体的文字

身份证识别

识别身份证正反面的文字信息

银行卡识别

识别银行卡的卡号并返回发卡行和卡片性质信息

驾驶证识别

识别机动车驾驶证所有关键字段

行驶证识别

识别机动车行驶证所有关键字段

车牌识别

对小客车的车牌进行识别

营业执照识别

对营业执照进行识别

通用票据识别

对各类票据图片(医疗票据,保险保单等)进行文字识别,并返回文字在图片中的位置信息

本地质量控制能力

除了包含远程API调用能力外,安卓SDK中还集成了身份证识别的本地质量控制能力,提供给开发者本地检测身份证的功能。

版本更新记录

上线日期

版本号

更新内容

2018.9.29

1.4.4

修复自定义ocr返回解析异常的问题

2018.5.31

1.4.3

修改获取OCR单例getInstance传入context;修复一些导致奔溃的问题;新增一些邀测接口

2018.2.8

1.4.2

修复高精度通用文字识别调用api错误的问题

2018.2.1

1.4.1

优化和修复了一些引起奔溃的问题;身份证本地扫描新增一个用户手动加和释放模型的类,强烈推荐用户参照demo中手动初始化和释放模型

2017.11.23

1.4.0

新增高精度版通用文字,营业执照,通用票据接口

2017.11.2

1.3.3

修复一个本地代码内存泄露问题,优化代码结构

2017.10.17

1.3.2

修复token对象expireTime时间异常的问题

2017.9.21

1.3.1

修复了一些机型下autofocus fail的错误;添加了请求接口token过期前10秒自动获取新token的逻辑;对demo界面文案做了微调

2017.8.15

1.3.0

增加驾驶证,行驶证,车牌识别功能;修复了一个潜在内存泄露问题;身份证本地质量控制模型升级,加入完整性保证

2017.8.1

1.2.3

ui库输出格式RGB565压缩,身份证识别参数加入压缩质量,对焦实现改为间隔自动对焦,修复了一些问题

2017.7.14

1.2.2

配合添加身份证本地能力升级SDK的安全性,身份证识别支持自动质量控制扫描模式以及默认的拍照识别模式

2017.6.30

1.2.1

1.对SDK的安全性作出优化 2.对本地身份证输入校验功能进行升级,该功能暂时不可用

2017.6.20

1.2.0

ocr_ui库身份证识别升级,交互修改为基于本地模型实现实时扫描判断后自动上传识别身份证

2017.5.18

1.1.0

增加通用文字识别基础版,生僻字,网图接口的SDK接口和demo演示;移除okhttp依赖;支持x86架构CPU;略微优化了demo的交互

2017.4.13

1.0.2

修复部分用户使用ak,sk方式无法获取token的问题

2017.3.23

1.0.1

更新demo获取token失败的错误提示的交互

2017.3.16

1.0.0

在线OCR第一版!

快速入门

支持的系统和硬件版本

  • 系统:支持 Android 4.0(API Level 15)到Android7.0(API Level 25)系统。需要开发者通过minSdkVersion来保证支持系统的检测。
  • CPU架构:armeabi,arm64-v8a,armeabi-v7a,x86
  • 机型:手机和平板皆可
  • 硬件要求:要求设备上有相机模块。
  • 网络:支持WIFI及移动网络,移动网络支持使用NET网关及WAP网关(CMWAP、CTWAP、UNIWAP、3GWAP)。

开发包说明

aip-ocr-android-sdk.zip               // OCR SDK包,包括文档,demo工程,SDK核心库
    |- OCRDemo                         // demo示例工程
    |- libs                            // lib 库,包括各平台的so库及 jar包。
    |- ocr-ui                          // ocr UI模块
    |- OCR-android-SDK.md              // 使用说明文档

sdk的包含的UI部分和demo工程以Android Studio方式提供,sdk部分则可以较方便的集成到eclipse工程中。

  1. 前往SDK下载页面下载Android SDK压缩包。
  2. (必须)将下载包libs目录中的ocr-sdk.jar文件拷贝到工程libs目录中,并加入工程依赖。
  3. (必须)将libs目录下armeabi,arm64-v8a,armeabi-v7a,x86文件夹按需添加到android studio工程src/main/jniLibs目录中, eclipse用户默认为libs目录。
  4. (可选)如果需要使用UI模块,请在Android studio中以模块方式导入下载包中的ocr-ui文件夹。

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

如果您在自己的工程中集成SDK,请确保已经在工程AndroidManifest.xml文件中添加如下权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

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

名称

用途

INTERNET

应用联网,发送请求数据至服务器,获得识别结果。

CAMERA

调用相机进行拍照(仅UI部分需要)

WRITE_EXTERNAL_STORAGE

图片裁剪临时存储

READ_EXTERNAL_STORAGE

图片裁剪临时存储

Proguard配置

如果您在自己的工程中集成SDK,请在Proguard配置文件中增加, 防止release发布时打包报错:

-keep class com.baidu.ocr.sdk.**{*;}
-dontwarn com.baidu.ocr.**

DEMO使用说明

安卓SDK包中提供了一个可快速运行的demo工程,该工程已经集成了sdk,UI库,您只需直接在Android Studio中导入开发包OCRDemo目录即可运行。

若运行提示”身份验证错误”,可能是您还未填写正确的Api Key和Secret Key,或者是还未绑定您安卓应用的包名,如何绑定包名请参考下一章节:*身份验证与安全* 章节

android 本地html cookie android 本地 ocr_android

身份验证与安全

百度AI开放平台使用OAuth2.0授权调用开放API,调用API时必须在URL中带上accesss_token参数。AccessToken可用AK/SK或者授权文件的方式获得。安卓SDK中已经为您做了封装,当初始化完毕后,所有API请求会自动带上accesss_token参数,您也可以通过initAccessTokenWithAkSk,initAccessToken这两个函数的回调中查看。

OCR Android SDK提供了以下2种AccessToken管理方法.

API Key / Secret Key

此种身份验证方案使用AK/SK获得AccessToken。

虽然SDK对网络传输的敏感数据进行了二次加密,但由于AK/SK是明文填写在代码中,在移动设备中可能会存在AK/SK被盗取的风险。有安全考虑的开发者可使用第二种授权方案。

使用步骤:

  1. 管理控制台中新建一个OCR应用,并且请填写正确的包名

    android 本地html cookie android 本地 ocr_文字识别_02

    android 本地html cookie android 本地 ocr_UI_03

  2. 在***应用详情***页面查看并复制应用的Api Key(简称AK) 和 Secret Key(简称SK),初始化OCR单例:
OCR.getInstance(context).initAccessTokenWithAkSk(new OnResultListener<AccessToken>() {
    @Override
    public void onResult(AccessToken result) {
        // 调用成功,返回AccessToken对象
        String token = result.getAccessToken();
    }
    @Override
    public void onError(OCRError error) {
        // 调用失败,返回OCRError子类SDKError对象
    }
}, getApplicationContext(), "您的应用AK", "您的应用SK");

由于AK/SK是明文填写在代码中,在移动设备中可能会存在AK/SK被盗取的风险。有安全考虑的开发者可使用第二种授权方案。

授权文件(安全模式)

此种身份验证方案使用授权文件获得AccessToken,缓存在本地。*建议有安全考虑的开发者使用此种身份验证方式。*

在您的移动APP分发出去之后,APP存在被反编译的可能,所以直接将AK / SK 置于APP源码之中,存在被盗取的风险。采用授权文件的身份验证方法,可有效保护AK/SK在移动设备中的安全。攻击者即使拦截了流量,盗取了授权文件,也难以盗用您的配额。

使用步骤:

  1. 官网中配置应用

    android 本地html cookie android 本地 ocr_文字识别_02

    android 本地html cookie android 本地 ocr_UI_03

  2. 在***应用详情***页面下载对应应用的授权文件

    android 本地html cookie android 本地 ocr_安卓_06

  3. 将授权文件添加至工程assets文件夹,文件名必须为aip.license

    android 本地html cookie android 本地 ocr_ocr_07

  4. 调用initAccessToken方法,初始化OCR单例:
OCR.getInstance(context).initAccessToken(new OnResultListener<AccessToken>() {
    @Override
    public void onResult(AccessToken result) {
        // 调用成功,返回AccessToken对象
        String token = result.getAccessToken();
    }
    @Override
    public void onError(OCRError error) {
        // 调用失败,返回OCRError子类SDKError对象
    }
}, getApplicationContext());

接口调用说明

OCR-UI模块

OCR-UI模块提供了一套默认的UI。如需使用,请将ocr_ui模块包含到您的工程,具体使用可参考SDK包中附带的示例工程。

OCR-UI模块调用示例

调用拍摄activity,更详细的类别请参考demo工程

// 生成intent对象
Intent intent = new Intent(IDCardActivity.this, CameraActivity.class);

// 设置临时存储
intent.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,                     FileUtil.getSaveFile(getApplication()).getAbsolutePath());

// 调用除银行卡,身份证等识别的activity
intent.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_GENERAL);
startActivityForResult(intent, REQUEST_CODE_CAMERA);
// 通过参数确定接口类型
startActivityForResult(intent, REQUEST_CODE_GENERAL_BASIC);

// 调用拍摄银行卡的activity
intent.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_BANK_CARD);
startActivityForResult(intent, REQUEST_CODE_CAMERA);

// 调用拍摄身份证正面(不带本地质量控制)activity
intent.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_ID_CARD_FRONT);
startActivityForResult(intent, REQUEST_CODE_CAMERA);

// 调用身份证本识别(带本地质量控制)activity
 Intent intent = new Intent(IDCardActivity.this, CameraActivity.class);
// 使用本地质量控制能力需要授权,需要在OCR调用initAccessToken或者
// initAccessTokenWithAkSk成功返回后才能获取License授权本地质量控制能力
intent.putExtra(CameraActivity.KEY_NATIVE_TOKEN,
                        OCR.getInstance(context).getLicense());
// 使用本地质量控制能力需要设置开启
intent.putExtra(CameraActivity.KEY_NATIVE_ENABLE,
                        true);
// 开启身份证正面本地识别                    
intent.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_ID_CARD_FRONT);

通过onActivityResult获取拍摄结果,更详细的类别请参考demo工程

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // 获取调用参数
    String contentType = data.getStringExtra(CameraActivity.KEY_CONTENT_TYPE);
    // 通过临时文件获取拍摄的图片
    String filePath = FileUtil.getSaveFile(getApplicationContext()).getAbsolutePath();
    // 判断拍摄类型(通用,身份证,银行卡等)
    if (requestCode == REQUEST_CODE_GENERAL && resultCode == Activity.RESULT_OK) {
    // 判断是否是身份证正面
        if (CameraActivity.CONTENT_TYPE_ID_CARD_FRONT.equals(contentType)){
        // 获取图片文件调用sdk数据接口,见数据接口说明
        }
    }
}

数据接口

通用文字识别

  • 调用示例
// 通用文字识别参数设置
GeneralBasicParams param = new GeneralBasicParams();
param.setDetectDirection(true);
param.setImageFile(new File(filePath));

// 调用通用文字识别服务
OCR.getInstance(context).recognizeGeneralBasic(param, new OnResultListener<GeneralResult>() {
    @Override
    public void onResult(GeneralResult result) {
        // 调用成功,返回GeneralResult对象
        for (WordSimple wordSimple : result.getWordList()) {
            // wordSimple不包含位置信息
            wordSimple word = wordSimple;
            sb.append(word.getWords());
            sb.append("\n");
        }
        // json格式返回字符串
        listener.onResult(result.getJsonRes());
    }
    @Override
    public void onError(OCRError error) {
        // 调用失败,返回OCRError对象
    }
});

options参数详情

参数

是否必选

类型

可选值范围

说明

image

true

string

-

图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式

language_type

false

string

CHN_ENG、ENG、POR、FRE、GER、ITA、SPA、RUS、JAP

识别语言类型,默认为CHN_ENG。可选值包括: - CHN_ENG:中英文混合; - ENG:英文; - POR:葡萄牙语; - FRE:法语; - GER:德语; - ITA:意大利语; - SPA:西班牙语; - RUS:俄语; - JAP:日语

detect_direction

false

boolean

true、false

是否检测图像朝向,默认不检测,即:false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括: - true:检测朝向; - false:不检测朝向。

detect_language

FALSE

string

true、false

是否检测语言,默认不检测。当前支持(中文、英语、日语、韩语)

  • 结果返回

字段

必选

类型

说明

direction


int32

图像方向,当detect_direction=true时存在。 - -1:未定义, - 0:正向, - 1: 逆时针90度, - 2:逆时针180度, - 3:逆时针270度

log_id


uint64

唯一的log id,用于问题定位

words_result_num


uint32

识别结果数,表示words_result的元素个数

words_result


array()

定位和识别结果数组

+words


string

识别结果字符串

// 示例
返回格式参考通用文字识别

通用文字识别(高精度版)

  • 调用示例
// 通用文字识别参数设置
GeneralBasicParams param = new GeneralBasicParams();
param.setDetectDirection(true);
param.setImageFile(new File(filePath));

// 调用通用文字识别服务
OCR.getInstance(context).recognizeAccurateBasic(param, new OnResultListener<GeneralResult>() {
    @Override
    public void onResult(GeneralResult result) {
        // 调用成功,返回GeneralResult对象
        for (WordSimple wordSimple : result.getWordList()) {
            // wordSimple不包含位置信息
            wordSimple word = wordSimple;
            sb.append(word.getWords());
            sb.append("\n");
        }
        // json格式返回字符串
        listener.onResult(result.getJsonRes());
    }
    @Override
    public void onError(OCRError error) {
        // 调用失败,返回OCRError对象
    }
});

options参数详情

参数

是否必选

类型

可选值范围

说明

image

true

string

-

图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式

detect_direction

false

boolean

true、false

是否检测图像朝向,默认不检测,即:false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括: - true:检测朝向; - false:不检测朝向。

  • 结果返回

字段

必选

类型

说明

direction


int32

图像方向,当detect_direction=true时存在。 - -1:未定义, - 0:正向, - 1: 逆时针90度, - 2:逆时针180度, - 3:逆时针270度

log_id


uint64

唯一的log id,用于问题定位

words_result_num


uint32

识别结果数,表示words_result的元素个数

words_result


array()

定位和识别结果数组

+words


string

识别结果字符串

// 示例
{
"log_id": 2471272194, 
"words_result_num": 2,
"words_result": 
    [
        {"words": " TSINGTAO"}, 
        {"words": "青島睥酒"}
    ]
}

通用文字识别(含位置信息版)

  • 调用示例
// 通用文字识别参数设置
GeneralParams param = new GeneralParams();
param.setDetectDirection(true);
param.setImageFile(new File(filePath));

// 调用通用文字识别服务(含位置信息版)
OCR.getInstance(context).recognizeGeneral(param, new OnResultListener<GeneralResult>() {
    @Override
    public void onResult(GeneralResult result) {
        StringBuilder sb = new StringBuilder();
            for (WordSimple wordSimple : result.getWordList()) {
                // word包含位置
                Word word = (Word) wordSimple;
                    sb.append(word.getWords());
                sb.append("\n");
            }
        // 调用成功,返回GeneralResult对象,通过getJsonRes方法获取API返回字符串
        listener.onResult(result.getJsonRes());
    }
    @Override
    public void onError(OCRError error) {
        // 调用失败,返回OCRError对象
    }
});

options参数详情

参数

是否必选

类型

可选值范围

说明

image

true

string

-

图像数据,base64编码,要求base64编码后大小不超过1M,最短边至少15px,最长边最大2048px,支持jpg/png/bmp格式

recognize_granularity

false

string

big、small

是否定位单字符位置,big:不定位单字符位置,默认值;small:定位单字符位置

language_type

false

string

CHN_ENG、ENG、POR、FRE、GER、ITA、SPA、RUS、JAP

识别语言类型,默认为CHN_ENG。可选值包括: - CHN_ENG:中英文混合; - ENG:英文; - POR:葡萄牙语; - FRE:法语; - GER:德语; - ITA:意大利语; - SPA:西班牙语; - RUS:俄语; - JAP:日语

detect_direction

false

boolean

true、false

是否检测图像朝向,默认不检测,即:false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括: - true:检测朝向; - false:不检测朝向。

detect_language

false

string

true、false

是否检测语言,默认不检测。当前支持(中文、英语、日语、韩语)

vertexes_location

false

string

true、false

是否返回文字外接多边形顶点位置,不支持单字位置。默认为false

  • 结果返回

字段

必选

类型

说明

direction


int32

图像方向,当detect_direction=true时存在。 - -1:未定义, - 0:正向, - 1: 逆时针90度, - 2:逆时针180度, - 3:逆时针270度

log_id


uint64

唯一的log id,用于问题定位

words_result


array()

定位和识别结果数组

words_result_num


uint32

识别结果数,表示words_result的元素个数

+vertexes_location


array()

当前为四个顶点: 左上,右上,右下,左下。当vertexes_location=true时存在

++x


uint32

水平坐标(坐标0点为左上角)

++y


uint32

垂直坐标(坐标0点为左上角)

+location


array()

位置数组(坐标0点为左上角)

++left


uint32

表示定位位置的长方形左上顶点的水平坐标

++top


uint32

表示定位位置的长方形左上顶点的垂直坐标

++width


uint32

表示定位位置的长方形的宽度

++height


uint32

表示定位位置的长方形的高度

+words


string

识别结果字符串

+chars


array()

单字符结果,recognize_granularity=small时存在

++location


array()

位置数组(坐标0点为左上角)

+++left


uint32

表示定位位置的长方形左上顶点的水平坐标

+++top


uint32

表示定位位置的长方形左上顶点的垂直坐标

+++width


uint32

表示定位定位位置的长方形的宽度

+++height


uint32

表示位置的长方形的高度

++char


string

单字符识别结果

// 示例
{
    direction : 2,
    log_id : 676709620,
    words_result : [ {
            location : {
                height : 20;
                left : 86;
                top : 387;
                width : 22;
            };
            words : "N";
        },
    ],
    words_result_num : 1;
}

通用文字识别(高精度含位置信息版)

  • 调用示例
// 通用文字识别参数设置
GeneralParams param = new GeneralParams();
param.setDetectDirection(true);
param.setImageFile(new File(filePath));

// 调用通用文字识别服务(含位置信息版)
OCR.getInstance(context).recognizeAccurate(param, new OnResultListener<GeneralResult>() {
    @Override
    public void onResult(GeneralResult result) {
        StringBuilder sb = new StringBuilder();
            for (WordSimple wordSimple : result.getWordList()) {
                // word包含位置
                Word word = (Word) wordSimple;
                    sb.append(word.getWords());
                sb.append("\n");
            }
        // 调用成功,返回GeneralResult对象,通过getJsonRes方法获取API返回字符串
        listener.onResult(result.getJsonRes());
    }
    @Override
    public void onError(OCRError error) {
        // 调用失败,返回OCRError对象
    }
});

options参数详情

参数

是否必选

类型

可选值范围

说明

image

true

string

-

图像数据,base64编码,要求base64编码后大小不超过1M,最短边至少15px,最长边最大2048px,支持jpg/png/bmp格式

vertexes_location

false

string

true、false

是否返回文字外接多边形顶点位置,不支持单字位置。默认为false

recognize_granularity

false

string

big、small

是否定位单字符位置,big:不定位单字符位置,默认值;small:定位单字符位置

detect_direction

false

boolean

true、false

是否检测图像朝向,默认不检测,即:false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括: - true:检测朝向; - false:不检测朝向。

  • 结果返回

字段

必选

类型

说明

direction


int32

图像方向,当detect_direction=true时存在。 - -1:未定义, - 0:正向, - 1: 逆时针90度, - 2:逆时针180度, - 3:逆时针270度

log_id


uint64

唯一的log id,用于问题定位

words_result


array()

定位和识别结果数组

words_result_num


uint32

识别结果数,表示words_result的元素个数

+vertexes_location


array()

当前为四个顶点: 左上,右上,右下,左下。当vertexes_location=true时存在

++x


uint32

水平坐标(坐标0点为左上角)

++y


uint32

垂直坐标(坐标0点为左上角)

+location


array()

位置数组(坐标0点为左上角)

++left


uint32

表示定位位置的长方形左上顶点的水平坐标

++top


uint32

表示定位位置的长方形左上顶点的垂直坐标

++width


uint32

表示定位位置的长方形的宽度

++height


uint32

表示定位位置的长方形的高度

+words


string

识别结果字符串

+chars


array()

单字符结果,recognize_granularity=small时存在

++location


array()

位置数组(坐标0点为左上角)

+++left


uint32

表示定位位置的长方形左上顶点的水平坐标

+++top


uint32

表示定位位置的长方形左上顶点的垂直坐标

+++width


uint32

表示定位定位位置的长方形的宽度

+++height


uint32

表示位置的长方形的高度

++char


string

单字符识别结果

// 返回结果参考通用文字识别(含位置信息版)

通用文字识别(含生僻字版)

  • 调用示例
// 通用文字识别(含生僻字版)参数设置
GeneralBasicParams param = new GeneralBasicParams();
param.setDetectDirection(true);
param.setImageFile(new File(filePath));

// 调用通用文字识别服务
OCR.getInstance(context).recognizeGeneralEnhanced(param, new OnResultListener<GeneralResult>() {
    @Override
    public void onResult(GeneralResult result) {
        // 调用成功,返回GeneralResult对象
        for (WordSimple wordSimple : result.getWordList()) {
            // wordSimple不包含位置信息
            wordSimple word = wordSimple;
            sb.append(word.getWords());
            sb.append("\n");
        }
    }
    @Override
    public void onError(OCRError error) {
        // 调用失败,返回OCRError对象
    }
});

options参数详情

参数

是否必选

类型

可选值范围

说明

image

true

string

-

图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式

language_type

false

string

CHN_ENG、ENG、POR、FRE、GER、ITA、SPA、RUS、JAP

识别语言类型,默认为CHN_ENG。可选值包括: - CHN_ENG:中英文混合; - ENG:英文; - POR:葡萄牙语; - FRE:法语; - GER:德语; - ITA:意大利语; - SPA:西班牙语; - RUS:俄语; - JAP:日语

detect_direction

false

boolean

true、false

是否检测图像朝向,默认不检测,即:false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括: - true:检测朝向; - false:不检测朝向。

detect_language

FALSE

string

true、false

是否检测语言,默认不检测。当前支持(中文、英语、日语、韩语)

  • 结果返回

字段

必选

类型

说明

direction


int32

图像方向,当detect_direction=true时存在。 - -1:未定义, - 0:正向, - 1: 逆时针90度, - 2:逆时针180度, - 3:逆时针270度

log_id


uint64

唯一的log id,用于问题定位

words_result_num


uint32

识别结果数,表示words_result的元素个数

words_result


array()

定位和识别结果数组

+words


string

识别结果字符串

// 示例
参考通用文字识别接口

网络图片文字识别

  • 调用示例
// 网络图片文字识别参数设置
GeneralBasicParams param = new GeneralBasicParams();
param.setDetectDirection(true);
param.setImageFile(new File(filePath));

// 调用通用文字识别服务
OCR.getInstance(context).recognizeWebimage(param, new OnResultListener<GeneralResult>() {
    @Override
    public void onResult(GeneralResult result) {
        // 调用成功,返回GeneralResult对象
        for (WordSimple wordSimple : result.getWordList()) {
            // wordSimple不包含位置信息
            wordSimple word = wordSimple;
            sb.append(word.getWords());
            sb.append("\n");
        }
    }
    @Override
    public void onError(OCRError error) {
        // 调用失败,返回OCRError对象
    }
});

options参数详情

参数

是否必选

类型

可选值范围

说明

image

true

string

-

图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式

detect_direction

false

boolean

true、false

是否检测图像朝向,默认不检测,即:false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括: - true:检测朝向; - false:不检测朝向。

detect_language

false

string

true、false

是否检测语言,默认不检测。当前支持(中文、英语、日语、韩语)

  • 结果返回

字段

必选

类型

说明

direction


int32

图像方向,当detect_direction=true时存在。 - -1:未定义, - 0:正向, - 1: 逆时针90度, - 2:逆时针180度, - 3:逆时针270度

log_id


uint64

唯一的log id,用于问题定位

words_result_num


uint32

识别结果数,表示words_result的元素个数

words_result


array()

定位和识别结果数组

+words


string

识别结果字符串

// 示例
参考通用文字识别接口

银行卡识别

  • 调用示例
// 银行卡识别参数设置
BankCardParams param = new BankCardParams();
param.setImageFile(new File(filePath));

// 调用银行卡识别服务
OCR.getInstance(context).recognizeBankCard(param, new OnResultListener<BankCardResult>() {
    @Override
    public void onResult(BankCardResult result) {
        // 调用成功,返回BankCardResult对象
    }
    @Override
    public void onError(OCRError error) {
        // 调用失败,返回OCRError对象
    }
});
  • 结果返回

参数

类型

描述

log_id

Uint64

唯一的log id,用于问题定位

result

Object

定位和识别结果数组

+bank_card_number

String

银行卡识别结果

+bank_name

String

银行名,不能识别时为空

+bank_card_type

uint32

银行卡类型,0:不能识别; 1: 借记卡; 2: 信用卡

// 示例
 {
    "log_id": 3207866271;
    result: {
        "bank_card_number": "6226 2288 8888 8888",
        "bank_card_type": 1,
        "bank_name": "\U5de5\U5546\U94f6\U884c"
    };
}

身份证识别

  • 调用示例
// 身份证识别参数设置
IDCardParams param = new IDCardParams();
param.setImageFile(new File(filePath));

// 调用身份证识别服务
OCR.getInstance(context).recognizeIDCard(param, new OnResultListener<IDCardResult>() {
    @Override
    public void onResult(IDCardResult result) {
        // 调用成功,返回IDCardResult对象
    }
    @Override
    public void onError(OCRError error) {
        // 调用失败,返回OCRError对象
    }
});

options参数

参数

必选

范围

类型

说明

image

true

String

图像数据,支持本地图像文件路径,图像文件二进制数据,要求base64编码后大小不超过1M,最短边至少15px,最长边最大2048px,支持jpg/png/bmp格式

isFront

true

true、false

Boolean

true:身份证正面,false:身份证背面

detect_direction

false

true、false

string

是否检测图像朝向,默认不检测,即:false。可选值为:true - 检测图像朝向;false - 不检测图像朝向。朝向是指输入图像是正常方向、逆时针旋转90/180/270度

accuracy

false

auto、normal、high

string

精准度,精度越高,速度越慢。default:auto

  • 结果返回

参数

类型

描述

direction

Int32

图像方向,当detect_direction=true时存在。-1:未定义,0:正向,1: 逆时针90度, 2:逆时针180度, 3:逆时针270度

log_id

Uint64

唯一的log id,用于问题定位

words_result

Array

定位和识别结果数组,数组元素的key是身份证的主体字段(正面支持:住址、公民身份号码、出生、姓名、性别、民族,背面支持:签发机关、签发日期、失效日期)。只返回识别出的字段。若身份证号码校验不通过,则不返回

words_result_num

Uint32

识别结果数,表示words_result的元素个数

+location

Array

位置数组(坐标0点为左上角)

++left

Uint32

表示定位位置的长方形左上顶点的水平坐标

++top

Uint32

表示定位位置的长方形左上顶点的垂直坐标

++width

Uint32

表示定位位置的长方形的宽度

++height

Uint32

表示定位位置的长方形的高度

+words

String

识别结果字符串

//示例
{
    "log_id": 7037721,
    "direction": 0,
    "words_result_num": 2,
    "words_result": {
        "住址": {
            "location": {
                "left": 227,
                "top": 235,
                "width": 229,
                "height": 51
            },
            "words": "湖北省天门市渔薪镇杨咀村一组2号",
        }
        ...
    }
}

行驶证识别

  • 调用示例
// 行驶证识别参数设置
OcrRequestParams param = new OcrRequestParams();

// 设置image参数
param.setImageFile(new File(filePath));
// 设置其他参数
param.putParam("detect_direction", true);
// 调用行驶证识别服务
OCR.getInstance(context).recognizeVehicleLicense(param, new OnResultListener<OcrResponseResult>() {
    @Override
    public void onResult(OcrResponseResult result) {
        // 调用成功,返回OcrResponseResult对象
        listener.onResult(result.getJsonRes());
    }

    @Override
    public void onError(OCRError error) {
        // 调用失败,返回OCRError对象
    }
});

options参数

参数

必选

类型

可选值范围

说明

image


File对象

-

图像数据, 要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式

detect_direction


boolean

true、false

是否检测图像朝向,默认不检测,即:false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括:- true:检测朝向;- false:不检测朝向。

accuracy


string

normal,缺省

normal 使用快速服务,1200ms左右时延;缺省或其它值使用高精度服务,1600ms左右时延

  • 结果返回

字段

说明

是否必选

类型

log_id


number

唯一的log id,用于问题定位

words_result_num


number

识别结果数,表示words_result的元素个数

words_result


array

识别结果数组

+words


string

识别结果字符串

//示例
{
    "errno": 0,
    "msg": "success",
    "data": {
        "words_result_num": 10,
        "words_result": {
            "品牌型号": {
                "words": "保时捷GT37182RUCRE"
            },
            "发证日期": {
                "words": "20160104"
            },
            "使用性质": {
                "words": "非营运"
            },
            "发动机号码": {
                "words": "20832"
            },
            "号牌号码": {
                "words": "苏A001"
            },
            "所有人": {
                "words": "圆圆"
            },
            "住址": {
                "words": "南京市江宁区弘景大道"
            },
            "注册日期": {
                "words": "20160104"
            },
            "车辆识别代号": {
                "words": "HCE58"
            },
            "车辆类型": {
                "words": "小型轿车"
            }
        }
    }
}

驾驶证识别

  • 调用示例
// 驾驶证识别参数设置
OcrRequestParams param = new OcrRequestParams();

// 设置image参数
param.setImageFile(new File(filePath));
// 设置其他参数
param.putParam("detect_direction", true);
// 调用驾驶证识别服务
OCR.getInstance(context).recognizeDrivingLicense(param, new OnResultListener<OcrResponseResult>() {
    @Override
    public void onResult(OcrResponseResult result) {
        // 调用成功,返回OcrResponseResult对象
        listener.onResult(result.getJsonRes());
    }

    @Override
    public void onError(OCRError error) {
        // 调用失败,返回OCRError对象
    }
});

options参数

参数

必选

类型

可选值范围

说明

image


File对象

-

图像数据,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式

detect_direction


boolean

true、false

是否检测图像朝向,默认不检测,即:false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括:- true:检测朝向;- false:不检测朝向。

  • 结果返回

字段

必选

类型

log_id


number

唯一的log id,用于问题定位

words_result_num


number

识别结果数,表示words_result的元素个数

words_result


array

识别结果数组

+words


string

识别结果字符串

//示例
{
    "errno": 0,
    "msg": "success",
    "data": {
        "words_result_num": 10,
        "words_result": {
            "证号": {
                "words": "3208231999053090"
            },
            "有效期限": {
                "words": "6年"
            },
            "准驾车型": {
                "words": "B2"
            },
            "有效起始日期": {
                "words": "20101125"
            },
            "住址": {
                "words": "江苏省南通市海门镇秀山新城"
            },
            "姓名": {
                "words": "小欧欧"
            },
            "国籍": {
                "words": "中国"
            },
            "出生日期": {
                "words": "19990530"
            },
            "性别": {
                "words": "男"
            },
            "初次领证日期": {
                "words": "20100125"
            }
        }
    }
}

车牌识别

  • 调用示例
// 车牌识别参数设置
OcrRequestParams param = new OcrRequestParams();

// 设置image参数
param.setImageFile(new File(filePath));

// 调用车牌识别服务
OCR.getInstance(context).recognizeLicensePlate(param, new OnResultListener<OcrResponseResult>() {
    @Override
    public void onResult(OcrResponseResult result) {
        // 调用成功,返回OcrResponseResult对象
        listener.onResult(result.getJsonRes());
    }

    @Override
    public void onError(OCRError error) {
        // 调用失败,返回OCRError对象
    }
});

options参数

参数

必选

类型

可选值范围

说明

image


File对象

-

图像数据,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式

  • 结果返回

参数

是否必须

类型

说明

log_id


number

请求标识码,随机数,唯一

words_result


object

暴恐结果置信度

+color


string

车牌颜色,如”blue”

+number


string

车牌号码,示例:”苏HS7766”

//示例
{
  "words_result":{
     "color":"blue",
     "number":"粤FQ0000"
  },
  "log_id":2783673432
}

营业执照识别

  • 调用示例
// 营业执照识别参数设置
OcrRequestParams param = new OcrRequestParams();

// 设置image参数
param.setImageFile(new File(filePath));

// 调用营业执照识别服务
OCR.getInstance(context).recognizeBusinessLicense(param, new OnResultListener<OcrResponseResult>() {
    @Override
    public void onResult(OcrResponseResult result) {
        listener.onResult(result.getJsonRes());
    }

    @Override
    public void onError(OCRError error) {
        listener.onResult(error.getMessage());
    }
});

options参数

参数

必选

类型

可选值范围

说明

image


File对象

-

图像数据,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式

  • 结果返回

参数

是否必须

类型

说明

log_id


uint64

请求标识码,随机数,唯一。

words_result_num


uint32

识别结果数,表示words_result的元素个数

words_result

array()

识别结果数组

left


uint32

表示定位位置的长方形左上顶点的水平坐标

top


uint32

表示定位位置的长方形左上顶点的垂直坐标

width


uint32

表示定位位置的长方形的宽度

height


uint32

表示定位位置的长方形的高度

words


string

识别结果字符串

//示例
{
    "log_id": 490058765,
    "words_result": {
        "单位名称": {
            "location": {
                "left": 500,
                "top": 479,
                "width": 618,
                "height": 54
            },
            "words": "袁氏财团有限公司"
        },
        "法人": {
            "location": {
                "left": 938,
                "top": 557,
                "width": 94,
                "height": 46
            },
            "words": "袁运筹"
        },
        "地址": {
            "location": {
                "left": 503,
                "top": 644,
                "width": 574,
                "height": 57
            },
            "words": "江苏省南京市中山东路19号"
        },
        "有效期": {
            "location": {
                "left": 779,
                "top": 1108,
                "width": 271,
                "height": 49
            },
            "words": "2015年02月12日"
        },
        "证件编号": {
            "location": {
                "left": 1219,
                "top": 357,
                "width": 466,
                "height": 39
            },
            "words": "苏餐证字(2019)第666602666661号"
        },
        "社会信用代码": {
            "location": {
                "left": 0,
                "top": 0,
                "width": 0,
                "height": 0
            },
            "words": "无"
        }
    },
    "words_result_num": 6
}

通用票据识别

  • 调用示例
// 通用票据识别参数设置
OcrRequestParams param = new OcrRequestParams();

// 设置image参数
param.setImageFile(new File(filePath));

// 设置额外参数 
param.putParam("detect_direction", "true");

// 调用通用票据识别服务
OCR.getInstance(context).recognizeReceipt(param, new OnResultListener<OcrResponseResult>() {
    @Override
    public void onResult(OcrResponseResult result) {
        listener.onResult(result.getJsonRes());
    }

    @Override
    public void onError(OCRError error) {
        listener.onResult(error.getMessage());
    }
});

options参数

参数

必选

类型

可选值范围

说明

image


File对象

-

图像数据,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式

recognize_granularity

false

string

big、small

是否定位单字符位置,big:不定位单字符位置,默认值;small:定位单字符位置

probability

false

string

true、false

是否返回识别结果中每一行的置信度

accuracy

false

string

normal,缺省

normal 使用快速服务;缺省或其它值使用高精度服务

detect_direction

false

string

true、false

是否检测图像朝向,默认不检测,即:false。可选值包括true - 检测朝向;false - 不检测朝向。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。

  • 结果返回

字段

是否必选

类型

说明

log_id


uint64

唯一的log id,用于问题定位

words_result_num


uint32

识别结果数,表示words_result的元素个数

words_result


array()

定位和识别结果数组

location


object

位置数组(坐标0点为左上角)

left


uint32

表示定位位置的长方形左上顶点的水平坐标

top


uint32

表示定位位置的长方形左上顶点的垂直坐标

width


uint32

表示定位位置的长方形的宽度

height


uint32

表示定位位置的长方形的高度

words


string

识别结果字符串

chars


array()

单字符结果,recognize_granularity=small时存在

location


array()

位置数组(坐标0点为左上角)

left


uint32

表示定位位置的长方形左上顶点的水平坐标

top


uint32

表示定位位置的长方形左上顶点的垂直坐标

width


uint32

表示定位定位位置的长方形的宽度

height


uint32

表示位置的长方形的高度

char


string

单字符识别结果

probability


object

识别结果中每一行的置信度值,包含average:行置信度平均值,variance:行置信度方差,min:行置信度最小值

{
    "log_id": 2661573626,
    "words_result": [
        {
            "location": {
                "left": 10,
                "top": 3,
                "width": 121,
                "height": 24
            },
            "words": "姓名:小明明",
            "chars": [
                {
                    "location": {
                        "left": 16,
                        "top": 6,
                        "width": 17,
                        "height": 20
                    },
                    "char": "姓"
                },
                {
                    "location": {
                        "left": 35,
                        "top": 6,
                        "width": 17,
                        "height": 20
                    },
                    "char": "名"
                },
                {
                    "location": {
                        "left": 55,
                        "top": 6,
                        "width": 11,
                        "height": 20
                    },
                    "char": ":"
                },
                {
                    "location": {
                        "left": 68,
                        "top": 6,
                        "width": 17,
                        "height": 20
                    },
                    "char": "小"
                },
                {
                    "location": {
                        "left": 87,
                        "top": 6,
                        "width": 17,
                        "height": 20
                    },
                    "char": "明"
                },
                {
                    "location": {
                        "left": 107,
                        "top": 6,
                        "width": 17,
                        "height": 20
                    },
                    "char": "明"
                }
            ]
        }
    ],
    "words_result_num": 2
}

FAQ

Q:使用demo为何发生 App identifier unmatch 错误
A:使用demo工程请在百度云控制台中绑定demo工程的包名(com.baidu.ocr.demo),然后选择license或者ak,sk方式授权。

Q: demo工程为何提示token还未获取成功,无法使用识别功能
A:识别需要token作为参数,token需要通过网络获取,网络环境较差的情况下返回较慢。

Q:关于身份证识别的两种模式
A:身份证识别依赖本地库,如果您不需要本地能力可以在传入activity的参数中选择关闭,并且移除ui模块中的本地so文件和ui模块中assets下的模型文件

错误码表

验证错误

错误码

错误信息

说明

备注

110

Access token invalid or no longer valid

Access Token过期失效

请重新获得有效的Token

283501

License file check error

授权文件不匹配

请在控制台中配置正确的包名,并确认使用了正确的授权文件

283502

App identifier unmatch

BundleId不匹配

请在控制台中配置正确的包名,并确认使用了正确的授权文件

283503

License file not exists

请确认aip.licence文件存在于assets文件夹中

283504

Network error

网络请求失败

请授权App网络权限并保证网络通畅

283505

Server illegal response

服务器返回数据异常

283506

Load jni so library error

JNI加载异常

请确认开发包中的so库被正确加载

283601

Server authentication error

身份验证错误。

请在控制台中配置应用,并确认填写了正确的AK/SK,或使用了正确的授权文件

283602

Authentication time error

时间戳不正确,可能是设备时间异常。

请确保不要改变调用设备的本地时间

283604

App identifier unmatch

错误的PackageName或者BundleId

请在控制台中配置正确的包名,并确认使用了正确的授权文件

283700

Server internal error

服务器内部错误

您可以在工单系统中提交错误信息中的logId,我们将尝试帮您排查错误原因

服务错误

错误码

错误信息

描述

216015

module closed

模块关闭

216100

invalid param

非法参数

216101

not enough param

参数数量不够

216102

service not support

业务不支持

216103

param too long

参数太长

216110

appid not exist

APP ID不存在

216111

invalid userid

非法用户ID

216200

empty image

空的图片

216201

image format error

图片格式错误

216202

image size error

图片大小错误

216300

db error

DB错误

216400

backend error

后端系统错误

216401

internal error

内部错误

216500

unknown error

未知错误

216600

id number format error

身份证的ID格式错误

216601

id number and name not match

身份证的ID和名字不匹配

216630

recognize error

识别错误

216631

recognize bank card error

识别银行卡错误(通常为检测不到银行卡)

216632

ocr

unknown error

216633

recognize idcard error

识别身份证错误(通常为检测不到身份证)

216634

detect error

检测错误

216635

get mask error

获取mask图片错误

282000

logic internal error

业务逻辑层内部错误

282001

logic backend error

业务逻辑层后端服务错误

282100

image transcode error

图片压缩转码错误