目前常用的手写字体(数字,字母,汉字)数据集有哪些?

目前常用的手写字体(数字,字母,汉字)数据集有哪些?,第1张

1 cifar10数据库

60000张32*32 彩色图片 共10类

50000张训练

10000张测试

下载cifar10数据库

这是binary格式的,所以我们要把它转换成leveldb格式。

2 在../caffe-windows/examples/cifar10文件夹中有一个 convert_cifar_data.cpp

将他include到MainCaller.cpp中。如下:

编译....我是一次就通过了 ,在bin文件夹里出现convert_cifar_data.exe。然后 就可以进行格式转换。binary→leveldb

可以在bin文件夹下新建一个input文件夹。将cifar10.binary文件放在input文件夹中,这样转换时就不用写路径了。

cmd进入bin文件夹

执行后,在output文件夹下有cifar_train_leveldb和cifar_test_leveldb两个文件夹。里面是转化好的leveldb格式数据。

当然,也可以写一�¸.bat文件处理,方便以后再次使用。

3 下面我们要求数据图像的均值

编译../../tools/comput_image_mean.cpp

编译成功后。接下来求mean

cmd进入bin。

执行后,在bin文件夹下出现一个mean.binaryproto文件,这就是所需的均值文件。

4 训练cifar网络

在.../examples/cifar10文件夹里已经有网络的配置文件,我们只需要将cifar_train_leveldb和cifar_test_leveldb两个文件夹还有mean.binaryproto文件拷到cifar0文件夹下。

修改cifar10_quick_train.prototxt中的source: "cifar-train-leveldb" mean_file: "mean.binaryproto" 和cifar10_quick_test.prototxt中的source: "cifar-test-leveldb"

mean_file: "mean.binaryproto"就可以了,

后面再训练就类似于MNIST的训练。写一个train_quick.bat,内容如下:

[plain] view plaincopy

copy ..\\..\\bin\\MainCaller.exe ..\\..\\bin\\train_net.exe

SET GLOG_logtostderr=1

"../../bin/train_net.exe" cifar10_quick_solver.prototxt

pause

往期的文章,我们分享了手写字母的训练与识别

使用EMNIST数据集训练第一个pytorch CNN手写字母识别神经网络

利用pytorch CNN手写字母识别神经网络模型识别手写字母

哪里的文章,我们只是分享了单个字母的识别,如何进行多个字母的识别,其思路与多数字识别类似,首先对图片进行识别,并进行每个字母的轮廓识别,然后进行字母的识别,识别完成后,直接在图片上进行多个字母识别结果的备注

Pytorch利用CNN卷积神经网络进行多数字(0-9)识别

根据上期文章的分享,我们搭建一个手写字母识别的神经网络

第一层,我们输入Eminist的数据集,Eminist的数据图片是一维 28*28的图片,所以第一层的输入(1,28,28),高度为1,设置输出16通道,使用5*5的卷积核对图片进行卷积运算,每步移动一格,为了避免图片尺寸变化,设置pading为2,则经过第一层卷积就输出(16,28,28)数据格式

再经过relu与maxpooling (使用2*2卷积核)数据输出(16,14,14)

第二层卷积层是简化写法nn.Conv2d(16, 32, 5, 1, 2)的第一个参数为输入通道数in_channels=16,其第二个参数是输出通道数out_channels=32, # n_filters(输出通道数),第三个参数为卷积核大小,第四个参数为卷积步数,最后一个为pading,此参数为保证输入输出图片的尺寸大小一致

全连接层,最后使用nn.linear()全连接层进行数据的全连接数据结构(32*7*7,37)以上便是整个卷积神经网络的结构,

大致为:input-卷积-Relu-pooling-卷积

-Relu-pooling-linear-output

卷积神经网络建完后,使用forward()前向传播神经网络进行输入图片的识别

这里我们使用腐蚀,膨胀 *** 作对图片进行一下预处理 *** 作,方便神经网络的识别,当然,我们往期的字母数字识别也可以添加此预处理 *** 作,方便神经网络进行预测,提高精度

getContours函数主要是进行图片中数字区域的区分,把每个数字的坐标检测出来,这样就可以 把每个字母进行CNN卷积神经网络的识别,进而实现多个字母识别的目的

首先,输入一张需要检测的图片,通过preProccessing图片预处理与getContours函数获取图片中的每个字母的轮廓位置

transforms.Compose此函数可以 把输入图片进行pytorch相关的图片 *** 作,包括转换到torch,灰度空间转换,resize,缩放等等 *** 作

然后加载我们前期训练好的模型

由于神经网络识别完成后,反馈给程序的是字母的 UTF-8编码,我们通过查表来找到对应的字母

字符编码表(UTF-8)

通过上面的 *** 作,我们已经识别出了图片中包括的字母轮廓,我们遍历每个字母轮廓,获取单个字母图片数据,这里需要特殊提醒一下 :我们知道EMNIST数据库左右翻转图片后,又进行了图片的逆时针旋转90度

这里我们使用cv2.flip(imgRes,1)函数,进行图片的镜像,并使用getRotationMatrix2D函数与warpAffine函数配合来进行图片的旋转 *** 作,这里就没有PIL来的方便些

然后,我们对图片数据进行torch转换train_transform(imgRes),并传递给神经网络进行识别

待识别完成后,就可以把结果备注在原始图片上

1,提取单字的特征,落笔顺序,笔画、形状、轮廓、偏旁等(软件早已完成)

2,建立手写模板库和单字特征数据库

3,对用户的字进行模板匹配,不能确定则给出类似字(后台进行)

4,用户选择后,利用单词库和语句库进行联想提示, 以增加用户输入速度


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9902492.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-03
下一篇2023-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存