版本:"electron": "^13.6.9","tesseract.js": "^2.1.5"
tesseract.js是一个图片识别文字的js包,支持多国语言
使用tesseract时需要额外引入语言扩展包,electron可以很方便的兼容这种分离情况。
先使用element-ui实现一个文件上传识别的页面,通过el-upload上传的文件识别后渲染到textarea中。
<el-upload
class="upload-demo"
ref="upload"
action="#"
:on-preview="handlePreview"
:on-remove="handleRemove"
:file-list="fileList"
:multiple="false"
:limit="1"
:drag="true"
:on-change="handleChange"
:auto-upload="false">
<el-button slot="trigger" size="mini" type="primary" @click="fileList=[]">选取文件</el-button>
</el-upload>
<el-button slot="trigger" size="mini" @click="tesseractOcr" type="success">识别</el-button>
<el-input
disable="disable"
type="textarea"
:rows="5"
placeholder="识别结果"
v-model="textarea">
</el-input>
引入需要的包
import Tesseract from 'tesseract.js';
const { remote } = require('electron')
const path = require('path');
this.language为语言标识,比如:中文(chisim),英文(eng),langPath为语言识别包存放的路径,比如:D:\tesseract\,下载识别包:https://download.csdn.net/download/qq_22071421/88465259
这里:{langPath:this.langPath,gzip:false,cachePath:this.langPath},langPath是识别包路径,只到文件夹一层。 gzip为false,若为true,需要路径包的文件需要为.gz压缩文件,调用压缩文件时,配合cachePath(缓存目录),tesseract.js会先将压缩包解压到cachePath,再进行程序调用,如果是第一次调用,因为解压过程,所以会报错,解压好之后cachePath会存在这个如:chisim.traineddata这样的文件,之后正常转换不会报错。如果cachePath为空,它将会以项目根路径为默认路径进行使用。
async tesseractOcr(){
if(this.fileList.length==0){
this.$message.warning('文件不能为空');
return
}
let file=this.fileList[0].raw.path;
Tesseract.recognize(
file,
this.language,
{
langPath:this.langPath,
gzip:false,
cachePath:this.langPath}
).then(({ data: { text } }) => {
if(!text){
this.$message.warning('识别失败');
return
}
this.textarea=text
}).catch(()=>{
this.$message.warning('识别失败');
})
}