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

news/2025/12/5 23:33:50/文章来源:https://www.cnblogs.com/ocr12/p/19313952

验证码识别一直是计算机视觉领域中的一个实际应用场景,它不仅需要图像处理的预处理能力,还需要深度学习模型对复杂字符进行准确的分类和预测。本文将基于 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.mzph.cn/news/989306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20251205 之所思 - 人生如梦

20251205 之所思做的好的地方:1) 培养新人培养的很好,将接班人推到前台,给他提供锻炼的机会,同时在他困难的时候支持他。==>给他人机会,成就他人,自己也会有成就感,继续保持。2)对员工的安排很合适,识别到…

12.5每日总结

今天的主要课程有人机交互和机器学习,同时也是人机交互技术的最后一节课,完美结课,希望成绩理想,机器学习的实验做完近一半了,有新布置了一个要求特别高的期末报告,加油

永久关闭Windows自动更新

永久关闭Windows自动更新 分为三步,具体如下: 1. 组策略禁用 Windows 更新 Win键+R,输入 gpedit.msc,启动组策略编辑器。 左侧选择 [本地计算机配置] -> [管理模板] -> [Windows 组件] -> [Windows 更新]…

git洁癖:如果冲突采用远端

git洁癖:如果冲突采用远端 假设将main分支合并到当前分支,如冲突采用mian git rebase -s recursive -X theirs main

大道至简,仅需三行代码训练YOLOv11

大道至简,仅需三行代码训练YOLOv11 克隆项目 git clone https://github.com/li-yibing/yolov11.安装依赖 pip install -r requirements.txt推理图像 python predict.py推理结果:

快捷键

IDEACommand + Option + M 自动将选中部分抽取为方法

球星 C 罗投资 AI 初创 Perplexity;微软开源 VibeVoice-Realtime,低延迟流式输出丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的技术」、「有亮点的产品」、「有思考的文章」、「有态…

网络学习细节学习

今天看了youtube的一些网络相关的视频,了解了以西的一些内容及其细节: 1,静态路由问题 在静态路由中我们需要配置下一跳或者出接口,同时配置下一跳和出接口可以减少一次设备查询工作。在只有配置下一跳的时候,先进…

12月5日日记

1.今天上形势与政策 2.明天放假 3.Cookie 的生效路径、过期时间如何设置?哪些情况会导致 Cookie 丢失?

Windows PyTorch安装

GPU 驱动 先确保安装了硬件驱动 https://developer.nvidia.com/cuda/wsl https://www.nvidia.com/en-us/drivers/ 现在 WSL 的驱动 包含在 Windows 驱动中,都是同一驱动。CUDA Toolkit 查看自己的GPU信息 nvidia-smi这…

日总结 36

要让网页视觉效果更出色,核心是搭建清晰视觉层次(通过字号、字重、颜色区分内容优先级,遵循 8px 网格原则合理留白),统一设计规范(收敛色彩体系至 1-2 种主色 + 3-4 种辅助色 + 5 种内中性色,全站字体不超过 2 …

faster r cnn 用到所有技术和流程

按时间顺序拆成 4 大段、12 个小步,并指出每一步用到的关键模块 / 公式 / 损失。输入与数据准备① 图像预处理Resize + Pad 到固定短边 600 px(可配置)减 ImageNet 均值/方差水平翻转、随机裁剪做数据增强标注:每张…

FEM/BDC Test Platform for BMW Key Programmer – Test F20 F30 F35 X5 X6 I3 Without Gearbox Plug

Diagnosing BMW FEM/BDC Issues: The Essential Test Platform You Need Has your BMW suddenly lost key functionality, or are you struggling to program new keys? If your vehicle is a F20, F30, F35, X5, X6,…

上海助听器验配哪家好?2025 年12月权威机构推荐报告:从资质核验到场景适配的全维度选择策略

上海助听器验配哪家好?2025 年12月权威机构推荐报告:从资质核验到场景适配的全维度选择策略一、上海听力健康现状:选对验配中心,比买贵设备更重要 上海市老龄工作委员会 2024 年发布的《上海老年听力健康白皮书》显…

使用fail2ban屏蔽LINUX恶意暴力破解密码

通过lastb命令发现恶意暴力破解密码的还是挺多的~~ 忍很久了,今天就用fail2ban封杀之~~ 用的lnmp,cd /lnmp X/tools/目录下已准备好了fail2ban安装包,不用yum了,是不是很方便~~ 直接运行 ./fail2ban.sh安装~~ 编辑…

对接墨西哥股票市场 k线图表数据klinechart 数据源API

收到,这里是为您准备的 StockTV 墨西哥股票数据 (Mexico Stock Market) 对接指南。根据您的指定,确认墨西哥市场的配置参数为 countryId=7。StockTV API 对接文档:墨西哥股票市场 (Mexico) 1. 基础参数配置接口域名…

代码随想录Day28_贪心2

代码随想录Day28_贪心2买卖股票的最佳时机 问题理解 整数数组的下标表示股票某天的价格,需要返回最大利润。题目多少有点离谱了,在同一天多次买卖该股票,但是特定日期的价格是确定的。 class Solution { public:int…

10412_基于Springboot的员工绩效管理系统

1、项目包含 项目源码、项目文档、数据库脚本、软件工具等资料; 带你从零开始部署运行本套系统。 2、项目介绍 本系统为月度员工绩效考核管理系统,是专为企业开发的对员工考核的协助软件。可以帮助企业对于员工的绩效…

MAF快速入门(1)化繁为简的Agent创建范式

MAF快速入门(1)化繁为简的Agent创建范式合集 - Agent Orchestration(13)1.MAF快速入门(5)开发自定义Executor12-052.MAF快速入门(4)多Agent工作流编排12-023.MAF快速入门(3)聊天记录持久化到数据库11-284.MAF快…

ssh连接错误:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! - Hello

ssh连接错误:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 报错内容 C:\Users\wangjunli>ssh wangjunli@192.168.1.18 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE …