随着智慧城市、智慧政务、智慧企业的科技发展潮流,之前非常多的纸质文件、档案等都被要求进行电子化管理,一是为了能够更方便的储存和备用,但更重要的是,在数据文件日益增长的情况下,引用电子化文档,更能增加搜索、调用文件的效率。
但是,上一代的电子化管理,仅仅是将文件扫描成图片储存起来,虽然可以再抬头名称中进行模糊的查找整个文件,然后调用出来后再一张一张的查看内容,在使用效率上,不能说是明显增加。
那么,将储存好的文档电子化信息(图片),更进一步的转化为可搜索和查找的文字信息,显得尤为重要。
本文以某单位自用的管理小程序为例,详尽讲述如何使用云开发调用腾讯云智能结构化OCR,实现功能。
通过腾讯云 OCR 控制台页面 开通文字识别服务。
开通后,点击左侧“资源包管理”可以查看到官方赠送的免费额度。目前赠送的额度每个月都会更新,并且次数都很多,完全不必担心开发、测试的费用问题。
新增按钮部分(上图红色“使用图片识别”)
// WXML
<view class="submitBtn" bind:tap="uploadPic">使用图片识别</view>
// CSS
.submitBtn{
background-color: #db4112;
color: #ffffff;
font-size: 40rpx;font-weight: bold;
width: 400rpx;height: 80rpx;line-height: 80rpx;
margin: 50rpx auto;
border-radius: 20rpx;
text-align: center;align-items: center;
}
前端逻辑部分:
// js部分代码
data: {
date:"",//收案日期
reason:"",//案由
client:"",//委托人
where:"",//办案单位
lawyer:"",//承办律师
},
uploadPic(){
wx.chooseMedia({
count:1,
mediaType:["image"],
sourceType:['album', 'camera'],
sizeType:['compressed'],
success:(res=>{
var size = res.tempFiles[0].size/1024/1024;
var tempFilePath = res.tempFiles[0].tempFilePath;
// 文件大小检测,避免用户传入过大图片
if(size>5){
wx.showToast({
title: '文件超过5M',
duration:3000
})
return
}else{
wx.showLoading({
title: '识别中...',
mask:true
})
var timestamp = Date.now().toString();
// 首先上传文件至云存储,并获取返回的文件ID
wx.cloud.uploadFile({
cloudPath: 'tempPic/'+timestamp + '.png',
filePath: tempFilePath, // 文件路径
}).then(res => {
// 调用云函数SmartStructuralOCRV2并传入文件ID参数
wx.cloud.callFunction({
name:"SmartStructuralOCRV2",
data:{
fileID:res.fileID
}
}).then(res=>{
wx.hideLoading()
var listArr = res.result.StructuralList
let listMap = new Map();
for(let i = 0;i<5;i++){
listMap.set(listArr[i].Groups[0].Lines[0].Key.AutoName,listArr[i].Groups[0].Lines[0].Value.AutoContent);
}
console.log(listMap);
this.setData({
date:listMap.get("收案日期"),
reason:listMap.get("案由"),
client:listMap.get("办案单位"),
where:listMap.get("委托人"),
lawyer:listMap.get("承办律师"),
})
})
}).catch(error => {
wx.hideLoading()
console.log(error)
// handle error
})
}
})
})
}
微信开发者工具中,新建上图中调用的云函数SmartStructuralOCRV2
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
// 腾讯云API
const tencentcloud = require("tencentcloud-sdk-nodejs");
const OcrClient = tencentcloud.ocr.v20181119.Client;
// 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
const clientConfig = {
credential: {
secretId: "AKIDjIcgU1HI2Vhc*******************",
secretKey: "KOBhwykFagX8Ua****************",
},
region: "ap-guangzhou",
profile: {
httpProfile: {
endpoint: "ocr.tencentcloudapi.com",
},
},
};
// 云函数入口函数
exports.main = async (event, context) => {
var fileID = event.fileID;
// 获取文件临时地址
const fileList = [fileID]
const result = await cloud.getTempFileURL({
fileList: fileList,
})
var tempUrl = result.fileList[0].tempFileURL
// 实例化要请求产品的client对象,clientProfile是可选的
const client = new OcrClient(clientConfig);
const params = {
"ImageUrl": tempUrl,
// 此处根据项目需要,筛选返回的键值对
"ItemNames": [
"收案日期",
"案由",
"办案单位",
"委托人",
"承办律师"
]
};
try{
return await client.SmartStructuralOCRV2(params)
}catch(e) {
console.error(e)
return false
}
}
此处云函数的调用加入了腾讯云的SDK,需要添加依赖如下:
在上图云函数目录中,找到package.json文件,加入 "tencentcloud-sdk-nodejs": "^4.0.348" 字段
"dependencies": {
"wx-server-sdk": "~3.0.1",
"tencentcloud-sdk-nodejs": "^4.0.348"
}
在上传云函数之后,即可在云端安装依赖(右键云函数,点击“上传并部署(云端安装依赖)”)
点击选择图片测试图后,得到结果如下:
Map(5) {"收案日期" => "2024年", "案由" => "保险合同纠纷", "办案单位" => "西山法院", "委托人" => "720公司", "承办律师" => "爱去西"}
[[Entries]]
0: {"收案日期" => "2024年"}
1: {"案由" => "保险合同纠纷"}
2: {"办案单位" => "西山法院"}
3: {"委托人" => "720公司"}
4: {"承办律师" => "爱去西"}
size: (...)
__proto__: Map
同时界面上也在对应字段上填充了值:
可以看到,腾讯云的智能结构化识别V2接口,在识别打印字体与手写字体混合的图片测试中,也能够非常准确的划分出整体结构,清晰的给出相应的键值对。在获取结果上,也可以根据用户的需求,筛选出想要的部分。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。