更新记录

3.3.2(2024-06-04)

  • 【优化】Android端内置的申请权限依赖更新至最新版
  • 【优化】修复Android端多次识别卡顿问题

3.3.1(2024-05-22)

  • 【优化】IOS新增PrivacyInfo.xcprivacy文件,适配AppStore隐私协议
  • 【优化】Android端兼容11及以上版本

3.3.0(2022-11-15)

【修复】IOS端修复频繁切换识别状态时导致拍照按钮不展示的问题

查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.0 - 14.0 armeabi-v7a:支持,arm64-v8a:支持,x86:未测试 适用版本区间:9 - 17

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


插件功能概述

  • 支持自定义提示文字颜色、提示文字背景颜色及识别页面背景色
  • 支持设置是否开启自动识别功能
  • 支持指定区域裁剪识别功能
  • 支持设置自定义弹窗搞定产品特殊需求
  • 支持用户主动关闭回调(用户点击关闭按钮、虚拟返回键、手势返回都会触发)
  • ocr识别全家桶(身份证识别、银行卡识别、车牌识别、护照识别等,详细看下方ocrType说明)
  • 左上角增加关闭按钮,支持点击关闭识别
  • 支持户口本人口信息页面文字提取v1.1.2新增
  • 支持设置是否启用相册选择识别功能v1.3.1新增
  • 支持全屏预览识别(满足条件:albumEnable === 1 && autoScanIdCard === 0 && (ocrType === 'idCardFront' || ocrType === 'idCardBack')时自动全屏识别)v1.3.1新增
  • 支持配置是否启用ocr,此属性默认为true,如果设置false则不会调用SDK的OCR接口进行OCR识别,仅会返回采集的图片v2.4.2新增
  • 支持ocrType的额外设置,比如webApi有火车票识别,而插件没有提供这个类型,你就可以将ocrType设置为该类型值,然后将ocr属性设置false,拿到图片之后去调用webApi即可v2.5.5新增
  • 支持自定义取景框大小v2.8.7新增
  • 支持自定义识别图片质量v2.8.7新增
  • 支持自定义提示文字内容,支持设置是否显示底部提示文字v3.1.0新增
  • 支持base64图片压缩及base64图片转文件路径方便用于上传到自己服务器v3.2.2新增
  • 支持自定义相机ID满足定制机无法使用插件的问题v3.2.9新增
  • 待完善功能。。。

插件接入文档

关于更新

有空闲时间会不断更新维护,有问题随便提,有时间一定会修改

特别推荐

结合百度人脸采集插件,可以轻松实现实名认证,身份核验等功能

注意事项

  • 使用该插件时一定要先试用测试,虚拟物品购买之后无法退款!!!

准备工作

  1. Android、ios端证书准备工作
  2. 百度资料准备
    • 1) 进入百度AI开放平台官网点击这里
    • 2) 点击右上角的控制台,登陆百度账号(没有的自行注册,注意:建议让公司注册,除非你愿意把自己的账号贡献给公司使用),进入控制台
    • 3) 选择文字识别 --> 创建应用 --> 填写信息(注意:文字识别包名一定要选择需要) --> 填写包名 --> 立即创建
  • 4) 点击应用列表 --> 点击刚才创建的应用 --> 复制AK和SK

  • 5) ocr接口收费一览表,详细内容请在百度控制台 --> 概述 --> 下拉至可用服务列表查看

