Python-Pytesseract提取图片文本不准确问题求助
解决Pytesseract图片文本提取错误的优化方案
嘿,我注意到你在用Pytesseract提取图片文本时碰到了识别错误的问题,结合你给出的代码片段,我整理了几个实用的优化方向,帮你提升识别准确率:
一、强化图像预处理(OCR准确率的核心前提)
你的现有预处理步骤比较基础,OCR识别的准确率极大依赖输入图像的清晰度和对比度,建议补充以下操作:
- 降噪处理:针对图片中的噪点,用高斯模糊或中值滤波弱化干扰
# 高斯模糊(适合普遍噪点) img = cv2.GaussianBlur(img, (3, 3), 0) # 中值滤波(适合椒盐噪点) # img = cv2.medianBlur(img, 3) - 二值化处理:把灰度图转成黑白二值图,让文字和背景边界更清晰
# 自适应阈值(推荐,适配光照不均的图片) img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2) # 普通阈值(适合光照均匀的图片) # _, img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) - 调整膨胀腐蚀的核大小:你当前用的
(1,1)核几乎没有效果,可根据文字粗细调整为(2,2)或(3,3)kernel = np.ones((2, 2), np.uint8) img = cv2.dilate(img, kernel, iterations=1) img = cv2.erode(img, kernel, iterations=1)
二、优化Pytesseract识别配置
默认参数不一定适配你的场景,可针对性调整:
- 指定识别语言:如果是中文或其他非英文文本,必须添加语言参数
# 识别简体中文 text = pytesseract.image_to_string(img, lang='chi_sim') - 设置页面分割模式(PSM):根据图片文字布局选择合适模式,比如整块文本用
--psm 6,单行文字用--psm 7text = pytesseract.image_to_string(img, config='--psm 6') - 限定字符集:如果图片只有特定字符(比如数字、大写字母),可缩小识别范围减少错误
text = pytesseract.image_to_string(img, config='--psm 6 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
三、补全并优化你的完整函数
这里给你整理了一个更完善的版本,包含错误处理和全流程优化:
import cv2 import numpy as np import pytesseract from PIL import Image # Path of working folder on Disk src_path = "<dir path>" def get_string(img_path): # 读取图片并做异常判断 img = cv2.imread(img_path) if img is None: raise ValueError(f"无法读取目标图片:{img_path}") # 转换为灰度图 img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 预处理流程:降噪→二值化→膨胀腐蚀 img = cv2.GaussianBlur(img, (3, 3), 0) img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2) kernel = np.ones((2, 2), np.uint8) img = cv2.dilate(img, kernel, iterations=1) img = cv2.erode(img, kernel, iterations=1) # 提取文本并去除首尾空白 # 如需识别中文,添加lang='chi_sim'参数 text = pytesseract.image_to_string(img, config='--psm 6') return text.strip() # 测试调用示例 try: result = get_string(f"{src_path}/your_image.jpg") print("提取到的文本:") print(result) except Exception as e: print(f"执行出错:{e}")
内容的提问来源于stack exchange,提问作者Menaga
相关产品推荐
相关产品推荐

