Node.js 提高tesseract ocr中数字识别的准确性

Node.js 提高tesseract ocr中数字识别的准确性,node.js,discord.js,tesseract,Node.js,Discord.js,Tesseract,我最近在sharp(node.js图像编辑器)的帮助下开始使用tesseract ocr。在我的算法中,某张图片应该通过sharp进行大小调整和裁剪,并通过tesseract ocr识别剩余图片的内容。这必须在图片的两个独立部分发生两次,在图片的第一部分,它可以完美地识别字母,因此我不会发布这部分代码,它与第二部分完全相同,问题在于第二张图片。它应该读取图片中的这两个数字,它所做的只是读取除这些数字以外的所有内容 const config = { lang: "eng",

我最近在sharp(node.js图像编辑器)的帮助下开始使用tesseract ocr。在我的算法中,某张图片应该通过sharp进行大小调整和裁剪,并通过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集中在我感兴趣的图像部分。另外,因为我不太会裁剪,所以我读到,如果使用sharp对图像设置阈值,tesseract将更有效地读取图像,这是有意义的,因为它将图像像素转换为255或0

在涉及所有这些过滤器的情况下,调用最终图像tesseract读取以下内容:


正如我前面所说的,出于某种原因,在大多数图片中,它忽略了数字,只读取其他所有内容,在一些图片中它有效,在一些图片上它无效,没有一致性或模式,它无法识别任何图片。

尝试设置tessedit\u char\u白名单


我从未使用过psm 3。通常我试6-13次。
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();
})();