API 调用量限制 QPS/并发限制
通用文字识别(标准版) 5万次/天赠送 2
通用文字识别(标准含位置版) 500次/天赠送 2
通用文字识别(高精度版) 500次/天赠送 2
通用文字识别(高精度含位置版) 50次/天赠送 2
网络图片文字识别 500次/天赠送 2
办公文档识别 总量1000次赠送 2
表格文字识别-提交请求 50次/天赠送 1
表格文字识别-获取结果 无限制 1
二维码识别 总量1000次赠送 2
表格文字识别(同步接口) 200次/天免费 2
数字识别 200次/天赠送 2
手写文字识别 50次/天赠送 2
网络图片文字识别(含位置版) 总量1000次赠送 2
身份证识别 500次/天赠送 2
身份证识别(加密版) 总量200次赠送 2
银行卡识别 500次/天赠送 2
营业执照识别 200次/天赠送 2
护照识别 总量500次赠送 2
名片识别 500次/天免费 2
户口本识别 总量500次赠送 2
港澳通行证识别 200次/天免费 2
台湾通行证识别 200次/天免费 2
驾驶证识别 200次/天赠送 2
行驶证识别 200次/天赠送 2
车牌识别 200次/天赠送 2
VIN码识别 总量1000次赠送 2
车辆合格证识别 总量500次赠送 2
机动车销售发票识别 总量500次赠送 2
通用票据识别 200次/天赠送 2
增值税发票识别 500次/天赠送 2
火车票识别 50次/天赠送 2
出租车票识别 50次/天赠送 2
通用机打发票识别 总量500次赠送 2
飞机行程单识别 总量500次赠送 2
门脸文字识别 总量1000次赠送 2
试卷分析与识别 总量1000次赠送 2
iOCR财会版 总量2000次赠送 2

接入步骤

最简单的接入步骤(基本10分钟搞定)

  • step1:扫描上方QQ群二维码加入QQ群,下载对应Deom的ZIP压缩包,本插件demo为liyahong-BDOCR-Demo
  • step2:解压完成之后会看到很多文件和文件夹,你在桌面新建一个文件夹(最好英文命名哦),然后把你解压到的文件和文件夹拷贝到你创建的这个文件夹下
  • step3:打开hx,然后依次选择文件 --> 导入 --> 从本地目录导入 --> 选择刚才在桌面创建的文件夹 --> 导入成功
  • step4:打开导入的项目,然后打开manifest.json文件,重新获取appid,或者填写你项目的appid都可以
  • step5:回到插件页面,看右边有个试用的按钮,点它,然后弹出来一个模态框,选择试用的项目,点击确认按钮
  • step6:回到hx,然后再次打开manifest.json文件,然后依次选择App原生插件配置 --> 云端插件 --> 选择云端插件 --> 勾选【Android/IOS支持】百度ocr、文字识别的插件
  • step7:替换api.license文件,详细操作看详细接入步骤的第2条
  • step8:打自定义基座包运行测试(包名一定要跟你在百度后台创建license文件的包名保持一致),详细操作看详细接入步骤的第4条及以后

详细接入步骤

  1. 点击试用插件,选择要试用的项目,获取试用资格

  2. 点击manifest.json --> App 原生插件配置 --> 云端插件 --> 勾选插件对应的插件

  3. 使用插件

    • 1) 插件方法说明
    • ocr(object, function) ocr文字识别方法
    • compressBase64Image(object, function) base64图片压缩方法,可以将图片压缩到150KB以下,具体说明见下v3.2.2新增
    • base64ToFile(object, function) base64数据转图片方法,可以将base64数据转换为本地图片,并返回本地路径,可以直接调用uni.uploadFile上传文件v3.2.2新增

    compressBase64Image方法说明

    参数说明

    属性 类型 默认值 必填 说明
    base64 string 需被压缩的base64数据,不带前缀
    compressSize int 150 期望压缩大小,单位KBv5.8.8新增

    返回值说明

    属性 返回值说明
    code 【必填】状态码
    msg 【必填】提示信息
    result 【选填】压缩结果,当code==1时必填

    result说明

    属性 属性说明
    base64 【选填】压缩后的base64数据,不带前缀
    originalSize 【选填】原图大小,单位byte
    compressedSize 【选填】压缩后的图片大小,单位byte

    base64ToFile方法说明

    参数说明

    属性 类型 默认值 必填 说明
    base64 string 需转换的base64数据,不带前缀

    返回值说明

    属性 返回值说明
    code 【必填】状态码
    msg 【必填】提示信息
    result 【选填】转换路径,当code==1时必填
  • 2) ocr方法说明文档
