数据集

dataset/char

1.因为我做的是车牌字符识别,所以木有 I,O

2.为什么有O的文件夹呢?我放入的是非字符图片,作为负样本,防止分隔点等杂质误判

3.每个文件夹里的字符图像是经过预处理的单个字符图片,尺寸20*20

PS:这些数据我怎样得到的呢?首先收集大量含车牌的车辆图片,提取车牌-->分割字符-->处理

可参考我的另一篇:【opencv】车牌定位及倾斜较正

如果你对上面提到的不感兴趣,将处理好的分享给你~

链接:https://pan.baidu.com/s/1ZZS-w7msgWTH1OCXfjUGPQ 
        提取码:g7br

 

训练(Keras)


import skimage.io
import skimage.color
import skimage.transform
import matplotlib.pyplot as pltimport numpy as np
import os
import randomimport keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K
import cv2DATASET_DIR = './dataset/'classes = os.listdir(DATASET_DIR + "/char/")
data = []
for cls in classes:files = os.listdir(DATASET_DIR + "/char/"+cls)for f in files:img = skimage.io.imread(DATASET_DIR + "/char/"+cls+"/"+f)img = skimage.color.rgb2gray(img)data.append({'x': img,'y': cls})random.shuffle(data)X = [d['x'] for d in data]
y = [d['y'] for d in data]ys = list(np.unique(y))
y = [ys.index(v) for v in y]x_train = np.array(X[:int(len(X)*0.8)])
y_train = np.array(y[:int(len(X)*0.8)])x_test = np.array(X[int(len(X)*0.8):])
y_test = np.array(y[int(len(X)*0.8):])
batch_size = 128
num_classes = len(classes)
epochs = 10# input image dimensions
img_rows, img_cols = 20, 20def extend_channel(data):if K.image_data_format() == 'channels_first':data = data.reshape(data.shape[0], 1, img_rows, img_cols)else:data = data.reshape(data.shape[0], img_rows, img_cols, 1)return datax_train = extend_channel(x_train)
x_test = extend_channel(x_test)input_shape = x_train.shape[1:]x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')y_train2 = keras.utils.to_categorical(y_train, num_classes)
y_test2 = keras.utils.to_categorical(y_test, num_classes)#模型搭建按你喜欢来~
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),activation='relu',input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))model.compile(loss=keras.losses.categorical_crossentropy,optimizer=keras.optimizers.Adadelta(),metrics=['accuracy'])
model.fit(x_train, y_train2,batch_size=batch_size,epochs=epochs,verbose=1,validation_data=(x_test, y_test2))score = model.evaluate(x_test, y_test2, verbose=0)print('Test loss:', score[0])
print('Test accuracy:', score[1])
model.save_weights('char_cnn.h5') #输出模型

我设置的网络如下,可以按照你自己的改一哈~

char_cnn.h5就是输出的模型啦

测试

import cv2
import keras
import numpy as np
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K
class CNN():def __init__(self, num_classes, fn):self.model = Sequential()self.model.add(Conv2D(32, kernel_size=(3, 3),activation='relu',input_shape=[20, 20, 1]))self.model.add(Conv2D(64, (3, 3), activation='relu'))self.model.add(MaxPooling2D(pool_size=(2, 2)))self.model.add(Dropout(0.25))self.model.add(Flatten())self.model.add(Dense(128, activation='relu'))self.model.add(Dropout(0.5))self.model.add(Dense(num_classes, activation='softmax'))self.model.compile(loss=keras.losses.categorical_crossentropy,optimizer=keras.optimizers.Adadelta(),metrics=['accuracy'])self.model.load_weights(fn)def predict(self, samples):r = self.model.predict_classes(samples)return r[0]if __name__ == '__main__':list_char = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9','A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T','U', 'V', 'W', 'X', 'Y', 'Z']char_model = CNN(35, "char_cnn.h5")img_test=cv2.imread("test.jpg",0)img_test=img_test.reshape(-1,20,20,1)res=char_model.predict(img_test)#返回索引  0:0  1:1 。。。。10:Aprint(list_char[res])

输入:   输出:4

给个赞嘛~~

