提高tesseract-ocr中数字识别的准确性

时间:2020-09-26 13:32:25

标签: node.js discord.js tesseract

我最近在Sharp(node.js图像编辑器)的帮助下开始使用tesseract-ocr。在我的算法中,应该对某些图片进行锐化调整大小和裁剪,并获得tesseract-ocr识别的其余图片的内容。这必须在图片的两个单独的部分中发生两次,在图片的第一部分上它可以完美地识别字母,因此我不会张贴这部分代码,无论如何它与第二部分相同,问题在于第二张图片。应该读取图片中的这两个数字,而要做的只是读取所有这些数字。

const config = {
  lang: "eng",
  oem: 1,
  psm: 3,
}

let originalImage = `tmp_scrsht.jpg`;
let outputImagelevel = 'levelcropped.jpg'

sharp(originalImage).resize({ height: 1000 }).extract({ width : 300, height:250 , left: 5, top: 500}).threshold(230).toFile(outputImagelevel)
  .then(function(new_file_info) {
      tesseract.recognize(outputImagelevel, config)
      .then(text => {
        console.log(text)
        var newtext = text.split(' ') && text.split('\n') 
        level = newtext[0];
        message.author.send(`number is: ${level}`);
      })
  })

调整初始图像的大小并进行裁剪,以便使tesseract集中在我感兴趣的图像部分。另外,由于我没有裁剪的运气,因此我读到如果对图像设置锐利度的阈值,则tesseract将更有效地读取图像,这将图像像素转换为255或0是有意义的。

包含所有这些过滤器,最终的图像tesseract被调用来读取是这样的:

the image tesseract must read

正如我之前说的,由于某种原因,在大多数这些图片中,它会忽略数字,而只会读取其他所有内容,在某些图片中,它可以工作,在某些图片中,则没有一致性,或者图片上没有图案它可以识别任何东西。

1 个答案:

答案 0 :(得分:0)

尝试设置 tessedit_char_whitelist

来自examples

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',
  });
  const { data: { text } } = await worker.recognize('https://tesseract.projectnaptha.com/img/eng_bw.png');
  console.log(text);
  await worker.terminate();
})();