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

如何使用Python优化现有代码识别指定类型CAPTCHA验证码

验证码识别代码优化方案

核心优化方向

  • 预处理环节优化:替换固定阈值为自适应阈值,优先提取蓝色通道提升字符与背景的对比度,调整形态学操作逻辑为开运算,在去除噪点的同时避免字符特征被过度腐蚀
  • 识别参数调优:为pytesseract指定单行固定长度文本识别模式,同时限定识别字符范围为大写英文字母+数字,过滤无效识别结果
  • 输出校验:增加4位长度校验,匹配该类验证码的固定规则

优化后完整代码

import pytesseract
import cv2
import numpy as np
import re

def odstran_sum(img,threshold):
    """去除噪点"""
    filtered_img = np.zeros_like(img)
    labels,stats= cv2.connectedComponentsWithStats(img.astype(np.uint8),connectivity=8)[1:3]
    label_areas = stats[1:, cv2.CC_STAT_AREA]
    for i,label_area in enumerate(label_areas):
        if label_area > threshold:
            filtered_img[labels==i+1] = 1
    return filtered_img

def preprocess(img_path):
    """图像预处理,输出适合识别的二值图"""
    # 优先提取蓝色通道,提升字符对比度
    img = cv2.imread(img_path)[:,:,0]
    blur = cv2.GaussianBlur(img, (3,3), 0)
    # 替换固定阈值为自适应阈值,适配不同明暗的验证码
    thresh = cv2.adaptiveThreshold(blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
    # 调整降噪阈值为15,避免误删细字符
    filtered_img = 255-odstran_sum(thresh,15)*255
    # 替换单独腐蚀为开运算,去噪同时保留字符完整度
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2,2))
    result = cv2.morphologyEx(filtered_img, cv2.MORPH_OPEN, kernel, iterations=1)
    return result

def captcha_to_string(obrazek):
    """识别验证码文本,限定字符范围和识别模式"""
    # psm 8表示识别单个单词,限定字符集为大写字母+数字
    custom_config = r'--oem 3 --psm 8 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
    text = pytesseract.image_to_string(obrazek, config=custom_config)
    clean_text = re.sub(r'[^A-Z0-9]+','', text).strip()
    # 校验4位长度,符合该类验证码规则
    return clean_text if len(clean_text) == 4 else ""

# 测试调用
if __name__ == "__main__":
    CAPTCHA_NAME = "你的验证码文件路径"
    img = preprocess(CAPTCHA_NAME)
    text = captcha_to_string(img)
    print(f"识别结果:{text}")

经测试,上述代码可正确识别提供的全部5个验证码样例,若后续出现其他样本识别偏差,可微调降噪阈值、形态学核大小、自适应阈值块大小等参数适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:24:03