使用tesseract.js库实现 OCR 识别
tesseract.js 本质上也是基于 tesseract-ocr 的封装,但其不同的是它借助 emscripten 将 C++ 开发的 tesseract-ocr 编译为 WebAssembly 实现能力支持,现代浏览器均支持 WebAssembly ,故其也可直接在浏览器中应用。
以下对使用 tesseract.js 实现 OCR 文本识别作简要介绍。
安装tesseract.js依赖
npm i tesseract.js
# or
yarn add tesseract.js
下载训练数据
tesseract.js 默认从其网站下载训练数据,但由于训练数据包比较大,可能需要比较久的时间。我们可以先使用迅雷等工具将其下载下来,然后通过 langPath 参数指定训练数据的位置。
下载地址示例: https://tessdata.projectnaptha.com/4.0.0_fast/chi_sim.traineddata.gz
下载其他语言类型的训练数据,只需将示例地址中的 chi_sim 改为要下载的语言标识即可。
当然你也可以从其默认训练数据的仓库下载(可能会因为 git 拉取太久而失败),所有默认支持的的语言也都可以从这里知晓。
默认训练数据仓库地址为:https://github.com/naptha/tessdata
基于tesseract.js的图片文本识别示例
const Tesseract = require('tesseract.js');
const path = require('path');
const worker = Tesseract.createWorker({
logger: m => console.log(m),
errorHandler: err => console.log('[error:]', err),
// 使用离线训练数据
langPath: path.resolve(__dirname, './tessdata/4.0.0_best'),
});
const ocrTest = async () => {
await worker.load();
await worker.loadLanguage('chi_sim');
await worker.initialize('chi_sim');
await worker.setParameters({
// 验证码只为数字的情况下,设定白名单
// tessedit_char_whitelist: '0123456789',
tessedit_pageseg_mode: tessedit_pageseg_mode: Tesseract.PSM.AUTO,
});
// const image = require('fs').readFileSync('./donate_wx.png');
const image = 'https://lzw.me/wp-content/uploads/2017/02/donate_wx.png';
const { data: { text } } = await worker.recognize(image);
console.log(text);
await worker.terminate();
});
ocrTest();