vue中使用tesseract实现OCR/文字识别(识别图片中的文字)

文章目录

tesseract官网地址:https://tesseract.projectnaptha.com/

github:https://github.com/naptha/tesseract.js#tesseractjs

tesseract在线使用

npm安装依赖:

javasrcipt 复制代码
npm install tesseract.js

页面引入:

javasrcipt 复制代码
import Tesseract from 'tesseract.js'

js方法:

url : 图像地址

language: 语种 参数 chi_sim eng jpn

javasrcipt 复制代码
// recognize 第一个参数:图像,第二个:语种
Tesseract.recognize(
  url,
 language,
 //  { logger: m => console.log(m) }
).then((d) => {
  console.log(d.data.text);
  ocrStr.value = d.data.text
})

tesseract离线使用

克隆仓库

https://gitcode.net/mirrors/jeromewu/tesseract.js-offline.git

执行 npm install

拷贝 worker.min.js和tesseract-core.wasm.js

在public文件夹下新建tesseract,将刚刚克隆的项目里面的node_modules/tesseract.js/dist/worker.min.js和node_modules/tesseract.js-core/tesseract-core.wasm.js两个js文件拷贝到tesseract文件夹下

index.html 引入tesseract.min.js

<script src="/tesseract/tesseract.min.js"></script>

下载语言包

下载地址: https://github.com/naptha/tessdata/tree/gh-pages/4.0.0

可根据自行选择版本下载

https://github.com/naptha/tessdata/blob/gh-pages/4.0.0/chi_sim.traineddata.gz

https://github.com/naptha/tessdata/blob/gh-pages/4.0.0/eng.traineddata.gz

下载完成后,拷贝到tesseract/lang-data文件夹下

文件不上传文件服务器

html 复制代码
          <input type="file" name="file" accept="image/png, image/jpeg, image/jpg" @change="change" style="margin-top: 30px"/>

可使用URL.createObjectURL将上传的文件生成临时url

javasrcipt 复制代码
    change() {
      //生成的临时url
      const url = URL.createObjectURL(document.querySelector('input[type=file]').files[0]);
      this.recognize(url);
    },

js方法

javasrcipt 复制代码
<script >
//为了在普通函数和ascyn函数中都能调用
let worker; 
export default {
  name: "index",
  data(){
    return {}
  },
  methods: {
  //url 图片地址
    async recognize(url) {
      let that = this //避免this指向问题
      worker = Tesseract.createWorker({
        /*        logger: m => {
                  that.progress = m.progress
                  that.status = m.status
                },*/
        //配置本地资源路径,语言包的实际位置是通过langPath+'/'+lang+'.traineddata.gz'得到的,所以不要改语言包文件名
        workerPath: '/tesseract/worker.min.js',
        corePath: '/tesseract/tesseract-core.wasm.js',
        langPath: '/tesseract/lang-data'
      })
      //调用async recognizeOcr函数进行识别
      let data = await this.recognizeOcr(url);
      console.log(data.data.text);
    },
    //url 图片地址
    async recognizeOcr(url){
      await worker.load();
      //可以通过'+'设置多个语言
      await worker.loadLanguage('chi_sim+eng+jpn'); 
      await worker.initialize('chi_sim+eng+jpn');
      const data = await worker.recognize(url);
      return data;
    }
  }
}
</script>

优化

tesseract.j、lang-data、tesseract.js-core文件较大,以后项目npm run build和部署到服务器时都会比较慢,故建议有条件的同学放到cdn托管。

相关推荐
花归去10 小时前
vue3中 function getText(){} 、 const getText=()=>{} ;区别在哪里,优缺点
javascript·vue.js·ecmascript
ZC跨境爬虫10 小时前
跟着 MDN 学 HTML day_33:(Attr 接口与属性节点的深入理解)
前端·javascript·ui·html·音视频·html5
神所夸赞的夏天10 小时前
如何获取多层json数据,存成dictionary,并取最大最小值
java·前端·json
红色的小鳄鱼10 小时前
前端面试js手写
开发语言·前端·javascript
焦糖玛奇朵婷10 小时前
健身房预约小程序开发、设计
java·大数据·服务器·前端·小程序
上海云盾王帅11 小时前
WEB业务如何接入安全防护:从零到一的实战指南
前端·安全
用户0595401744611 小时前
AI Agent记忆丢失踩坑实录:这个问题让我排查了3天
前端·css
web行路人11 小时前
前端对Commands(斜杠命令)一些常用
前端·javascript·vue.js·vue
当时只道寻常11 小时前
从零到一打造企业级全栈后台管理系统 —— 技术选型、工程化实践与深度思考
前端·全栈·前端工程化
竹林81811 小时前
用 ethers.js 连 MetaMask 做钱包登录,我踩了三个坑才搞定跨页面状态同步
前端·javascript