使用Python提取验证码图像文本遇问题,寻求技术建议
验证码OCR识别问题解决办法
第一张图是清晰的浅色背景深色文本("ALZ"),Tesseract默认配置就能正常识别;第二张是带蓝色干扰线的验证码("5X2W"),这类带干扰的图像需要先做预处理,才能让OCR工具提取到文本。
核心方案:图像预处理+OCR参数优化
通过预处理去除干扰、增强文本对比度,再针对性配置Tesseract的识别参数,具体代码实现如下:
from PIL import Image from pytesseract import pytesseract import cv2 import numpy as np path_to_tesseract = r'C:\Program Files\Tesseract-OCR\tesseract.exe' pytesseract.tesseract_cmd = path_to_tesseract # 替换为第二张验证码的本地路径 path_to_image = 'h5eJp.png' # 用OpenCV完成图像预处理 img = cv2.imread(path_to_image) # 转为灰度图,减少颜色干扰 gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 自适应二值化,精准分离文本与背景 binary_img = cv2.adaptiveThreshold( gray_img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2 ) # 形态学开运算,去除细干扰线 kernel = np.ones((1, 3), np.uint8) cleaned_img = cv2.morphologyEx(binary_img, cv2.MORPH_OPEN, kernel, iterations=1) # 转换为PIL格式供Tesseract识别 pil_img = Image.fromarray(cleaned_img) # 配置识别参数:指定单块文本+限定字符集 text = pytesseract.image_to_string( pil_img, config='--psm 8 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' ) print("识别结果:", text.strip())
关键参数说明
--psm 8:告诉Tesseract识别单个连续文本块,适配验证码的排版特点tessedit_char_whitelist:限定只识别大写字母和数字,过滤无关字符,提升识别准确率- 预处理环节:灰度化简化图像信息,自适应二值化应对不均匀背景,开运算去除细干扰线
内容的提问来源于stack exchange,提问作者murty
相关产品推荐
相关产品推荐

