You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

化学结构式图像的预处理与Tesseract OCR识别优化求助

针对化学结构式图像的OCR预处理与优化方案

一、预处理优化步骤

化学结构式图像的核心干扰是结构式线条,且字符多为零散单/双字符,针对600x800像素的这类图像,可调整预处理流程:

  • 自适应阈值替代固定阈值:解决局部明暗不均问题,避免字符因亮度差异丢失
  • 针对性线条过滤:用形态学开运算清除结构式的细线条,保留字符轮廓
  • 字符轮廓增强:轻微膨胀字符,确保边缘清晰,同时避免过度膨胀导致字符粘连
  • 柔和噪声清除:用高斯模糊替代中值模糊,在清除背景噪声的同时不破坏字符细节

二、Tesseract配置调整

当前使用的--psm 10仅适配单字符识别,无法处理双字符(如"Na""CO"),需调整配置:

  • 混合单/双字符场景用--psm 6(默认文本块识别),让Tesseract自动识别连续字符
  • 添加字符白名单,限制识别范围减少错误:-c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789()
  • 切换至LSTM模式--oem 1,对印刷体字符的识别精度优于传统模式

三、修改后的代码实现

import cv2
import pytesseract
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)

# 1. 自适应阈值处理,适配局部明暗差异
inverted = cv2.bitwise_not(gray_img)
adaptive_thresh = cv2.adaptiveThreshold(inverted, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

# 2. 过滤结构式线条干扰
line_kernel = np.ones((1, 3), np.uint8)
filtered = cv2.morphologyEx(adaptive_thresh, cv2.MORPH_OPEN, line_kernel, iterations=1)

# 3. 膨胀增强字符轮廓
char_kernel = np.ones((2, 2), np.uint8)
dilated = cv2.dilate(filtered, char_kernel, iterations=1)

# 4. 高斯模糊清除噪声
blurred = cv2.GaussianBlur(dilated, (3, 3), 0)

# 优化后的Tesseract配置
custom_config = r'--oem 1 --psm 6 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789()'
print(pytesseract.image_to_string(blurred, lang='eng', config=custom_config))

cv2.imshow("Processed", blurred)
cv2.waitKey(0)
cv2.destroyAllWindows()

四、额外建议

若Tesseract仍达不到预期,可尝试:

  • 针对化学特殊字符(如下标、括号)训练Tesseract自定义字符集
  • 替换为EasyOCR,该库对印刷体字符的鲁棒性更强,无需复杂预处理即可输出较好结果

内容的提问来源于stack exchange,提问作者Armanium

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 12:04:57