You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
4.6 KiB
172 lines
4.6 KiB
|
3 years ago
|
<template>
|
||
|
|
<view class="box">
|
||
|
|
<view class="header">
|
||
|
|
<button @tap="uploadImage" type="primary">拍照或上传图片进行识别</button>
|
||
|
|
</view>
|
||
|
|
<view class="main">
|
||
|
|
<scroll-view scroll-y="true">
|
||
|
|
<view style="display: flex;align-items: center;">
|
||
|
|
<h4 style="margin-left: 4px;" v-if="content.length>0">识别结果:</h4>
|
||
|
|
<text style="color: green;font-weight: bold;font-size: 12px;">{{message}}</text>
|
||
|
|
</view>
|
||
|
|
<view style="padding: 0 4px;margin-bottom: 100rpx;">
|
||
|
|
<text v-for="(item,index) in content" :key="index">
|
||
|
|
<p>
|
||
|
|
<text selectable="true">{{item.words}}</text>
|
||
|
|
</p>
|
||
|
|
</text>
|
||
|
|
</view>
|
||
|
|
</scroll-view>
|
||
|
|
</view>
|
||
|
|
<view class="footer">
|
||
|
|
<button @tap="saveTxt(contentStr)" type="primary" v-if="contentStr!==''" >保存本地</button>
|
||
|
|
</view>
|
||
|
|
</view>
|
||
|
|
|
||
|
|
</template>
|
||
|
|
|
||
|
|
<script>
|
||
|
|
import {
|
||
|
|
getTokenR,
|
||
|
|
} from '@/api/index.js'
|
||
|
|
import {
|
||
|
|
pathToBase64,
|
||
|
|
base64ToPath
|
||
|
|
} from '@/components/image-tools/index.js'
|
||
|
|
export default {
|
||
|
|
data() {
|
||
|
|
return {
|
||
|
|
content: [],
|
||
|
|
token: "",
|
||
|
|
contentStr: "",
|
||
|
|
message: "",
|
||
|
|
}
|
||
|
|
},
|
||
|
|
created() {
|
||
|
|
getTokenR().then(res => {
|
||
|
|
this.token = res.access_token
|
||
|
|
})
|
||
|
|
},
|
||
|
|
methods: {
|
||
|
|
uploadImage() { // 选取照片,进行OCR识别
|
||
|
|
|
||
|
|
uni.chooseImage({
|
||
|
|
count: 1, //默认9
|
||
|
|
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
|
||
|
|
success: (res) => {
|
||
|
|
this.contentStr = ""
|
||
|
|
this.message = ""
|
||
|
|
uni.showLoading({
|
||
|
|
title: '正在识别中...'
|
||
|
|
});
|
||
|
|
// this.src = res.tempFilePaths[0]; //后面还能用到 src 暂且留着
|
||
|
|
pathToBase64(res.tempFilePaths[0]).then(res2 => {
|
||
|
|
// 下面进行转码
|
||
|
|
uni.request({
|
||
|
|
url: `https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic?access_token=${this.token}`,
|
||
|
|
data: {
|
||
|
|
image: res2,
|
||
|
|
language_type: 'ENG', //识别语言类型,默认中英文结合
|
||
|
|
detect_direction: true, //检测图像朝向
|
||
|
|
},
|
||
|
|
method: 'POST',
|
||
|
|
header: {
|
||
|
|
'Content-Type': 'application/x-www-form-urlencoded'
|
||
|
|
},
|
||
|
|
success: (res) => {
|
||
|
|
this.content = res.data.words_result;
|
||
|
|
for (const i in res.data.words_result) {
|
||
|
|
this.contentStr += res.data.words_result[i]
|
||
|
|
.words +
|
||
|
|
"\n"
|
||
|
|
}
|
||
|
|
uni.hideLoading(); //把正在加载中隐藏
|
||
|
|
}
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
}
|
||
|
|
})
|
||
|
|
},
|
||
|
|
// 保存本地文件txt
|
||
|
|
saveTxt(res) {
|
||
|
|
let dir = '/A_store';
|
||
|
|
let pathUrl = `/A_store/${Date.parse(new Date())}.txt`;
|
||
|
|
// #ifdef APP-PLUS
|
||
|
|
let environment = plus.android.importClass("android.os.Environment");
|
||
|
|
let sdRoot = environment.getExternalStorageDirectory(); //文件夹根目录
|
||
|
|
let File = plus.android.importClass("java.io.File");
|
||
|
|
let BufferedReader = plus.android.importClass("java.io.BufferedReader");
|
||
|
|
let FileReader = plus.android.importClass("java.io.FileReader");
|
||
|
|
let FileWriter = plus.android.importClass("java.io.FileWriter");
|
||
|
|
let BufferedWriter = plus.android.importClass("java.io.BufferedWriter");
|
||
|
|
let OutputStreamWriter = plus.android.importClass("java.io.OutputStreamWriter");
|
||
|
|
let FileOutputStream = plus.android.importClass("java.io.FileOutputStream");
|
||
|
|
// #endif
|
||
|
|
// #ifdef APP-PLUS
|
||
|
|
try {
|
||
|
|
//不加根目录创建文件(即用相对地址)的话directory.exists()这个判断一值都是false
|
||
|
|
let directory = new File(sdRoot + dir);
|
||
|
|
if (!directory.exists()) {
|
||
|
|
console.log('创建目录')
|
||
|
|
directory.mkdirs(); //创建目录
|
||
|
|
}
|
||
|
|
let file = new File(sdRoot + pathUrl);
|
||
|
|
console.log(file.exists())
|
||
|
|
if (!file.exists()) {
|
||
|
|
file.createNewFile(); //创建文件
|
||
|
|
}
|
||
|
|
let path = sdRoot + pathUrl
|
||
|
|
|
||
|
|
// let writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path), "UTF-8"));
|
||
|
|
// writer.write(res);
|
||
|
|
// writer.close();
|
||
|
|
|
||
|
|
let fos = new FileWriter(sdRoot + pathUrl, true);
|
||
|
|
fos.write(res);
|
||
|
|
fos.close();
|
||
|
|
uni.showToast({
|
||
|
|
icon: "success",
|
||
|
|
mask: true,
|
||
|
|
title: "保存成功"
|
||
|
|
})
|
||
|
|
this.message = "(提示:文件存储在本地/A_store/目录下)"
|
||
|
|
return true;
|
||
|
|
} catch (e) {
|
||
|
|
uni.showToast({
|
||
|
|
icon: "error",
|
||
|
|
mask: true,
|
||
|
|
title: "保存失败"
|
||
|
|
})
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
return false;
|
||
|
|
//#endif
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
</script>
|
||
|
|
<style lang="scss" scoped>
|
||
|
|
.box {
|
||
|
|
position: relative;
|
||
|
|
.header,.footer {
|
||
|
|
position: fixed;
|
||
|
|
width: 100%;
|
||
|
|
}
|
||
|
|
.header {
|
||
|
|
top: 0%;
|
||
|
|
z-index: 1000;
|
||
|
|
}
|
||
|
|
.footer {
|
||
|
|
bottom: 0%;
|
||
|
|
background: #fff;
|
||
|
|
}
|
||
|
|
.main {
|
||
|
|
position: absolute;
|
||
|
|
top: 90rpx;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
</style>
|