【前端】使用tesseract插件识别提取图片中的文字

前言

有时候项目需要识别证照信息,或者拍照搜索内容等。图片处理一般是后端处理比较好,不过前端也有相关插件处理,tesseract.js就是一种前端处理方案。

使用tesseract

tesseract更多的语言模型:language配置

安装

Tesseract.js 可通过本地拷贝或 CDN 使用

CDN

<!-- v5 -->
<script src='https://cdn.jsdelivr.net/npm/tesseract.js@5/dist/tesseract.min.js'></script>

引用后,使用全局对象 Tesseract 即可。

npm / yarn

# 安装最新版本
npm install tesseract.js
yarn add tesseract.js

# 安装指定版本
npm install tesseract.js@3.0.3
yarn add tesseract.js@3.0.3

使用项目环境支持的模块语法引入即可。
例如,ESM引入:

import { createWorker } from 'tesseract.js';

代码中使用

开启worker使用

使用 createWorker会开启woker线程识别图片,并提取文字,第一个参数为语言模型类型。
createWorker参数说明
最后不用时,记得调用worker.terminate把woker关掉,避免造成卡顿、内存干爆等情况。

import { createWorker } from 'tesseract.js';
(async () => {
//	创建woker,并选用语言模型,
  const worker = await createWorker('eng');
  const ret = await worker.recognize('https://tesseract.projectnaptha.com/img/eng_bw.png');
  console.log(ret.data.text);
  //	关闭woker
  await worker.terminate();
})();

直接使用

调用 recognize 识别图片,并提取文字, recognize 的工作原理与 worker.recognize 相同,只是每次调用该函数时都会创建、加载和销毁一个新的 Worker。
参数:

  • 第一个参数:本地图片地址、base64、blob对象、buffer、 img元素或canvas元素(支持的图片类型:bmp, jpg, png, pbm, webp).
  • 第二个参数:语言模型,表示要下载的语言训练数据的字符串,多个语言用 + 连接,例如:eng+chi_tra。
  • 第三个参数:配置

该函数已经过时,应由 worker.recognize 代替,官方推荐使用 createWorker。

import { recognize } from 'tesseract.js';
let src = 'https://tesseract.projectnaptha.com/img/eng_bw.png'
recognize(src, 'chi_sim+eng')
            .then(result => {
              var extractedText = result.data.text;
              console.log('Extracted Text:', extractedText);
              document.getElementById('extracted-text').textContent = extractedText;
            })
            .catch(error => {
              console.error('Error:', error);
            });

效果

在这里插入图片描述



<body>
  <h1></h1>
  <input type="file" id="image-input" accept="image/*">
  <button onclick="processImage()">提取文字</button>
  <div id="extracted-text"></div>
  <!-- tesseract.jsv5  CDN -->
  <script defer src='https://cdn.jsdelivr.net/npm/tesseract.js@5/dist/tesseract.min.js'></script>
  <script defer>
    let worker;
    // 处理上传的图像
    function processImage() {
      var input = document.getElementById('image-input');
      if (input.files && input.files[0]) {
        var reader = new FileReader();
        reader.onload = async function (e) {
          // 图像加载完成后,执行文字提取
          worker = await Tesseract.createWorker('chi_sim+eng')
          worker.recognize(e.target.result)
            .then(result => {
              var extractedText = result.data.text;
              console.log('Extracted Text:', extractedText);
              document.getElementById('extracted-text').textContent = extractedText;

            })
            .catch(error => {
              console.error('Error:', error);
            }).finally(() => {
              console.log(123);
              if (worker)
                worker.terminate();

            })
        };
        reader.readAsDataURL(input.files[0]);
      }
    }
  </script>
</body>

结语

在使用时发现识别中文的语言训练模型准确率不高,英文或数字蛮准。 如果项目涉及识别中文,请使用其他方案,或者自己训练符合要求的语言模型。
结束了。

