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

时间:2021-01-12 15:45:13

标签: javascript node.js ocr

我使用 tesseract.js 来检测 Node JS 中的数字。 例如这是我的形象:

enter image description here

我运行我的脚本,它检测到如下内容:

289 ,0

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

无论如何我可以指定数字,而没有其他符号,例如空格逗号

这也是我的代码:

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

2 个答案:

答案 0 :(得分:0)

我不知道 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")
}

答案 1 :(得分:0)

我刚刚开始学习 tesseract.js 的内部结构以完成一项任务。

API 文档解释了如何在工作中使用一些参数来实现您想要的:tessedit_char_whitelist(设置白名单字符使结果只包含这些字符)preserve_interword_spaces< /strong>(保留单词之间的空格) 来自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();
})();