基于神经网络的蒙文手写字母识别的一些研究(数据集处理)
基于神经网络的手写蒙古字母识别(二)
各位博友大家好!我是PennyWu,又和大家见面了,这期的学习内容也是重头戏,讲究一种方法,希望大家都能学以致用。话不多说,我们就开始吧。
1. 意义
据不完全统计,世界上有大约2000多个民族,将近5000多种语言,可想而知字母的样式也是不拘一格,如:汉语字母、英语字母等;从古至今各国家各民族之间的沟通也同样是多种多样,如:贸易、战争等。随着时代的进步,字母作为语言的代表,彰显着民族深层文化的特色,在现代的日常生活中扮演着举足轻重的角色,如今字母渐渐成为我们在日常沟通中必不可少的基础交流工具。如何发扬并传承民族文化?如何加强世界各国之间的交流进而推动建设命运共同体?我想我们可以从基础交流工具中找到突破口。
2. 蒙古字母
蒙古文字虽然属于字母文字,但它和其他国家民族的字母文字外形并不类似,书写排列形式也不一样。蒙古文从上到下、从左至右的竖写排列形式体现了天、地、人合一,以及蒙古人顶天立地的性格。这种竖写排列形式,不仅为蒙古文书写带来了更多的方便,而且也为蒙古文爱好者提供了研究方向。
3. 蒙古字母图像处理
3.1 灰度化处理
对图像进行灰度化处理,主要运用PIL库的Image模块进行处理,通过im=Image.open(file)读取图像,再通过im.convert(‘L’) 对图像进行灰度化处理。此时灰度化处理后图像的位深度由24变为8。手写蒙古字母灰度化过程。
3.2 二值化处理
对图像进行二值化处理,首先定义常量阀值转换表,再由表将灰度化图像转化为二进制图像。此时二值化后图像的位深度由8变为1。手写蒙古字母灰度化过程。
4. 数据集
将处理好的蒙古字母图像整理到数据集中,数据集一共有三种,分别是训练集,验证集和测试集。数据集是基于23个手写蒙古字母图像通过裁剪、旋转组成的。数据集中每个图像的尺寸是32*32*1。
其中训练集每个手写蒙古字母有100张图像,一共有2300张图像。
其中验证集每个手写蒙古字母有10张图像,一共有230张图像。
其中测试集每个手写蒙古字母有1张图像,一共有23张图像。
5. 读入图像
读入训练集以及验证集图像的操作分为两步:
第一步:遍历图像目录获取图像个数,具体操作过程为:通过os.walk(dir)与for循环搭配使用,遍历数据集的每一个图像,获取图像总个数记为count。设置存储图像信息images、图像标签labels两个二维数组,根据count的数量、图像的尺寸SIZE的大小以及标签CLASSES的个数,初始化这两个二维数组,代码如下:
images = np.array([[0] * SIZE for i in range(count)])
labels = np.array([[0] * CLASSES for i in range(count)])
第二步:遍历图像目录生成图像数据和标签,具体操作过程为:通过调用os.walk(dir),遍历数据集的每一个图像,用index记录图像的标签,并循环遍历图像。通过img.getpixel((w, h))获取每个图像的像素点,让每个图像的像素点与阀值进行比较,将结果存入images[index][w + h * width]二维数组中,代码如下:
if img.getpixel((w, h)) > 128:
images[index][w + h * width] = 1
else:
images[index][w + h * width] = 0
其中:images二维数组中每行代表一张图像的信息,其中1表示有效信息。将标签存入labels[index][i]二维数组中,每行代表图像的标签,其中1表示这个图像对应的标签是这个列的数值。
6. 辅助模块
如何更有效地研究手写蒙古字母识别,我们需要对图像进行跟踪研究。辅助读入图像模块是查看经过处理后的手写蒙古字母图像的样式,通过append方法将处理好的手写蒙古字母图像的像素点保存在数组中,接着输出查看手写蒙古字母的图像数据。这里为了方便观察将值为255的像素点用1代替,并将其标红。
----------------------------------------------
这种简单且有效的处理方法,希望大家能够学会。
提示一下:可以通过循环语句,来批量处理图像,进而高效地凝结数据。
希望大家能够做出完美的数据集,将来好进一步进行相关研究。
下一期我会更新一篇综述整个识别过程的文章,便于大家从宏观角度掌握相关知识并学习。