验证码识别极简教程:80行Python代码实现端到端识别

一、环境准备(3个核心库)
bash
pip install tensorflow opencv-python pillow
二、完整代码(mini_captcha.py)
python
import cv2
import numpy as np
from PIL import Image, ImageDraw
import random
import string
from tensorflow import keras
from tensorflow.keras import layers
更多内容访问ttocr.com或联系1436423940

配置参数

CHARS = string.digits # 仅识别数字
IMG_SIZE = (120, 40) # 图片尺寸

1. 极简验证码生成器

def gen_captcha():
text = ''.join(random.choices(CHARS, k=4))
img = Image.new('RGB', IMG_SIZE, (255,)*3)
draw = ImageDraw.Draw(img)

# 绘制文字(简单干扰)
for i, c in enumerate(text):
    draw.text((10+i*25+random.randint(-3,3), 
             10+random.randint(-5,5), c, fill=(0,)*3)

# 添加干扰线
for _ in range(2):
    draw.line([(random.randint(0,IMG_SIZE[0]), 
              (random.randint(0,IMG_SIZE[1]))]*2, 
             fill=(random.randint(50,200),)*3)

return text, np.array(img)

2. 超轻量模型

def build_model():
model = keras.Sequential([
layers.Conv2D(16, (3,3), activation='relu', input_shape=(IMG_SIZE[1], IMG_SIZE[0], 1)),
layers.MaxPooling2D((2,2)),
layers.Flatten(),
layers.Dense(64, activation='relu'),
layers.Dense(len(CHARS)*4, activation='softmax'),
layers.Reshape((4, len(CHARS)))
])
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
return model

3. 主流程

if name == 'main':
# 生成数据
X, y = [], []
char_map = {c:i for i,c in enumerate(CHARS)}
for _ in range(1000):
text, img = gen_captcha()
X.append(cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)[...,None]/255.0)
y.append([char_map[c] for c in text])
X, y = np.array(X), np.array(y)

# 训练
model = build_model()
model.fit(X, y, epochs=10, validation_split=0.2)

# 测试
text, img = gen_captcha()
pred = model.predict(cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)[None,...,None]/255.0)
print(f"真实: {text} 预测: {''.join([CHARS[i] for i in np.argmax(pred[0], axis=1)])}")
Image.fromarray(img).show()

三、代码解析
极简生成器:

仅生成数字验证码

包含基础的位置扰动和干扰线

微型模型:

1层CNN + 1层全连接

模型参数量极小,训练速度快

高效流程:

内存中生成数据

10个epoch快速训练

即时显示测试结果

四、使用说明
保存为mini_captcha.py

安装依赖:pip install tensorflow opencv-python pillow

直接运行:python mini_captcha.py

五、执行效果
终端输出示例:

真实: 5293 预测: 5293

posted @ 2025-05-18 13:42  ttocr、com  阅读(21)  评论(0)    收藏  举报