<think>好的,用户想用JavaScript开发一个Chrome插件,实现从图片提取文字的OCR功能。首先,我需要确定有哪些可用的工具和库。根据提供的引用,用户提到了Tesseract.js,这是一个基于Tesseract OCR的JavaScript库,支持浏览器和Node.js,而且引用[1]详细说明了它的跨平台支持和语言支持,看来这是主要的选择。 接下来,得考虑Chrome插件的结构。根据引用[4],Chrome插件开发需要了解manifest文件的结构,权限设置,以及如何在前端页面中集成脚本。用户需要创建一个manifest.json文件,声明必要的权限,比如访问标签页、下载图片的权限,还有可能需要的内容安全策略。 然后,处理图片的步骤。用户需要从网页中获取图片,可能需要通过content scripts或者后台脚本来抓取图片元素。引用[3]提到在浏览器控制台使用JS实现验证码识别,但插件中可能需要处理跨域或CSP问题。这里可能需要使用到Canvas来处理图片,因为Tesseract.js需要将图片转换为Image对象或Canvas元素。 接着是OCR处理部分。使用Tesseract.js识别图片中的文字,需要加载相应的语言包,并调用recognize方法。引用[3]也提到了使用外部服务规避CSP限制,但用户希望完全在插件内实现,所以需要确保Tesseract.js和相关worker文件被正确引入插件本地,避免使用CDN资源,这可能需要在manifest中指定web_accessible_resources。 另外,用户可能需要处理图片的来源,比如用户选择的本地图片或者网页中的图片。如果是网页中的图片,可能需要通过content script获取图片的URL,然后传递给后台脚本处理。引用[2]提到爬虫结合OCR的实现,可能需要类似的步骤来抓取并识别图片中的文字。 还有需要注意的内容安全策略,引用[3]指出,直接加载外部脚本可能被CSP阻止,因此需要将Tesseract.js及其worker文件打包到插件本地,并在manifest中设置适当的权限和资源访问规则。同时,可能需要使用Web Workers来运行Tesseract.js的处理,避免阻塞主线程。 最后,将识别结果返回给用户,可能需要通过弹出窗口显示结果,或者自动填充到网页的表单中。这部分需要插件前端页面与content scripts之间的通信,使用Chrome插件的消息传递API。 总结步骤应该是:配置manifest文件,处理图片获取,使用Tesseract.js进行OCR,处理结果展示。同时要解决资源加载、CSP和跨域问题,确保所有依赖库都本地化,避免外部请求。</think>### 如何使用 JavaScript 开发 Chrome 插件实现 OCR 文字识别? 以下是分步实现方案,结合 Tesseract.js 和 Chrome 插件开发技术: --- #### **1. 环境准备** - 安装 Chrome 浏览器 - 创建插件目录结构: ``` ocr-plugin/ ├── manifest.json # 插件配置文件 ├── popup.html # 插件弹窗界面 ├── popup.js # 弹窗交互逻辑 ├── tesseract.min.js # 本地化 Tesseract.js 库[^1] └── worker.js # Tesseract 的 Web Worker 文件 ``` --- #### **2. 配置插件清单 (manifest.json)** ```json { "manifest_version": 3, "name": "OCR 文字提取器", "version": "1.0", "permissions": ["activeTab", "scripting"], "action": { "default_popup": "popup.html" }, "web_accessible_resources": [{ "resources": ["tesseract.min.js", "worker.js"], "matches": ["<all_urls>"] }] } ``` **关键配置说明**: - 声明 `activeTab` 权限以访问当前页面内容 - 通过 `web_accessible_resources` 允许加载本地 OCR 资源[^3] --- #### **3. 实现图片处理逻辑 (popup.js)** ```javascript // 将网页中的图片转换为 Canvas async function processImage(imgElement) { const canvas = document.createElement('canvas'); canvas.width = imgElement.naturalWidth; canvas.height = imgElement.naturalHeight; const ctx = canvas.getContext('2d'); ctx.drawImage(imgElement, 0, 0); return canvas; } // 初始化 Tesseract async function initOCR() { const { createWorker } = Tesseract; const worker = await createWorker({ workerPath: chrome.runtime.getURL('worker.js'), langPath: 'https://tessdata.projectnaptha.com/4.0.0', corePath: chrome.runtime.getURL('tesseract.min.js'), }); await worker.loadLanguage('eng+chi_sim'); await worker.initialize('eng+chi_sim'); return worker; } ``` --- #### **4. 核心 OCR 识别流程** ```javascript // 在弹出窗口中绑定点击事件 document.getElementById('ocr-button').addEventListener('click', async () => { const [tab] = await chrome.tabs.query({ active: true, currentWindow: true }); chrome.scripting.executeScript({ target: { tabId: tab.id }, func: async () => { const img = document.querySelector('img'); // 选择目标图片 return img ? img.src : null; }, }, async ([result]) => { if (result.result) { const worker = await initOCR(); const { data: { text } } = await worker.recognize(result.result); document.getElementById('result').innerText = text; await worker.terminate(); } }); }); ``` --- #### **5. 处理技术难点** - **跨域图片处理**:通过 Canvas 绘制图片并转换为 Base64 格式 - **性能优化**:使用 Web Worker 运行 OCR 计算防止界面冻结 - **多语言支持**:加载 `chi_sim` 语言包实现中文识别 - **安全策略**:本地化 Tesseract 资源避免 CSP 拦截 --- #### **6. 部署与测试** 1. 访问 `chrome://extensions` 2. 开启 "开发者模式" 3. 点击 "加载已解压的扩展程序" 选择插件目录 4. 在含图片的网页点击插件图标测试 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZSK6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值