属性 类型 默认值 必填 说明
apiKey string "" 百度云后台的apiKeyv3.2.4新增
secretKey string "" 百度云后台的secretKeyv3.2.4新增
ocr boolean true 是否开启ocr,设置为false则仅采集图片,不调用SDK的OCR识别接口v2.4.2新增
ocrType string idCardFront 识别类型,详细说明见下
hintTextColor string #FFFFFF 提示文字颜色
hintTextBackgroundColor string #000000 提示文字背景颜色
backgroundColor string #000000 识别页面背景颜色
autoScanIdCard int 0 是否开启自动识别,0:是 1:否,仅身份证识别有效
templateId string "" 自定义模板ID,仅自定义模板识别有效v1.2.1新增
albumEnable int 0 是否启用相册选择,0:是 1:否
scaleWidth double 0.2 手动拍照后显示的裁剪框宽度,取值范围0.05 ~ 0.2v2.8.7新增``IOS不支持
scaleHeight double 0.2 手动拍照后显示的裁剪框高度,取值范围0.05 ~ 0.2v2.8.7新增``IOS不支持
base64Quality int 40 返回的base64图片质量,取值范围0 ~ 100v2.8.7新增``IOS不支持
hintText string '' 自定义底部提示文字内容,不填则使用插件默认文字提示v3.1.0新增
hintTextEnable boolean true 是否显示底部文字提示v3.1.0新增
cameraId int 相机ID(如果你是正常手机设备而非定制设备(如:pos机、扫码枪等)则无需设置此属性)v3.2.9新增``IOS不支持
属性值 说明
ocrBase 通用文字识别
ocrBase-height 通用文字识别(高精度)
ocrBase-location 通用文字识别(含位置)
ocrBase-height-location 通用文字识别(含位置高精度)
ocrBase-enhance 通用文字识别(含生僻字)
idCardFront 身份证识别(正面)
idCardBack 身份证识别(反面)
bankCard 银行卡识别
passport 护照识别【IOS端】使用时需将ocr属性设置为false,自行调用百度对应的webApi
ocrBase-web 网络图片识别
drivingLicense 行驶证识别
driverLicense 驾驶证识别
carId 车牌号识别
businessLicense 营业执照识别
receipt 通用票据识别
qrcode 二维码识别【IOS端】使用时需将ocr属性设置为false,自行调用百度对应的webApi
numbers 数字识别
businessCard 名片识别【IOS端】使用时需将ocr属性设置为false,自行调用百度对应的webApi
vatInvoice 增值税发票识别v2.9.8起支持IOS
lottery 彩票识别【IOS端】使用时需将ocr属性设置为false,自行调用百度对应的webApi
handWriting 手写识别【IOS端】使用时需将ocr属性设置为false,自行调用百度对应的webApi
custom 自定义模板识别【Android】使用时需将ocr属性设置为false,自行调用百度对应的webApi
householdRegister 户口本识别【IOS端】使用时需将ocr属性设置为false,自行调用百度对应的webApi
taxiReceipt 出租车发票识别v2.9.8新增
vinCode VIN码识别v2.9.8新增
trainTicket 火车票识别v2.9.8新增
busTicket 汽车票识别【Android/IOS端】使用时需将ocr属性设置为false,自行调用百度对应的webApi
tollInvoice 通行费发票识别【Android/IOS端】使用时需将ocr属性设置为false,自行调用百度对应的webApi
docAnalysis 试卷分析与识别【Android/IOS端】使用时需将ocr属性设置为false,自行调用百度对应的webApi
formula 公式识别【Android/IOS端】使用时需将ocr属性设置为false,自行调用百度对应的webApi
insuranceDocuments 保单识别【Android/IOS端】使用时需将ocr属性设置为false,自行调用百度对应的webApi
vehicleCertificate 车辆合格证识别【Android/IOS端】使用时需将ocr属性设置为false,自行调用百度对应的webApi
  • 4) 代码示例
const bdOCR = uni.requireNativePlugin('liyahong-BDOCR')
var useOCR = true

