验证码识别rnn训练模型代码

pytorch验证码识别crnn+ctcloss+beam_search_decoder从0到1(附避坑要点!) 阅读详情

机器性能太弱,不能设置太多参数,梯度下降难

在这里插入图片描述

import numpy as np
import  random
from PIL import Image
import matplotlib.pyplot as plt
import tensorflow as tf
def code_cnn(x,y):
    #conv->relu->max_pool->conv->relu->max_pool->dropout
    # ->conv->relu->max_pool->full_connection->softmax
    with tf.variable_scope('net'):
        x_shape=x.get_shape()
        in_channels=x_shape[3]
        # print(in_channels)
        y_shape=y.get_shape()
        with tf.variable_scope('conv1',initializer=tf.random_normal_initializer(0,0.1),dtype=tf.float32):
            kernel_size_1=1
            w=tf.get_variable('w',shape=[3,3,in_channels,kernel_size_1])
            b=tf.get_variable('b',shape=[kernel_size_1])
            net=tf.nn.conv2d(x,w,strides=[1,1,1,1],padding='SAME')
            net=tf.nn.bias_add(net,b)
        with tf.variable_scope('relu1'):
            net=tf.nn.relu6(net)
        with tf.variable_scope('max_pool1'):
            tf.nn.max_pool(net,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')
        with tf.variable_scope('conv2'):
            kernel_size_2 = 1
            w = tf.get_variable('w', shape=[3, 3, kernel_size_1, kernel_size_2])
            b = tf.get_variable('b', shape=[kernel_size_2])
            net = tf.nn.conv2d(net, w, strides=[1, 1, 1, 1], padding='SAME')
            net = tf.nn.bias_add(net, b)
        with tf.variable_scope('relu2'):
            net = tf.nn.relu6(net)
        with tf.variable_scope('max_pool2'):
            tf.nn.max_pool(net, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
        with tf.variable_scope('dropout1'):
            tf.nn.dropout(net,keep_prob=0.75)
        with tf.variable_scope('conv3'):
            kernel_size_3 = 64
            w = tf.get_variable('w', shape=[11, 11, kernel_size_2, kernel_size_3])
            b = tf.get_variable('b', shape=[kernel_size_3])
            net = tf.nn.conv2d(net, w, strides=[1, 2, 2, 1], padding='SAME')
            net = tf.nn.bias_add(net, b)
        with tf.variable_scope('relu3'):
            net = tf.nn.relu6(net)
        with tf.variable_scope('max_pool3'):
            tf.nn.max_pool(net, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
        with tf.variable_scope('fc1'):
            unit_number_1=124
            net_shape=net.get_shape()
            net_sample_feature_number=net_shape[1]*net_shape[2]*net_shape[3]
            net=tf.reshape(net,shape=[-1,net_sample_feature_number])#-1 所有元素按照每行net_sample_feature_number列组合,即成一行
            w=tf.get_variable('w',shape=[net_sample_feature_number,unit_number_1])
            b=tf.get_variable('b',shape=[unit_number_1])
            net=tf.add(tf.matmul(net,w),b)
        with tf.variable_scope('softmax'):
            unit_number_3= 4
            w = tf.get_variable('w', shape=[unit_number_1,unit_number_3])
            b = tf.get_variable('b', shape=[unit_number_3])
            net = tf.add(tf.matmul(net, w), b)
            act=tf.nn.softmax(net)
    return act
def random_next_batch(batch_size=1,code_size=4):#太多oom
    batch_x=[]
    batch_y=[]
    for i in range(batch_size):
        text,image=generate_code_image(code_size)
        code_number=[]
        for ch in text:
            code_number.append(code_char_2number_dict[ch])
        batch_x.append(image)
        batch_y.append(code_number)
    return np.array(batch_x),np.array(batch_y)
from captcha.image import ImageCaptcha

code_char_set = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
        'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
        'w', 'x', 'y', 'z',
        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
        'W', 'X', 'Y', 'Z']


def random_code_text(code_size):
    code_text=[]
    for i in range(code_size):
        c=random.choice(code_char_set)
        code_text.append(c)
    return code_text
code_char_2number_dict=dict(zip(code_char_set,range(len(code_char_set))))
code_number_2_char_dict=dict(zip(range(len(code_char_set)),code_char_set))
# print(code_number_2_char_dict)
def generate_code_image(code_size):
    image=ImageCaptcha()
    code_text=random_code_text(code_size)
    code_text=''.join(code_text)
    captcha=image.generate(code_text)
    # image.write(code_text,'captcha/'+code_text+'.jpg')
    # print(captcha)
    code_image=Image.open(captcha)
    code_image=np.array(code_image)
    return code_text,code_image
def train_code_cnn(mode_path):
    in_image_height=60
    in_image_weight=160
    code_size=4
    x=tf.placeholder(tf.float32,shape=[None,in_image_height,in_image_weight,1],name='x')
    y=tf.placeholder(tf.float32,shape=[None,code_size],name='y')
    network=code_cnn(x,y)
    cost=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=network,labels=y))
    # cost=tf.reduce_mean(tf.reduce_sum(tf.cast(tf.not_equal(y,network),tf.float32),axis=1))#不支持
    # cost=tf.reduce_mean(tf.reduce_sum(tf.square(y-network),axis=1))
    train=tf.train.AdamOptimizer(learning_rate=0.01).minimize(cost)
    accuracy=tf.reduce_mean(
        tf.cast(tf.equal(tf.reduce_sum(tf.cast(tf.equal(y,network),tf.int32),axis=1),4),tf.float32))#4个字母都正确
    saver=tf.train.Saver()
    with tf.Session(config=tf.ConfigProto(device_count={'cpu':0})) as sess:
        sess.run(tf.global_variables_initializer())
        step=0
        while True:
            batch_x,batch_y=random_next_batch(batch_size=64,code_size=code_size)
            batch_x=tf.image.rgb_to_grayscale(batch_x)
            batch_x=tf.image.resize_images(batch_x,size=(in_image_height,in_image_weight)
                                           ,method=tf.image.ResizeMethod.NEAREST_NEIGHBOR)
            _,cost_,accuracy_=sess.run([train,cost    ],feed_dict={x:batch_x.eval(),y:batch_y} )
            print('step:{},cost:{},accuracy:{}'.format(step,cost_,accuracy_))
            if step % 10 == 0:
                test_batch_x, test_batch_y = random_next_batch(64, code_size=4)
                test_batch_x = tf.image.rgb_to_grayscale(test_batch_x)
                test_batch_x = tf.image.resize_images(test_batch_x, size=(in_image_height, in_image_weight)
                                                 , method=tf.image.ResizeMethod.NEAREST_NEIGHBOR)
                acc = sess.run(accuracy, feed_dict={x: test_batch_x.eval(), y: test_batch_y})
                print('测试集准确率:{}'.format(acc))
                if acc>0.7 and accuracy_>0.7:
                    saver.save(sess,mode_path,global_step=step)
                    break
            step+=1

    pass
