Python中如何进行验证码识别求助?
目前需要识别一个 6 位数字+大写字母的验证码, 只有 CPU 环境, 请问大佬们有没有推荐好用的文章或者代码, 自备标记好的数据, 但是网上找的代码跑了一周了, 还是 0.6%左右晃悠。
Python中如何进行验证码识别求助?
8 回复
import pytesseract
from PIL import Image
import cv2
import numpy as np
def preprocess_image(image_path):
"""预处理图像:灰度化、二值化、去噪"""
# 读取图像
img = cv2.imread(image_path)
# 转为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理
_, thresh = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY_INV)
# 去噪(中值滤波)
denoised = cv2.medianBlur(thresh, 3)
return denoised
def recognize_captcha(image_path):
"""识别验证码主函数"""
# 预处理图像
processed_img = preprocess_image(image_path)
# 使用pytesseract识别
config = '--psm 8 --oem 3 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
text = pytesseract.image_to_string(processed_img, config=config)
return text.strip()
# 使用示例
if __name__ == "__main__":
result = recognize_captcha("captcha.png")
print(f"识别结果: {result}")
核心步骤:
- 图像预处理:灰度化、二值化、去噪是关键,能显著提升识别率
- OCR引擎:Tesseract是主流选择,通过
--psm和--oem参数调整识别模式 - 字符白名单:用
tessedit_char_whitelist限定字符集减少误识别
简单方案:
- 简单验证码用
pytesseract直接识别 - 复杂验证码需要CNN训练(用
tensorflow或pytorch)
一句话建议: 预处理做得好,识别没烦恼。
上图,没有通用的代码
楼主发几张验证码的图看看
难点在于图像处理,而不在于神经网络。
图像处理一般可用 opencv-python pillow。
已经对图片进行预处理, 干扰线只能去掉一部分, 不过应该不会有太大的干扰。
https://github.com/nickliqian/cnn_captcha
有问题可以提 issue
楼主也可以把样本发给我试试,正好周末比较空~

