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

使用pytesseract无法正确识别验证码,求有效解决方法

验证码识别优化方案

针对你遇到的Pytesseract识别验证码不准确的问题,以下是几种更有效的解决思路和实现代码:

一、优化图像预处理流程

你的验证码包含干扰线条,常规预处理无法有效突出字符特征,可改用OpenCV做针对性处理:

from PIL import Image
import cv2
import numpy as np
import pytesseract

image_path = "image.png"
# 用OpenCV读取灰度图
img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)

# 1. 自适应阈值处理(适配不均匀光照的验证码)
img = cv2.adaptiveThreshold(
    img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2
)

# 2. 形态学开运算去除干扰线条
kernel = np.ones((2, 2), np.uint8)
img = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel, iterations=1)

# 转换回PIL格式供Pytesseract使用
processed_img = Image.fromarray(img)

二、调整Pytesseract识别参数

限定字符集并优化识别模式,让引擎专注于验证码的字符类型:

# 仅识别数字和大小写字母(根据你的验证码字符范围调整)
custom_config = r'--psm 8 --oem 3 -c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
text = pytesseract.image_to_string(processed_img, config=custom_config)
print("识别结果:", text.strip())

三、使用专门的验证码识别库

方案1:ddddocr(轻量高效,针对普通验证码优化)

# 先安装库
pip install ddddocr
import ddddocr

ocr = ddddocr.DdddOcr()
with open("image.png", 'rb') as f:
    img_bytes = f.read()
result = ocr.classification(img_bytes)
print("识别结果:", result)

方案2:EasyOCR(对变形字符识别能力更强)

# 先安装库
pip install easyocr
import easyocr

# 初始化英文识别器
reader = easyocr.Reader(['en'])
# 识别并提取文本(detail=0只返回识别结果)
result = reader.readtext("image.png", detail=0)
print("识别结果:", ''.join(result))

四、自定义模型训练(针对特定格式验证码)

如果上述通用方案仍无法满足需求,可收集一批同类型验证码样本,标注后训练CNN模型。使用TensorFlow/PyTorch搭建简单的字符识别模型,针对你的验证码特征做定制化训练,能获得最高的识别准确率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:06:06