如何提高 Node JS 和 Tesseract.js 中的 OCR 准确性?

How to increase OCR accuracy in Node JS and Tesseract.js?

我使用 tesseract.js 在 Node JS 中检测数字。 例如这是我的图片:

我 运行 我的脚本,它检测到这样的东西:

289 ,0

并且由于图像中的噪声,它考虑了space,其他符号如逗号

我是否可以指定 just 数字而没有其他符号,例如 spacecommas ?

这也是我的代码:

tesseract.recognize(
    __dirname + '/Captcha.png',
    'eng',
    { logger: m => console.log(m) }
).then(({ data: { text } }) => {
    console.log(text);
});

我没有 js tesseract API,但是之后似乎有一个非常简单的解决方法:

tesseract.recognize(
    __dirname + '/Captcha.png',
    'eng',
    { logger: m => console.log(m) }
).then(({ data: { text } }) => {
    const filteredText = Array.from(text.matchAll(/\d/g)).join("")
    console.log(filteredText)
})

下面是过滤功能的测试:

if (Array.from("209, 1".matchAll(/\d/g)).join("") !== "2091") {
  throw("Not working")
}

我刚开始学习 tesseract.js 的内部作业。

API 文档解释了如何在午餐时使用一些参数来实现您想要的效果:tessedit_char_whitelist(设置白名单字符使结果只包含这些字符)preserve_interword_spaces(在单词之间保留 space) 来自 https://github.com/naptha/tesseract.js/blob/master/docs/examples.md

const { createWorker } = require('tesseract.js'); 
const worker = createWorker();

(async () => {
  await worker.load();
  await worker.loadLanguage('eng');
  await worker.initialize('eng');
  await worker.setParameters({
    tessedit_char_whitelist: '0123456789',
    preserve_interword_spaces: '0',
  });
  const { data: { text } } = await worker.recognize('https://tesseract.projectnaptha.com/img/eng_bw.png');
  console.log(text);
  await worker.terminate();
})();