验证码识别终极极简版: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
浙公网安备 33010602011771号