if __name__ == '__main__':
    # batch_x,batch_y=random_next_batch(10,4)
    # print(np.array(batch_x).shape)
    # print(batch_y)
    # # text,image=generate_code_image(4)
    # text='aaaa'
    # image=batch_x[0]
    # for ch in text:
    #     print(ch)
    # ax=plt.figure()
    # print(code_char_2number_dict['Z'])
    # ax.text(0.1,0.9,text,ha='center',va='center')
    # plt.imshow(image)
    # plt.show()
    train_code_cnn('./savepath/capcha.model')
黑科技教你一招如何解除 生活中烦人的验证码问题 captcha captcha 是用 python 写的生成验证码的库,它支持图片验证码和语音验证码,我们使用的是它生成图片验证码的功能。 首先我们设置我们的验证码格式为数字加大写字母,生成一串验证码试试看: 数据生成器 训练模型的时候,我们可以选择两种方式来生成我们的训练数据,一种是一次性生成几万张图,然后开始训练,一种是定义一个数据生成器,然后利用 fit_generator 函数来训练。 第一种方式的好处是训练的时候显卡利用率高,如果你需要经常调参,可以一次生成,多次使用;第二种方式的好 阅读详情

相关推荐

从零开始搭建深度学习验证码识别模型

文章目录从零开始搭建深度学习验证码识别模型CNN模型与图像识别验证码数据集介绍生成数据集生成EasyCaptcha生成Kcaptcha搭建模型EasyNet模型KCapNet模型模型训练与参数选择优化方法与超参数数据集划分模型分析EasyNet算力计算KCap算力计算EasyNetKCapNet 从零开始搭建深度学习验证码识别模型 CNN模型与图像识别 CNN模型是图像问题的基本深度学习算法,使用...

Frank's 优快云 Blog 2613

