低质量图片使用Pytesseract提取文本结果不符的技术求助
解决Pytesseract提取低质量图片文本的问题
低质量图片直接用Pytesseract识别容易出现误差,核心问题是缺少必要的图像预处理步骤,以及没有针对场景配置Tesseract参数。以下是优化方案:
关键优化步骤
- 灰度化:去除色彩干扰,简化图像数据
- 自适应二值化:针对光照不均的低质量图,自动调整阈值生成黑白对比图,突出文本
- 降噪处理:消除图片中的细碎噪点,让文本边缘更清晰
- 针对性配置Tesseract:限制识别字符范围、指定页面分割模式,减少识别偏差
优化后的代码
import cv2 import pytesseract # 配置Tesseract路径 pytesseract.pytesseract.tesseract_cmd = "C:\\Program Files\\Tesseract-OCR\\tesseract.exe" # 直接使用已裁剪的img_crop,避免二次保存损失质量 img = img_crop # 1. 转为灰度图 gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 2. 自适应二值化,生成黑白对比图 binary_img = cv2.adaptiveThreshold( gray_img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2 ) # 3. 形态学降噪,去除小噪点 kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 2)) cleaned_img = cv2.morphologyEx(binary_img, cv2.MORPH_OPEN, kernel, iterations=1) # 4. 增强对比度(可选,根据图片实际情况调整) clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8)) enhanced_img = clahe.apply(cleaned_img) # 配置Tesseract参数:指定引擎模式、单文本行分割、仅识别大写字母 custom_config = r'--oem 3 --psm 7 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ' text = pytesseract.image_to_string(enhanced_img, config=custom_config) print("识别结果:", text.strip())
参数说明
--oem 3:使用Tesseract默认的OCR引擎组合--psm 7:假设输入是单一行文本,适配这类验证码式的图片场景tessedit_char_whitelist:限定仅识别大写字母,排除其他字符干扰
内容的提问来源于stack exchange,提问作者NAM VƯƠNG
相关产品推荐
相关产品推荐

