纯前端实现OCR文字识别(使用Electron+Vue+tesseract.js)

3,120 阅读1分钟

1 技术选型

Electron+Vue+tesseract.js

  • Electron 是一个使用 JavaScript, HTML 和 CSS 构建跨平台桌面应用程序的开源库,同时集成 Node.js 以提供强大的本地能力。

  • 通过Vue来渲染页面,Vue.js是一个用于构建用户界面的渐进式JavaScript框架。

  • 文字识别的主要功能通过tesseract.js来实现。tesseract.js 是一个基于 Tesseract OCR (Optical Character Recognition, 光学字符识别) 的 JavaScript 库,用于从图像中提取文本。它是 Tesseract OCR 引擎的 JavaScript 版本,通过 WebAssembly 技术在浏览器中运行,从而实现高效的图像文本识别。

2 实验效果

这是要识别的图片文字,识别出来有个别错误,但是整体是对的。

微信图片_20240530154417.png

image.png

image.png

3 核心代码

  • 页面部分通过vue+elementui实现拖拽功能,通过drop事件获取文件路径,再向electron主进程发送beginOcr事件,由主进程进行图片文字识别
<div id="dropzone" @dragover="$event.preventDefault()" @drop="drop($event)" draggable="true">
    <span v-if="!imgUrl"> Drag files here</span>
    <img v-else :src="imgUrl" alt="">
</div>
 methods: {
     // 获取文件路径
    drop (ev) {
      ev.preventDefault()
      this.imgUrl = ev.dataTransfer.files[0].path; // FileList object.
    },
    // 向electron主进程发送beginOcr事件,由主进程进行图片文字识别
    beginOcr () {
      ipcRenderer.send('beginOcr', this.imgUrl);
    }
  },
  • 核心代码部分

Electron主进程,引入createWorker方法,创建一个worker处理图像,调用worker.recognize方法,把图片路径传入该方法,进行文字解析识别。执行完方法后,再向渲染进程发送事件,返回解析的文本, event.sender.send('image_text',text);

const { createWorker } = require('tesseract.js');
ipcMain.on('beginOcr', async (event, filePath) => {
  console.log(1111,filePath)
  const worker = await createWorker('chi_sim');
  const { data: { text } } = await worker.recognize(filePath);
  console.log(text);
  event.sender.send('image_text',text);
  await worker.terminate();
})

4 源码地址

github.com/IandfChen-2…

后期准备添加新的功能,如处理视频,视频压缩,处理pdf,录屏等等