自然语言处理实战 深度学习之LSTM情感分析

课程目标 学习完本门课程,您将对自然语言处理技术有更深入的了解, 掌握基于深度学习情感分析方法;课程基于PyTorch主流框架实现,其中涉及深度学习主流框架LSTM模型以及自然语言处理的词向量;彻底掌握中文情感分析。 适用人群 想要从事NLP的在校学生、NLP研发工程师 自然语言处理从业者、深度学习爱好者 课程简介 NLP领域的热门应用,常用在舆情分析,文章分类,智能客服,情感分析等多个场景。情感分析作为自然语言处理的基础技术之一,常被用于电商评论、舆情监控、微博评论情感分析、话题监督等领域,因此深入掌握情感分析技术,是作为自然语言处理从业者必备技能,本课程以案例驱动出发,结合多个项目实战案例,覆盖多种算法,如RNN,LSTM等 课程要求: (1)开发环境:python版本:Python3.7; torch 版本:1.3.0+; torchtext版本:0.3.0+ (2)开发工具:Pycharm; (3)学员基础:需要一定的Python基础,及深度学习基础; (4)学员收货:掌握深度学习情感分类关键技术; (5)学员资料:内含完整程序源码和数据集; (6)课程亮点:专题技术,完整案例,全程实战操作,徒手撸代码。 案例5-情感分析功能点

TensorFlow 和 CNN+RNN 模型的验证码识别系统实现

在本文中,我们将介绍如何使用 TensorFlow 框架,结合 卷积神经网络(CNN) 和 递归神经网络(RNN) 模型构建一个验证码识别系统。通过深度学习,尤其是 CNN 和 RNN 的结合,可以实现对验证码图像的高效识别。为了识别验证码中的字符,我们将构建一个结合了 卷积神经网络(CNN) 和 递归神经网络(RNN) 的模型。验证码图像是由多个字符构成的,因此,我们需要将图像转化为适合神经网络处理的格式。LSTM层:将卷积层提取的特征输入到递归神经网络中,学习字符序列的时间依赖性。

asfdsgdf的博客 1030

lecture7-序列模型及递归神经网络RNN

Hinton 第七课 。这里先说下RNN有recurrent neural network 和 recursive neural network两种,是不一样的,前者指的是一种人工神经网络,后者指的是一种深度神经网络这里指的是前者,这部分翻译的不好,因为之前没怎么接触过RNN,不过就当理解意境吧,所以附上所有的ppt,看得懂的就看PPt,下面的是附带说明,有些语句没有那么通顺,所以就当意境...

weixin_33697898的博客 900

深度学习利用RCNN识别不定长计算题验证码(pytorch版,LSTM + CTCLoss)

这里继上篇利用迁移学习resnet训练计算题后,对于如果有多位或者不定长位数的验证码问题难以解决了,所以采用RNN解决不定长序列的计算题验证码问题,这种解决方式同样适用于不定长4,6位验证码,接下来看详细步骤 准备数据集,我的数据集是这样的,数据集总数有将近上万张多张大概有三四张类型,所有的特征是[“零”, “一”, “二”, “三”, “四”, “五”, “六”, “七”, “八”, “九”, “加”, “减”, “乘”, “除”, “等”, “于”, “?”, “以”],我这里还没有两位数及以上的计算题

码王吴彦祖的博客 3249

深度学习100例-循环神经网络(RNN)实现股票预测 | 第9天

文章目录一、前言二、RNN是什么三、准备工作1.设置GPU2.加载数据四、数据预处理1.归一化2.设置测试集训练集五、构建模型六、激活模型七、训练模型八、结果可视化1.绘制loss图2.预测3.评估 一、前言 今天是第9天,我们将开始RNN系列,完成股票开盘价格的预测,最后的R2可达到0.72,CNN系列后续我也会穿插更新 我的环境: 语言环境:Python3.6.5 编译器:jupyter notebook 深度学习环境:TensorFlow2.4.1 往期精彩内容: 深度学习100例-卷积神经网络

“365天深度学习训练营”报名进行中~ 2万+

RNN入门(二)识别验证码

介绍   作为RNN的第二个demo,笔者将会介绍RNN模型在识别验证码方面的应用。   我们的验证码及样本数据集来自于博客: CNN大战验证码,在这篇博客中,我们已经准备好了所需的样本数据集,不需要在辛辛苦苦地再弄一遍,直接调用data.csv就可以进行建模了。 RNN模型   用TensorFlow搭建简单RNN模型,因为是多分类问题,所以在最后的输出部分再加一softmax层,损失函数采用对...

