Skip to content

Commit 1914d82

Browse files
committed
Add DEMO-OCR and DEMO-SEC in miniprogram
1 parent def03dd commit 1914d82

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1149
-0
lines changed

miniprogram/tcb-demo-ocr/README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# 【通用文字识别】小程序云开发项目实战
2+
3+
## 项目介绍
4+
5+
此处为项目完整代码,可以直接部署使用;
6+
7+
- 初始化云开发环境,如果有多个云开发环境造成wx.cloud.init错误,则在app.js处进行环境定义。
8+
- 将cloudfunctions文件夹内的4个云函数创建并部署
9+
10+
## 参考文档
11+
12+
- [云开发文档](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/getting-started.html)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"permissions": {
3+
"openapi": [
4+
"ocr.bankcard",
5+
"ocr.printedText",
6+
"ocr.idcard"
7+
]
8+
}
9+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/**
2+
* 云函数:添加并识别图片
3+
* 用途:使用云调用识别文字能力,将小程序端上传的图片进行文字识别,将文字图片信息上传云数据库进行保存。
4+
*/
5+
const cloud = require('wx-server-sdk')
6+
7+
//云开发初始化
8+
cloud.init();
9+
10+
//将云开发数据库能力声明给db
11+
const db = cloud.database();
12+
13+
//将云开发数据库command能力声明给 _
14+
const _ = db.command;
15+
16+
//云函数运行主函数,为异步函数
17+
exports.main = async (event, context) => {
18+
19+
//声明一个mess,用于承载函数执行结果用于返回
20+
var mess = {};
21+
try {
22+
/* 此代码段用于解析云存储File ID为url,用于之后的业务逻辑使用
23+
event.img为小程序端的请求数据,为上传的图片fileid
24+
在正常业务中应该选择使用cloud.getTempFileURL()来获取临时url返回给用户 */
25+
let first = event.img.indexOf('.');
26+
let end = event.img.indexOf('/', first);
27+
let httpsrc = 'https://' + event.img.slice(first + 1, end) + '.tcb.qcloud.la/' + event.img.slice(end + 1, event.img.length);
28+
//解析云存储ID为url代码片段结束
29+
30+
//云调用能力,进行图片转换文字请求,相比于正常http请求,免除鉴权流程,整个代码逻辑更加轻便。
31+
let result = null;
32+
33+
try{
34+
/*==================从这里开始修复==========================*/
35+
/* 当result=-1时会在前端显示识别失败! */
36+
/* result应该是文字识别的结果集,它应该使用云开发的云调用能力 */
37+
result = -1;
38+
/* 我们将37行代码替换为以下代码,result获得文字识别云调用结果 */
39+
40+
// result = await cloud.openapi.ocr.printedText({
41+
// type: 'photo',
42+
// imgUrl: httpsrc
43+
// })
44+
45+
/*==================到这里修复结束==========================*/
46+
/* 当你修改完成后,在左边文件栏,右键点击此代码所在的文件夹 */
47+
/* 在出现的列表里,点击【上传并部署:云端安装依赖】 */
48+
/* 等待部署成功,你可以重新尝试上传图片操作,一定可以成功 */
49+
}
50+
catch (err) {
51+
console.log(err);
52+
result = -1;//约定信息,表示识别无效
53+
}
54+
55+
//构建对象,承载云调用结果和图片信息
56+
var obimg = {};
57+
obimg.src = event.img;//图片地址
58+
obimg.content = result;//识别结果
59+
60+
//根据用户的openid,存入上边识别的图片信息
61+
await db.collection('list').where({
62+
openid: event.userInfo.openId
63+
}).update({
64+
data: {
65+
//_.push为云开发数据库中的command操作,含义为往数组中增加传入元素数据。
66+
ocrlist: _.push([obimg])
67+
}
68+
});
69+
mess.code = 0;
70+
71+
}
72+
catch (e) {
73+
//当发生错误时,如解构FileID等,将执行此代码段,code=-1为异常
74+
console.log(e);
75+
mess.code = -1;
76+
mess.err = e;
77+
}
78+
//返回mess给前端
79+
return mess;
80+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"name": "addimg",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "index.js",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1"
8+
},
9+
"author": "",
10+
"license": "ISC",
11+
"dependencies": {
12+
"wx-server-sdk": "latest"
13+
}
14+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/**
2+
* 云函数:初始化列表
3+
* 用途:根据用户的唯一openid构建数据库文档,用于存储用户的信息;每次调用时都要返回存储的信息。
4+
*/
5+
const cloud = require('wx-server-sdk')
6+
7+
//云开发初始化
8+
cloud.init();
9+
10+
//将云开发数据库能力声明给db
11+
const db = cloud.database();
12+
13+
//云函数运行主函数,为异步函数
14+
exports.main = async (event, context) => {
15+
16+
//声明一个mess,用于承载函数执行结果用于返回
17+
var mess = {};
18+
try {
19+
20+
//利用数据库where查找,数据集中openid为用户所属的文档
21+
const userdata = (await db.collection('list').where({
22+
openid: event.userInfo.openId
23+
}).get()).data;
24+
25+
//如果length不等于0,则证明存在用户所属文档
26+
if (userdata.length != 0) {
27+
28+
//将用户的识别列表读取出来
29+
mess.list = userdata[0].ocrlist;
30+
//将文档id取出,用于小程序端上传图片时的文件夹命名。由于安全性,不可以将openid传给小程序端
31+
mess.id = userdata[0]._id;
32+
//正常标志code=0
33+
mess.code = 0;
34+
}
35+
//如果length等于0,则没有用户文档需要创建
36+
else {
37+
38+
//使用数据库add增加,根据data传入的JSON对象进行构建,返回的为构建的信息,包含文档id
39+
let result = await db.collection('list').add({
40+
data: {
41+
openid: event.userInfo.openId,
42+
ocrlist: []
43+
}
44+
});
45+
46+
//将文档id取出
47+
mess.id = result._id;
48+
//新建则识别列表为空
49+
mess.list = [];
50+
//正常标志code=0
51+
mess.code = 0;
52+
}
53+
}
54+
catch (e) {
55+
//当发生错误时,如解构FileID等,将执行此代码段,code=-1为异常
56+
console.log(e);
57+
mess.code = -1;
58+
mess.err = e;
59+
}
60+
//返回mess给前端
61+
return mess;
62+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"name": "init",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "index.js",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1"
8+
},
9+
"author": "",
10+
"license": "ISC",
11+
"dependencies": {
12+
"wx-server-sdk": "latest"
13+
}
14+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/**
2+
* 云函数: 删除识别的图片
3+
* 用途:根据图片地址,将云数据库保存的识别图片进行删除。
4+
*/
5+
const cloud = require('wx-server-sdk')
6+
7+
//云开发初始化
8+
cloud.init();
9+
10+
//将云开发数据库能力声明给db
11+
const db = cloud.database();
12+
13+
//将云开发数据库command能力声明给 _
14+
const _ = db.command;
15+
16+
//云函数运行主函数,为异步函数
17+
exports.main = async (event, context) => {
18+
19+
//声明一个mess,用于承载函数执行结果用于返回
20+
var mess = {};
21+
try {
22+
23+
//利用数据库where查找,数据集中openid为用户所属的文档,然后使用update进行更新操作
24+
const userdata = await db.collection('list').where({
25+
openid: event.userInfo.openId
26+
}).update({
27+
data: {
28+
//_.pull为command能力,含义为将数组中src为event.img的元素删除
29+
ocrlist: _.pull({
30+
src: event.img
31+
})
32+
}
33+
});
34+
//使用云存储能力,根据列表的fileid地址删除文件
35+
await cloud.deleteFile({
36+
fileList: [event.img]
37+
})
38+
39+
//在处理完全后,返回自定义的code码,表示一定的逻辑含义;在这里code=0为正常成功
40+
mess.code = 0;
41+
}
42+
catch (e) {
43+
//当发生错误时,如解构FileID等,将执行此代码段,code=-1为异常
44+
console.log(e);
45+
mess.code = -1;
46+
mess.err = e;
47+
}
48+
//返回mess给前端
49+
return mess;
50+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"name": "removeimg",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "index.js",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1"
8+
},
9+
"author": "",
10+
"license": "ISC",
11+
"dependencies": {
12+
"wx-server-sdk": "latest"
13+
}
14+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"permissions": {
3+
"openapi": [
4+
"ocr.bankcard",
5+
"ocr.printedText",
6+
"ocr.idcard"
7+
]
8+
}
9+
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
/**
2+
* 云函数: 重新识别图片
3+
* 用途:根据图片地址,重新使用云调用能力识别图片,并更新数据库的存储。
4+
*/
5+
const cloud = require('wx-server-sdk')
6+
7+
//云开发初始化
8+
cloud.init();
9+
10+
//将云开发数据库能力声明给db
11+
const db = cloud.database();
12+
13+
//将云开发数据库command能力声明给 _
14+
const _ = db.command;
15+
16+
//云函数运行主函数,为异步函数
17+
exports.main = async (event, context) => {
18+
var mess = {};
19+
try {
20+
//首先先删除数据库中的该元素
21+
//利用数据库where查找,数据集中openid为用户所属的文档,然后使用update进行更新操作
22+
const userdata = await db.collection('list').where({
23+
openid: event.userInfo.openId
24+
}).update({
25+
data: {
26+
//_.pull为command能力,含义为将数组中src为event.img的元素删除
27+
ocrlist: _.pull({
28+
src: event.img
29+
})
30+
}
31+
});
32+
33+
/* 此代码段用于解析云存储File ID为url,用于之后的业务逻辑使用
34+
event.img为小程序端的请求数据,为上传的图片fileid
35+
在正常业务中应该选择使用cloud.getTempFileURL()来获取临时url返回给用户 */
36+
let first = event.img.indexOf('.');
37+
let end = event.img.indexOf('/', first);
38+
let httpsrc = 'https://' + event.img.slice(first + 1, end) + '.tcb.qcloud.la/' + event.img.slice(end + 1, event.img.length);
39+
//解析云存储ID为url代码片段结束
40+
41+
//云调用能力,进行图片转换文字请求,相比于正常http请求,免除鉴权流程,整个代码逻辑更加轻便。
42+
let result = null;
43+
try {
44+
result = await cloud.openapi.ocr.printedText({
45+
type: 'photo',
46+
imgUrl: httpsrc
47+
})
48+
} catch (err) {
49+
//当正常业务操作出现问题,比如云调用超过限制则执行此代码段
50+
console.log(err);
51+
result = -1;//约定信息,表示识别无效
52+
}
53+
54+
//构建对象,承载云调用结果和图片信息
55+
var obimg = {};
56+
obimg.content = result;
57+
obimg.src = event.img;
58+
59+
//根据用户的openid,存入上边识别的图片信息
60+
await db.collection('list').where({
61+
openid: event.userInfo.openId
62+
}).update({
63+
data: {
64+
//_.push为云开发数据库中的command操作,含义为往数组中增加传入元素数据。
65+
ocrlist: _.push([obimg])
66+
}
67+
});
68+
69+
//在处理完全后,返回自定义的code码,表示一定的逻辑含义;在这里code=0为正常成功
70+
mess.code = 0;
71+
//将重新识别的文字信息也返回,用于即时展示
72+
mess.content = result;
73+
}
74+
catch (e) {
75+
//当发生错误时,如解构FileID等,将执行此代码段,code=-1为异常
76+
console.log(e);
77+
mess.code = -1;
78+
mess.err = e;
79+
}
80+
//返回mess给前端
81+
return mess;
82+
}

0 commit comments

Comments
 (0)