如何提高tesseract.js的准确性?

时间:2019-12-01 13:51:09

标签: javascript node.js typescript ocr tesseract.js

我正在使用网站上的这段代码,但不够准确

 const worker1 = createWorker();
  const worker2 = createWorker();

  await worker1.load();
  await worker2.load();
  await worker1.loadLanguage("eng");
  await worker2.loadLanguage("eng");
  await worker1.initialize("eng");
  await worker2.initialize("eng");

  scheduler.addWorker(worker1);
  scheduler.addWorker(worker2);

  /** Add 10 recognition jobs */
  const {
    data: { text }
  } = await scheduler.addJob("recognize", image);

这是我要读取其文字的图像类型:

enter image description here

您似乎很简单容易,有时tesseract无法阅读它。 是否可以使用tesseract.js更好的替代方法或提高准确性?

1 个答案:

答案 0 :(得分:1)

使用Tesseract应用OCR时,对图像进行预处理很重要,这样,要检测的文本为黑色,背景为白色。为此,您可以应用一个简单的阈值来获取二进制图像。这是预处理后的图像:

enter image description here

Tesseract的结果

52024

我在Python OpenCV中实现了这种方法,但是您可以在Javascript中采用类似的策略!

import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

# Load image and Otsu's Threshold to get a binary image
image = cv2.imread('1.png', 0)
thresh = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

# Perform OCR
data = pytesseract.image_to_string(thresh, lang='eng', config='--psm 6')
print(data)

cv2.imshow('thresh', thresh)
cv2.waitKey()