山阴少年 2255

Docker部署Nextcloud私有云:MariaDB、OnlyOffice与HTTPS全栈实践

Nextcloud作为主流开源私有云平台,其稳定部署依赖Docker容器化、MariaDB数据库优化、OnlyOffice在线协作集成及HTTPS安全加固四大核心技术。理解Docker Compose服务健康检查机制与依赖等待原理,可避免因启动时序导致的500/404错误;掌握MariaDB字符集配置与InnoDB参数调优,是保障Nextcloud全文搜索与大文件上传可靠性的底层基础;而OnlyOffice的JWT兼容性控制与Nginx路径重写规则,则直接决定文档协同功能是否可用。在家庭NAS、边缘服务器或

weixin_30328063的博客 512

简单的验证码识别(一)---------------------(python + tensorflow + Rnn)(环境搭建)

环境搭建: win10+python3.6 +tensorflow(1.13.1) 一、python3.6安装 Python官网下载自己电脑和系统对应的Python安装包 网址:https://www.python.org/downloads/release/python-363/ 一直往下拉到Files,这里我下载的是Windows x86-64 exe...

weixin_39121325的博客 942

揭秘无人机前沿领域的科技新突破

本文旨在系统性地介绍无人机技术在前沿领域的最新突破,涵盖从基础理论到实际应用的各个方面。我们将重点关注那些正在改变无人机行业面貌的关键技术创新,并分析它们对未来发展的影响。文章首先介绍无人机技术的基础概念和背景,然后深入探讨六个关键领域的技术突破,接着分析实际应用案例,最后展望未来发展趋势。自主导航系统(SLAM):同时定位与地图构建技术,使无人机能在未知环境中自主导航计算机视觉(CV):使无人机能够"看"和理解周围环境的技术5G通信:第五代移动通信技术,提供高速、低延迟的数据传输能源管理。

AI天才研究院 1489

【产品经理修炼之道】- 优惠券系统从入门到精通(一)

为了满足企业的优惠券业务,优惠券系统一般需要包含哪些功能?这篇文章里,作者从架构、功能等维度做了拆解,一起来看看吧。此部分主要讲解为满足公司优惠券业务,需要优惠券系统必须包含哪些功能,即优惠券架构图。

xiaoli8748的专栏 1808

简单的 OCR 识别验证码 Demo | Keras 实现

How to implement an OCR model using CNNs, RNNs, and CTC loss. This example demonstrates a simple OCR model built with the Functional API. Apart from combining CNN and RNN, it also illustrates how you can instantiate a new layer and use it as an “Endpoint l

XianxinMao的博客 2978

突破限制:巧用Azure OpenAI,畅玩Gemini模型

通过 Azure OpenAI 服务这一巧妙的途径,间接调用 Gemini 模型,打破网络限制的壁垒。本文将详细介绍这一方法,无论你是人工智能领域的新手,还是经验丰富的开发者,都能从中获取实用的技巧,轻松开启 Gemini 模型的探索之旅

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 180

基于深度学习的验证码识别系统设计与实现

传统的验证码通常包括数字、字母或者图像,而且随着人工智能技术的发展,验证码的设计也变得越来越复杂。在这样的背景下,基于深度学习的验证码识别系统成为了一种有效的解决方案。首先,我们需要构建一个包含不同类型验证码的数据集,并对数据进行预处理,以便于神经网络的训练。首先,我们需要准备一个包含标记的验证码数据集,其中每个样本包括验证码图像和对应的标签。在构建好模型之后,我们可以使用收集到的验证码数据集进行模型的训练和评估。# 模型层的构建代码。使用训练好的模型对验证码进行识别。# 对验证码图像进行预处理。

ttocr456的博客 769

软件产品国际化:前后端及App多语言版本解决方案(超详细实现过程)

多语言版本解决方案是应对全球化趋势的关键策略,它通过构建灵活且可扩展的架构,支持软件产品在不同语言和文化环境下的顺畅运行与展示。此方案涵盖了前端多语言界面实现、后端多语言数据处理及大数据环境下的多语言支持等多个层面,确保公司能够高效地推出适应全球用户多样化需求的软件产品。在前端多语言界面实现方面,解决方案采用了国际化与本地化的结合方法。国际化过程确保软件的功能和代码设计能够处理多种语言和文化习惯,而本地化则针对特定地区进行界面和内容的调整。