bdOCR.ocr({
    /**
     * v3.2.4版本加入,支持通过ak和sk的方式初始化SDK(apiKey和secretKey都不为空时使用ak和sk进行初始化,否则使用license文件初始化)
     * 
     * 有小伙伴反馈在后台下载下来的license文件是加密过了,需要使用新版的2.0SDK才可以,但是目前插件的SDK是1.x的。
     * 为了兼容老客户,决定加入通过ak和sk的方式初始化SDK,可以解决通过license初始化失败的问题。
     * 
     * ak获取sk获取路径:百度云控制台 ---> 文字识别 ---> 创建应用(已经创建的点击管理应用) ---> 复制ak和sk
     */
    apiKey: '',
    secretKey: '',
    /**
     * v2.4.2版本加入此功能
     * 我们注意到有些小伙伴担心前端直接请求百度api会有安全问题,所以我们开放了此功能
     * 如果此属性设置为false,仅会返回识别图片,不会使用SDK调用OCR相关接口
     * 如果此属性设置为true,则会返回识别图片,同时也会调用SDK的OCR识别接口,返回OCR识别结果
     */
    ocr: useOCR, // 选填【是否启用ocr功能】,默认值:true,会返回识别图片+ocr文字信息,设置为false则仅返回被识别的图片
    ocrType: 'idCardFront', // 选填【识别类型】默认值:idCardFront,身份证正面识别,ocrType说明见插件文档
    hintTextColor: '#FF0000', // 选填【提示文字颜色】默认值:#FFFFFF
    hintTextBackgroundColor: '#FFFFFF', // 选填【提示文字背景颜色】默认值:#000000
    backgroundColor: '#000000', // 选填【页面背景颜色】默认值:#000000
    autoScanIdCard: 0, // 选填【是否开启自动识别】默认值:0,0:是|1:否,仅ocrType=‘idCardBack’ 或 ‘idCardFront’时有效
    templateId: '', // 选填【自定义模板ID】,仅ocrType=‘custom’时有效
    albumEnable: 1, // 选填【是否启用相册选择】默认值:0,0:是|1:否
    /**
     * 自定义手动拍照后的裁剪框宽度和高度
     * 取值范围:0.05 ~ 0.2,值越小取景框越大,0.05为最大,宽度和高度可设不同
     * 注:仅支持Android端,ocrType类型为 "身份证"、"银行卡" 和 "护照" 时无效,其他类型均有效
     */
    scaleWidth: 0.2, // 选填【裁剪框宽度】默认值:0.2
    scaleHeight: 0.2, // 选填【裁剪框高度】默认值:0.2
    /**
     * 返回的base64数据压缩质量
     * 取值范围0 ~ 100,100为最清晰,越清晰则图片越大
     * 注:仅支持Android端
     */
    base64Quality: 40, // 选填【返回的base64数据压缩质量】默认值:40
    /**
     * 选填【底部提示文字内容,仅支持身份证,银行卡,护照类型】
     * 默认值:
     *   + 身份证正面:请将身份证正面放入框内
     *   + 身份证反面:请将身份证反面放入框内
     *   + 银行卡:请将卡片放入框内
     *   + 护照:请将证件放入框内
     * 
     * 注:如果开启身份证自动识别模式,该属性无效
     */
    hintText: '',
    hintTextEnable: true, // 选填【是否显示底部文字提示】默认值:true
    /**
     * v3.2.9加入此功能,用户可以自定义相机ID
     * 如果你是正常手机设备而非定制设备(如:pos机、扫码枪等)则无需设置此属性,干掉即可
     * 选填【相机ID】默认值:null,可选值需 >= 0
     */
    cameraId: 0
}, result => {
    switch (result.code) {
        case 1: //ocr文字提取成功
            // 只有开启OCR功能才会返回OCR结果
            if (useOCR) {
                // 为了安全起见,验证下是否为JSON字符串,是则转换为对象
                if (typeof result.ocrResult === 'string') {
                    result.ocrResult = JSON.parse(result.ocrResult)
                }
            }
            // 调用插件方法进行图片压缩,压缩后的图片在150KB以下
            bdOCR.compressBase64Image({
                base64: result.base64Image, // 必填【base64数据】,直接使用插件返回的base64数据即可,不要带前缀
                compressSize: 150 // 选填【期望压缩大小】,默认值150,单位KB
            }, compressResult => {
                if (compressResult.code === 1) { // 压缩成功
                    const compressData = compressResult.result
                    // delete result.base64Image
                    // this.base64Result = `data:image/jpg;base64,${compressData.base64}`
                    // this.ocrResult = JSON.stringify(result)

                    // 调用插件方法将base64转为图片路径
                    bdOCR.base64ToFile({
                        base64: compressData.base64
                    }, fileResult => {
                        // 获取到图片路径,可以直接调用uni.uploadFile上传到自己的服务器
                        this.base64Result = fileResult.result
                        this.ocrResult = JSON.stringify(fileResult)
                    })
                }
            })
            return
        case -1: //其他错误,如so加载错误,sdk加载失败等
        case -2: //用户主动关闭
        case -3: //没有提取到文字信息
        case -4: //ocr识别失败,会返回ocrSDK错误信息
            break
        case -5:     // 权限申请被拒绝,仅Android端支持
            if (result.never) { // 是否被永远拒绝,如果被永远拒绝需要跳转设置页让用户手动开启
                this.showModal({
                    title: '权限受限',
                    msg: '您拒绝了一些权限,可能导致该服务无法正常使用,请前往设置!',
                    confirmText: '前往设置',
                }).then(() => {
                    permissionUtils.gotoAppPermissionSetting()
                })
            } else { // 没有永远拒绝就弹窗给予提示然后再次调用插件
                this.showModal({
                    title: '权限受限',
                    msg: '您拒绝了一些权限,可能导致该服务无法正常使用,请授予!'
                }).then(() => {
                    this.ocr()
                })
            }
            break
        /**
         * 设计以下状态码是考虑到可能有需求要显示自定义弹窗的情况!
         */
        case 100100: //开始初始化SDK,注意此处如果在网络不好的时候会耗时,为了更好的用户体验,建议设置弹窗等待
            uni.showLoading({
                title: 'SDK加载中...'
            })
            break
        case 100101: //SDK初始化完成,如果100100设置了弹窗等待,那么就在这里关闭
            uni.hideLoading()
            break
        case 100102: //获取文字提取结果,如果精度高会耗时,为了更好的用户体验,建议设置弹窗等待
            uni.showLoading({
                title: '获取结果...'
            })
            break
        case 100103: //提取文字结果完成,如果100102设置了弹窗等待,那么就在这里关闭
            uni.hideLoading()
            break
    }
    this.ocrResult = JSON.stringify(result)
})
  • 4) 打自定义基座
  • 5) 运行项目,开始测试(注意:运行时建议把之前的安装包卸载!否则有可能会出现修改了无效果的情况!),建议:如果需要上传图片到自己服务器上,建议直接上传base64数据给后端,让后端来转为图片,在前端转换图片会出现未知兼容问题。

  • 6) result返回值说明

