IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 深度学习之基于CNN识别验证码 -> 正文阅读

[人工智能]深度学习之基于CNN识别验证码

本博客是参考博主:K同学啊的博客。
CNN的部分与前面没有太大的区别,但是本博客对于博主来说,最大的收获就是数据处理那一部分的操作。

1.导入库

import tensorflow as tf
import matplotlib.pyplot as plt
import os,PIL,random,pathlib
import numpy as np
from tensorflow.keras import datasets, layers, models

2.数据导入

#导入数据
data_dir = "E:/tmp/.keras/datasets/yzm_photos/captcha"
data_dir = pathlib.Path(data_dir)
all_images_paths = list(data_dir.glob('*'))##”*”匹配0个或多个字符
all_images_paths = [str(path) for path in all_images_paths]
#打乱数据
random.shuffle(all_images_paths)
#获取数据标签
all_label_names = [path.split("\\")[6].split(".")[0] for path in all_images_paths]##6代表第6个//

查看数据:
在这里插入图片描述

3.数字化

#标签数字化
#本部分将所有用到的字符都用数字来表示,相当于C++中的map操作,将字符映射为数字
number = ['0','1','2','3','4','5','6','7','8','9']
alphabet = ['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']
char_set = number+alphabet
char_set_len = len(char_set)
label_name_len = len(all_label_names[0])
#
#将字符串数字化
#首先生成一个全为0的5*36的二维数组,将标签中出现的字符所在的位置标记为1,这样将一个标签字符串转换为了一个二维数组。
def text2vec(text):
    vector = np.zeros([label_name_len,char_set_len])
    for i,c in enumerate(text):
        idx = char_set.index(c)
        vector[i][idx]=1.0
    return vector
all_labels = [text2vec(i) for i in all_label_names]

4.构建一个tf.data.Dataset

#预处理函数
def preprocess_image(image):
    image = tf.image.decode_jpeg(image,channels=1)
    image = tf.image.resize(image,[50,200])
    return image/255.0
def load_and_preprocess_image(path):
    image = tf.io.read_file(path)
    return preprocess_image(image)

path_ds = tf.data.Dataset.from_tensor_slices(all_images_paths)
image_ds = path_ds.map(load_and_preprocess_image)
label_ds = tf.data.Dataset.from_tensor_slices(all_labels)
image_label_ds = tf.data.Dataset.zip((image_ds,label_ds))
train_ds = image_label_ds.take(1000)#前1000个作为训练
test_ds = image_label_ds.skip(1000)#1000后面的作为测试

5.搭建CNN网络

batch_size = 16
epochs = 20
train_ds = train_ds.batch(batch_size)
test_ds = test_ds.batch(batch_size)
#搭建网络
model = models.Sequential([
    tf.keras.layers.Conv2D(32,(3,3),activation='relu',input_shape=(50,200,1)),
    tf.keras.layers.MaxPooling2D((2,2)),
    tf.keras.layers.Conv2D(64,(3,3),activation='relu'),
    tf.keras.layers.MaxPooling2D((2,2)),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(1000),
    tf.keras.layers.Dense(label_name_len*char_set_len),
    tf.keras.layers.Reshape([label_name_len,char_set_len]),
    tf.keras.layers.Softmax()
])
model.compile(optimizer="adam",
              loss='categorical_crossentropy',
              metrics=['accuracy'])
history = model.fit(
    train_ds,
    validation_data=test_ds,
    epochs=epochs
)

运行结果如图所示:
在这里插入图片描述
要想进一步优化实验结果,可以去调整某些参数,这个过程是比较漫长的。

6.模型加载&&预测

模型保存

model.save('E:/tmp/.keras/datasets/yzm_photos/yzm_model.h5')

模型加载

new_model = tf.keras.models.load_model('E:/tmp/.keras/datasets/yzm_photos/yzm_model.h5')

预测

plt.figure(figsize=(10,8))
    for images, labels in test_ds.take(1):
        images=tf.squeeze(images,axis=3)#裁掉一维
        for i in range(1):
            ax = plt.subplot(5, 3, i + 1)
            plt.imshow(images[i])
            img_array = tf.expand_dims(images[i], 0)
            img_array = tf.expand_dims(img_array, -1)#增加两维
            # print(img_array.shape)
            pre = new_model.predict(img_array)
            # print(np.argmax(pre, axis=2))
            plt.title(vec2text(np.argmax(pre, axis=2)[0]))
            # plt.axis("off")
    plt.show()

在这里插入图片描述
还是比较准确的,但是也有某些是识别不准确的,需要进一步去优化。
努力加油a啊

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-07-26 12:05:46  更:2021-07-26 12:07:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/22 9:58:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码