大模型大数据攻城狮的专栏 2752

15 RK3568 RTL8111 PCIE

我这边扩了三个网卡。pcie3.0拆分了1+1lane。需要注意自己的reset引脚修改为自身rtl引脚即可。1、调试pcie 扩展网卡 RTL8111。

qq_39451352的博客 179

极验文字点选--文字标签识别CRNN项目实战分享

验证码之旋转印刷文字识别实战 文本主要描述旋转印刷文字验证码的识别训练,适读人群为有识别验证码经验人群或当前寻找验证码项目试手人群。本文采用CRNN+CTC对文字进行识别,通过训练已对样例数据的识别率达到了97%。本文主要以实战代码展示的形式叙述整个项目的过程,方便大家理解和尝试。 CRNN模型简介 模型论文:An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to

奋斗客的博客 1万+

国产化替代落地:C#+Avalonia跨平台开发(麒麟系统适配全流程)

摘要: 随着国产化替代政策的推进,麒麟操作系统成为国产替代的重要选择。本文介绍了如何使用C#和Avalonia框架开发跨平台应用,适配麒麟系统。Avalonia支持Windows、Linux(包括麒麟)和macOS,通过XAML设计UI,便于开发者快速上手。文章详细讲解了开发环境配置、XAML控件设计、Linux特性适配及性能优化,并强调政府30%研发补贴带来的政策红利。未来,随着国产系统生态完善,C#+Avalonia将成为企业跨平台开发的高效解决方案。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 3474

【机器学习】基于CNN-RNN模型的验证码图片识别

本篇博文深入探讨了OCR技术在验证码识别领域的广泛应用与发展。首先,我们概述了OCR技术的重要性,包括其在提升用户体验和保障系统安全方面的作用。接着,我们详细介绍了OCR模型的工作原理,包括图像预处理、字符识别等关键步骤,并展示了其在不同领域的应用潜力。随后,我们详细阐述了OCR模型的构建、训练与优化过程,强调了CTC损失层在处理序列识别问题中的重要性。最后,我们讨论了模型的推理预测阶段,并通过可视化工具展示了模型的识别效果。展望未来,OCR技术将持续进步,并在网络安全和用户体验提升方面发挥更大作用。

MUKAMO的博客 2975

zabbix系列:内存VM.MEMORY.SIZE监控之total、free、pused、available 参数说明

free -m buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的. zabbix Web total:1046/1024=1.02G Available:216/1046=20.65% zabbix参数 total- 总物理内存. free- 可用内存. active- 内存当前使用或最近使用,所以它在RAM中。 inactive- 未使用内存. wired- 被标记为始终驻留在RAM中的内...

NIO4444 5665

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

基于CNN-RNN模型的验证码图片识别

基于CNN-RNN模型的验证码识别方法能够有效处理复杂的验证码问题,结合了卷积神经网络的特征提取能力和循环神经网络的序列建模能力。通过使用CTC解码,可以在没有逐帧标注的情况下预测验证码中的字符序列。这种方法在实际应用中具有很高的准确率和适应性。

科学的N次方 1336

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

[深度学习初识 - 实操笔记] RNN循环神经网络-验证码识别项目

RNN循环神经网络 1. RNN的缺陷 ① 并行化计算能力差; ② 目前主要用于输出层和框架。 2. RNN神经单元 ① 将输出的结果ht 作为反馈,供下一次循环计算。——输入结构(xt,ht) (使网络具有记忆能力;用记忆和当前状态去决定下一个结果。因此不能并行操作。) ② 使用在 语音/句子,具有先后时序的数据。 ③ 神经元对输入的数量不敏感,可以输入任意长度的数据。(RNN作为输入层/输出层...

iamfishman 694

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

CRNN+CTC实现不定长验证码识别(keras模型-训练篇)

本文旨在讲解如何使用以tensorflow作为后端的keras构建一个使用CTC为loss的CRNN,并针对训练过程进行了优化(tricks),避免模型不收敛的问题。本文不着重原理的阐述、网络结构优化等内容,并假定读者已经了解过CTC、CNN、RNN的基本原理。.

gdhy9064的博客 5306

定长图文验证码模型训练

定长图文验证码模型训练

自成背后的博客 3791
上一篇: ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[64,1,5,5]
下一篇: hive使用正则将非数字字母开头的字段转null
BigData-0
博客等级 码龄7年 341粉丝 309原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigData-0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值