属性 返回值说明
code 【必填】状态码,说明见下
msg 【必填】提示信息
never 【选填】权限申请时是否选择了“拒绝且不弹出”的选项,也就是权限被永远拒绝,code=-5的时候返回
base64Image 【选填】识别的图片信息,base64数据,code=1的时候返回
ocrResult 【选填】ocr识别结果,base64数据,code=1的时候返回
ocrType 【选填】识别类型,base64数据,code=1的时候返回
  • 7) code返回值说明
状态码 返回值说明
1 ocr识别成功
-1 其他错误,如so加载错误,sdk加载失败等
-2 用户主动关闭
-3 没有提取到文字信息
-4 百度ocr错误信息,包含错误码,可对照百度官方文档查阅v1.1.2新增
-5 权限申请被拒绝IOS不支持
100100 开始初始化SDK
100101 SDK初始化完成
100102 开始提取结果
100103 提取结果完成

隐私、权限声明

1. 本插件需要申请的系统权限列表:

Android 1. 网络访问权限: android.permission.INTERNET 2. 摄像头访问权限:android.permission.CAMERA 3. 文件读取权限: android.permission.READ_EXTERNAL_STORAGE 4. 文件写入权限:android.permission.WRITE_EXTERNAL_STORAGE IOS 1.使用相机权限:NSCameraUsageDescription 2.访问相册权限:NSPhotoLibraryUsageDescription

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件自身不采集任何数据,插件使用的百度文字识别SDK采集数据,请参考其官方说明:https://ai.baidu.com/ai-doc/OCR/ck3h7xws3

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问