更新记录
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 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
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/平板设备】:https://ext.dcloud.net.cn/plugin?id=2681
- 插件2【支持Android/IOS/平板设备/支持戴口罩采集】:https://ext.dcloud.net.cn/plugin?id=3631
注意事项
- 使用该插件时一定要先试用测试,虚拟物品购买之后无法退款!!!
准备工作
- Android、ios端证书准备工作
- 1) Android端:准备应用的Android打包文件.jks文件并获取MD5。参考:https://ask.dcloud.net.cn/article/35777
- 2) IOS端:这里只简单介绍一下windows系统下如何创建ios证书,如果你是mac系统,直接百度搜索就行,网上一堆教程,windows证书申请教程参考:https://www.pianshen.com/article/59121497532/
- 百度资料准备
- 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条及以后
详细接入步骤
-
点击试用插件,选择要试用的项目,获取试用资格
-
点击manifest.json --> App 原生插件配置 --> 云端插件 --> 勾选插件对应的插件
-
使用插件
- 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 否 期望压缩大小,单位KB v5.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.2 ,v2.8.7新增``IOS不支持 |
scaleHeight | double | 0.2 | 否 | 手动拍照后显示的裁剪框高度,取值范围0.05 ~ 0.2 ,v2.8.7新增``IOS不支持 |
base64Quality | int | 40 | 否 | 返回的base64图片质量,取值范围0 ~ 100 ,v2.8.7新增``IOS不支持 |
hintText | string | '' | 否 | 自定义底部提示文字内容,不填则使用插件默认文字提示v3.1.0新增 |
hintTextEnable | boolean | true | 否 | 是否显示底部文字提示v3.1.0新增 |
cameraId | int | 否 | 相机ID(如果你是正常手机设备而非定制设备(如:pos机、扫码枪等)则无需设置此属性)v3.2.9新增``IOS不支持 |
- 3) ocrType识别类型说明,百度webApi地址:https://ai.baidu.com/ai-doc/OCR/Ek3h7xypm
属性值 | 说明 |
---|---|
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 | 提取结果完成 |