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

如何提升PyTesseract OCR在噪声图像中的识别准确率?

提升噪声图像下OCR识别准确率的优化方案

问题背景

自研OCR在正常图像上识别表现良好,但处理带有斑点噪声的文本图像时,识别准确率仅约60%。现有去噪函数虽能去除大量噪声,但会弱化文本特征,调整对比度、锐度和阈值后仍无明显改善。

噪声图像特征:文本为黑色,背景分布大量白色、灰色斑点噪声,文本边缘被噪点干扰。

现有去噪代码:

import cv2
import pytesseract
import numpy as np

def noise_remove(image):
    kernel = np.ones((1,1), np.uint8)
    image = cv2.dilate(image, kernel, iterations=1)
    kernel = np.ones((1,1), np.uint8)
    image = cv2.erode(image, kernel, iterations=1)
    image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)
    image = cv2.medianBlur(image, 3)
    return image

img = cv2.imread('2.jpg')
img  = cv2.resize(img, None, fx = 0.8, fy = 0.8)
blurImg = noise_remove(img)
hImg, wImg, _ = img.shape
text = pytesseract.image_to_string(blurImg)
print(text)
cv2.waitKey(0)

当前识别结果(中文翻译):

Little: 害怕 它 吃 看起来 现在。 我 们 女士 女孩 她们 好 我 做。 这 几乎不
表亲 时间 总是。 在 短 村庄 正 提升 我们 射击 回复。 她 那个 ~
讨人喜欢 的 偏爱 居住 旅行 印象 酒吧 罗。 他 的 六个 是
请求 工具 接受 贪得无厌 的 她。 虽然 作为 或 在 她自己 章节
进入 携带 没有 卖 旧 十个 是 退出 失去 交易 他 的 发送。 你 正确 如何 性别
几个 远 遥远 相信 旅行 派对。 我们 害羞 询问 不文明 附加 如果
携带 到 A

优化方案

1. 改进去噪逻辑,平衡去噪与文本保留

现有去噪流程中,1x1核的膨胀、腐蚀操作无实际效果,闭运算+中值滤波的组合过度模糊文本。调整为以下针对性步骤:

  • 先转灰度图,减少颜色干扰
  • 用自适应阈值处理,精准保留文本边缘
  • 用3x3核做闭运算,填充文本空隙并去除背景噪点
  • 最后用双边滤波,在去噪的同时保留文本细节

2. 优化后的代码

import cv2
import pytesseract
import numpy as np

def noise_remove(image):
    # 转为灰度图
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # 自适应阈值处理,强化文本与背景区分
    thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
                                   cv2.THRESH_BINARY_INV, 11, 2)
    # 闭运算填充文本空隙,去除背景噪点
    kernel = np.ones((3,3), np.uint8)
    closing = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel, iterations=1)
    # 双边滤波,保留文本边缘的同时去噪
    denoised = cv2.bilateralFilter(closing, 9, 75, 75)
    # 反转回黑字白底,适配Tesseract识别习惯
    result = cv2.bitwise_not(denoised)
    return result

img = cv2.imread('2.jpg')
# 优先放大图像提升文本像素密度,而非缩小
# img = cv2.resize(img, None, fx=1.5, fy=1.5)
blurImg = noise_remove(img)
# 添加Tesseract配置,指定文本类型提升识别精度
text = pytesseract.image_to_string(blurImg, lang='eng', config='--psm 6')
print(text)
cv2.imshow('Denoised Image', blurImg)
cv2.waitKey(0)
cv2.destroyAllWindows()

3. 额外优化建议

  • 使用--psm 6配置参数,告诉Tesseract假设图像为单一均匀文本块
  • 若噪点仍严重,可尝试cv2.fastNlMeansDenoisingColored做彩色图像去噪
  • 避免缩小图像,优先放大来提升文本像素的辨识度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:15:42