opencv 化学结构式图像的预处理与OCR

li9yvcax  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(206)

我一直在做一个基于图表识别化学结构的项目。我计划使用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()
xnifntxz

xnifntxz1#

问题是,你的png没有背景,如果你可以使用ImageMagick,你可以做以下事情:

import subprocess
import pytesseract

# Image manipulation
mag_img = r'D:\Programme\ImageMagic\magick.exe'
con_bw = r"D:\Programme\ImageMagic\convert.exe" 

in_file = r'C2H4.png'
out_file = r'C2H4_bw.png'

# Play with black and white and size for better results
process = subprocess.run([con_bw, in_file, "-resize", "18%","-background", "white", "-alpha", "remove", "-alpha", "off", "-threshold","1%", out_file])

# Text ptocessing
pytesseract.pytesseract.tesseract_cmd=r'C:\Program Files\Tesseract-OCR\tesseract.exe'

# Configuration, use whitelist
options = r'--psm 6 --oem 3 tessedit_char_whitelist=HCIhci='

# OCR the input image using Tesseract
text_bw = pytesseract.image_to_string(out_file, config=options)
print(text_bw)

输出:

H H
\ /
C=C
/ \

H H

相关问题