当前位置: 首页 > news >正文

用 TensorFlow 构建深度学习验证码识别系统

验证码识别一直是计算机视觉领域中的一个实际应用场景,它不仅需要图像处理的预处理能力,还需要深度学习模型对复杂字符进行准确的分类和预测。本文将基于 TensorFlow 来构建一个验证码识别系统,涵盖从数据生成、模型设计到训练与测试的全过程。

一、项目准备

在开始之前,请确保你已安装以下依赖:

pip install tensorflow pillow numpy captcha

TensorFlow:深度学习框架

Pillow:图像处理库

captcha:生成验证码数据

NumPy:数据处理

二、验证码数据集生成

为了训练模型,我们需要大量的验证码图片。这里使用 captcha 库来动态生成。

import numpy as np
from captcha.image import ImageCaptcha
import random
import string
from tensorflow.keras.utils import to_categorical

字符集:数字+字母

characters = string.digits + string.ascii_uppercase
captcha_length = 4 # 每个验证码长度
image_height, image_width = 60, 160

生成器

def generate_captcha_text():
return ''.join(random.choices(characters, k=captcha_length))

def generate_captcha_image():
captcha_text = generate_captcha_text()
image = ImageCaptcha(width=image_width, height=image_height)
captcha = image.generate_image(captcha_text)
return captcha, captcha_text

生成样例

img, txt = generate_captcha_image()
img.show()
print("验证码内容:", txt)

此代码能动态生成验证码并展示,同时打印其真实标签。

三、数据预处理

深度学习模型需要输入标准化的数据,因此要将图片转换为灰度矩阵,并将标签转为独热编码。

def preprocess_image(img):
img = img.convert('L') # 转灰度
img = img.resize((image_width, image_height))
img_array = np.array(img) / 255.0
return img_array.reshape(image_height, image_width, 1)

def encode_label(label):
# 独热编码
label_array = []
for char in label:
one_hot = to_categorical(characters.index(char), num_classes=len(characters))
label_array.append(one_hot)
return np.array(label_array).flatten()

构建批次数据

def generate_batch(batch_size=32):
while True:
X = np.zeros((batch_size, image_height, image_width, 1))
y = np.zeros((batch_size, captcha_length * len(characters)))
for i in range(batch_size):
img, txt = generate_captcha_image()
X[i] = preprocess_image(img)
y[i] = encode_label(txt)
yield X, y

这样我们就能批量生成训练数据。

四、模型设计

使用 卷积神经网络(CNN) 来提取验证码图像特征。

from tensorflow.keras import layers, models

def build_model():
model = models.Sequential()
model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(image_height, image_width, 1)))
model.add(layers.MaxPooling2D((2,2)))

model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.MaxPooling2D((2,2)))model.add(layers.Conv2D(128, (3,3), activation='relu'))
model.add(layers.Flatten())model.add(layers.Dense(1024, activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(captcha_length * len(characters), activation='softmax'))model.compile(optimizer='adam', loss='categorical_crossentropy',metrics=['accuracy'])
return model

model = build_model()
model.summary()

五、训练模型

利用我们定义的数据生成器,训练网络模型。

batch_size = 64
steps_per_epoch = 1000
epochs = 10

train_gen = generate_batch(batch_size)
val_gen = generate_batch(batch_size)

history = model.fit(
train_gen,
steps_per_epoch=steps_per_epoch,
epochs=epochs,
validation_data=val_gen,
validation_steps=100
)

训练过程中会输出准确率和损失曲线。

六、模型测试与预测

我们来测试模型能否正确识别新生成的验证码。
更多内容访问ttocr.com或联系1436423940
def decode_prediction(pred):
pred = pred.reshape(captcha_length, len(characters))
pred_text = ''.join([characters[np.argmax(vec)] for vec in pred])
return pred_text

测试

test_img, test_txt = generate_captcha_image()
X_test = np.expand_dims(preprocess_image(test_img), axis=0)
y_pred = model.predict(X_test)

print("真实:", test_txt)
print("预测:", decode_prediction(y_pred[0]))
test_img.show()

http://www.rkmt.cn/news/73710.html

相关文章:

  • 20251205 之所思 - 人生如梦
  • git洁癖:如果冲突采用远端
  • 快捷键
  • 日总结 36
  • 使用fail2ban屏蔽LINUX恶意暴力破解密码
  • 对接墨西哥股票市场 k线图表数据klinechart 数据源API
  • 10412_基于Springboot的员工绩效管理系统
  • NFL如何用统一数据平台提升比赛与体验
  • 每日反思(2025年12月5日)
  • 如何将 iPhone 或 iPad 备份移至外置硬盘
  • Linux指定端口连接Redis
  • Linux 分页显示
  • 春招准备之MyBatis框架篇 - 详解
  • Nacos 全方位学习笔记
  • Http 客户端 Feign 学习笔记
  • 实用指南:中国机器人产业:迅猛崛起与未来征程
  • 黑马C++ 通讯录管理系统
  • 高级语言程序设计课程第八次个人作业
  • 详细介绍:GraphQL:让前端自己决定要什么数据
  • 2025年下半年上海ISO三体系认证机构全方位评测与选择指南
  • 2025.12.5
  • 2025年12月留学生求职陪跑服务推荐榜:哪家更贴合专业背景定制
  • 2025留学生求职机构哪家强?5万offer全周期不限次服务+在职导师
  • 拒绝“中间商赚差价”!2025南京静音舱源头工厂综合实力排名发布:声博士Soundbox断层领先
  • 2025.12.5——2蓝
  • 12月5日总结 - 作业----
  • Markdown 使用教程
  • 2025年行业内排行前列的清障车源头厂家推荐排行榜单,黄牌清障车/前四后八平板拖车/8吨清障车/重载清障车/二手拖车清障车企业口碑推荐
  • 参与GenAI黑客马拉松六个月的实战心得
  • MySQL性能优化