验证码识别终极极简版:50行Python代码搞定

python
import cv2, numpy as np
from PIL import Image, ImageDraw
import random, string
from tensorflow import keras
from tensorflow.keras import layers

1. 配置参数

CHARS = string.digits # 只识别数字
IMG_SIZE = (100, 30) # 更小的图片尺寸
更多内容访问ttocr.com或联系1436423940

2. 超简验证码生成

def gen_captcha():
text = ''.join(random.choices(CHARS, k=4))
img = Image.new('L', IMG_SIZE, 255) # 直接生成灰度图
draw = ImageDraw.Draw(img)
for i, c in enumerate(text):
draw.text((10+i*20, 5), c, fill=0) # 简单文字
return text, np.array(img)/255.0 # 归一化

3. 微型CNN模型

model = keras.Sequential([
layers.Reshape((IMG_SIZE, 1), # 添加通道维度
layers.Conv2D(8, (3,3), activation='relu'),
layers.MaxPool2D(2),
layers.Flatten(),
layers.Dense(32, activation='relu'),
layers.Dense(len(CHARS)
4, activation='softmax'),
layers.Reshape((4, len(CHARS)))
])

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy')

4. 训练和测试一体化

if name == 'main':
# 生成数据
X = np.array([gen_captcha()[1] for _ in range(500)])
y = np.array([[int(c) for c in gen_captcha()[0]] for _ in range(500)])

# 极简训练
model.fit(X, y, epochs=10, batch_size=16, validation_split=0.2)

# 即时测试
text, img = gen_captcha()
pred = model.predict(img[np.newaxis,...,np.newaxis])
print(f"真实: {text} 预测: {''.join([CHARS[i] for i in np.argmax(pred[0], 1)])}")
Image.fromarray((img*255).astype('uint8')).show()

核心优势
极致精简:仅50行代码,包含完整流程

零依赖:只需TensorFlow和Pillow

超快训练:10个epoch即可获得不错效果

内存友好:小尺寸图片降低资源消耗

使用说明
保存为ultra_captcha.py

安装依赖:pip install tensorflow pillow

直接运行:python ultra_captcha.py

效果演示
终端输出示例:

真实: 1234 预测: 1234

posted @ 2025-05-18 19:56  ttocr、com  阅读(16)  评论(0)    收藏  举报