CNN识别字符 训练相关推荐

  1. 【转】CNN+BLSTM+CTC的验证码识别从训练到部署

    [转]CNN+BLSTM+CTC的验证码识别从训练到部署 转载地址:https://www.jianshu.com/p/80ef04b16efc 项目地址:https://github.com/ker ...

  2. Halcon学习---光学字符训练、识别(OCR)算子

    1.append_ocr_trainf append_ocr_trainf(Character, // 选中当前目标Image, // 目标对应图片Class, // 字符的类别(名称) Traini ...

  3. cnn识别不定长英文验证码

    本程序作为一个基础版的CNN使用教程,以识别简单的英文验证码作为目标完成一个简单的实例.在这个实例中,我们会涉及到以下三步,并通过这三部曲来带大家体验深度学习的魅力. 仅2分,可直接运行的程序:htt ...

  4. python神经网络库识别验证码_基于TensorFlow 使用卷积神经网络识别字符型图片验证码...

    本项目使用卷积神经网络识别字符型图片验证码,其基于TensorFlow 框架.它封装了非常通用的校验.训练.验证.识别和调用 API,极大地减低了识别字符型验证码花费的时间和精力. 项目地址:http ...

  5. Tensorflow.js||使用 CNN 识别手写数字

    Tensorflow官方的tesorflow.js实操课程 链接为:link 使用 CNN 识别手写数字 文章目录 使用 CNN 识别手写数字 1. 简介 2. 设置操作 3. 加载数据 4. 定义模 ...

  6. opencv 车牌字符分割 ANN网络识别字符

    opencv 车牌字符分割 ANN网络识别字符   原文参考:https://www.cnblogs.com/chenzhefan/p/7629441.html 最近在复习OPENCV的知识,学习ca ...

  7. EasyOCR 识别模型训练

    0. 开始之前 EasyOCR 中使用的神经网络模型在每个阶段会不同基于开源的项目:数据集整合.数据集训练.模型使用.分别对应三种不同的框架. 训练数据生成: GitHub - Belval/Text ...

  8. 一个字符训练材料生成的小文件

    前几天想训练一个可以识别字符的模型,但是,苦于找不到训练材料,今天,做网站验证码时候发现了一个思路,写下来分享一下. from captcha.image import ImageCaptcha im ...

  9. PyTorch:数据加载,数学原理,猫鱼分类,CNN,预训练,迁移学习

    1,数据加载 PyTorch开发了与数据交互的标准约定,所以能一致地处理数据,而不论处理图像.文本还是音频.与数据交互的两个主要约定是数据集(dataset)和数据加载器(dataloader).数据 ...

最新文章

  1. vue.js环境安装
  2. 如何选择开源许可证?(转)
  3. linux字符设备开发
  4. Java获取泛型T的类型 T.class
  5. zookeeper centos7 集群部署
  6. 专栏订阅须知《必读》
  7. java.security.NoSuchAlgorithmException: SHA_256 MessageDigest not available
  8. java 转dwg转图片_dwg转pdf要怎么转换
  9. 引用JavaScript的三种方式第二课
  10. 剪枝乱炖 | 模型加速与压缩
  11. php 工厂模式作用,PHP工厂模式的好处概述
  12. CSS:实现跳动小球蒙版效果
  13. STM32F1下载程序方法
  14. Linux-DHCP服务器
  15. Matlab中mapminmax函数使用注意事项
  16. 图片去水印工具软件,比PS还好用的图片杂物去除工具
  17. 华为AX3Pro路由器配置成交换机使用
  18. 服务器黑屏只显示鼠标是什么意思,电脑黑屏只显示鼠标怎么办
  19. 【Zeekr_Tech】为自动驾驶保驾护航—谈谈主流中间件设计
  20. SQL中IF函数的使用

热门文章

  1. 用Python解决百钱买鸡问题
  2. 回望2019:智能车联网“脱虚向实”
  3. 卸载鲁大师后 计算机无法启动项,如何完全删除鲁大师的计算机软件?卸载会影响系统吗?...
  4. 大数据培训学习程序员有必要吗
  5. matlab 函数调用和修改传入参…
  6. Cytoskeleton 艾美捷 肌动蛋白结合蛋白研究
  7. Cytoskeleton丨艾美捷 微管/微管蛋白体内分析生化试剂盒
  8. CDR和DMG以及PKG的格式的区别
  9. 钻井缸套排量_钻井队用排量计算公式
  10. 继获得1100万美元投资后,Fincy将增招50位“战略型”人才