我一直在做一个基于图表识别化学结构的项目。我计划使用Tesseract或其他一些Python的OCR库来完成这一任务。问题是,Tesseract几乎无法处理图表并提供准确的结果。
我已经尝试过通过OpenCV进行各种形式的预处理,包括阈值、模糊、内核等。然而,没有任何改进,Tesseract拾取1-2个字符,通常什么也不返回。
有没有人有什么建议,什么预处理执行的图像,将是大约600 x800,有一个或两个字符的大部分断点,看起来像附件提供?
Brandfolder(https://brandfolder.com/workbench/extract-text-from-image?hl=en_GB)这样的网站上的OCR阅读器似乎提供了令人满意的结果,所以我认为这是可以做到的。
我的参考代码:
import cv2
import matplotlib.pyplot as plt
import pytesseract
from PIL import Image
import numpy as np
img_path = "D:\\User\\Intel_AI2\\Project\\Data\\Test\\nahco3.png"
img_cv = cv2.imread(img_path)
gray_img = cv2.cvtColor(img_cv, cv2.COLOR_BGR2GRAY)
inverted = cv2.bitwise_not(gray_img)
thresh, img_threshed = cv2.threshold(inverted, 50, 255, cv2.THRESH_BINARY)
kernel1 = np.ones((2, 2), np.uint8)
kernelised1 = cv2.dilate(img_threshed, kernel1, iterations=1)
kernel2 = np.ones((1, 1), np.uint8)
kernelised2 = cv2.erode(kernelised1, kernel2, iterations=1)
morphed = cv2.morphologyEx(kernelised2, cv2.MORPH_CLOSE, kernel2)
blurred = cv2.medianBlur(morphed, 3)
print(pytesseract.image_to_string(blurred, lang='eng', config='--psm 10 --oem 3'))
cv2.imshow("Normal", blurred)
cv2.waitKey(0)
cv2.destroyAllWindows()
1条答案
按热度按时间xnifntxz1#
问题是,你的png没有背景,如果你可以使用ImageMagick,你可以做以下事情:
输出: