【问题标题】:How to increase OCR accuracy in Node JS and Tesseract.js?如何提高 Node JS 和 Tesseract.js 中的 OCR 准确性?
【发布时间】:2021-01-12 15:45:13
【问题描述】:

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

我运行我的脚本,它检测到这样的事情:

289 ,0

并且由于图像中的噪声,它会考虑空格,以及逗号等其他符号。

有没有我可以指定只是数字,而没有其他符号,如空格逗号

这也是我的代码:

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

【问题讨论】:

  • 我已经尝试过相同的图像,我得到289 0 没有,
  • 如果您只想返回数字,您可以过滤文本并从最终结果中删除标点符号,但这并不能提高 OCR 的准确性。
  • @NenadVracar 请注意例如声明。
  • @Kay 非常感谢。

标签: javascript node.js ocr


【解决方案1】:

我没有 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")
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-03-26
      • 2021-01-13
      • 2021-07-25
      • 1970-01-01
      • 2021-06-30
      • 2017-04-03
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多