TensorFlow识别复杂验证码以及搭建生产环境(5)—— 设计神经网络

博主分享了如何修改之前的验证码识别代码,构建了一个包含3个卷积层和2个全连接层的5层神经网络。经过训练,模型在验证码识别上的正确率达到了50%。讨论了batch大小对训练的影响,以及停止训练的条件。
摘要由CSDN通过智能技术生成

0x00 前言

本篇博文的代码主要修改自以前的一篇文章: Tensorflow应用之简单验证码识别
这个神经网络主要分为5层,如果想设计一个更加复杂的神经网络,请参考VGG16神经网络,共有16层。
这个5层神经网络包含3个卷积神经网络以及2个全连接神经网络。最后我的正确率达到了50%左右。

0x01 main.py

from gen_check_code import gen_captcha_text_and_image_new
from gen_check_code import number, alphabet
from test_check_code import get_test_captcha_text_and_image, get_test_sets_length
import numpy as np
import tensorflow as tf

text, image = gen_captcha_text_and_image_new()
print("验证码图像channel:", image.shape)  # (60, 160, 3)
# 图像大小
IMAGE_HEIGHT = image.shape[0]
IMAGE_WIDTH = image.shape[1]
image_shape = image.shape
MAX_CAPTCHA = len(text)
print("验证码文本最长字符数", MAX_CAPTCHA)  # 验证码最长4字符; 我全部固定为4,可以不固定. 如果验证码长度小于4,用'_'补齐


# 把彩色图像转为灰度图像(色彩对识别验证码没有什么用)
# 度化是将三分量转化成一样数值的过程
def convert2gray(img):
    if len(img.shape) > 2:
        gray = np.mean(img, -1)
        # 上面的转法较快,正规转法如下
        # r, g, b = img[:,:,0], img[:,:,1], img[:,:,2]
        # gray = 0.2989 * r + 0.5870 * g + 0.1140 * b
        # int gray = (int) (0.3 * r + 0.59 * g + 0.11 * b);
        return gray
    else:
        return img


""" 
cnn在图像大小是2的倍数时性能最高, 如果你用的图像大小不是2的倍数,可以在图像边缘补无用像素。 
np.pad(image,((2,3),(2,2)), 'constant', constant_values=(255,))  # 在图像上补2行,下补3行,左补2行,右补2行 
"""


char_set = number + alphabet   # 如果验证码长度小于4, '_'用来补齐
CHAR_SET_LEN = len(char_set)

# 文本转向量
def text2vec(text):
    text_len = len(text)
    if text_len > MAX_CAPTCHA:
        raise ValueError('验证码最长4个字符')

    vector = np.zeros(MAX_CAPTCHA * CHAR_SET_LEN)

    def char2pos(c):
        try:
            if ord(c) <= ord('9'):
                k = ord(c)-ord('0')
            else:
                k = ord(c)-ord('a') + 10
        
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值