博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
中文识别数据集生成脚本
阅读量:6312 次
发布时间:2019-06-22

本文共 1784 字,大约阅读时间需要 5 分钟。

概述

该脚本能够将用户指定的字符输出为不同字体的图像文件,用于训练文字识别的机器学习模型或用于其他文字识别OCR项目

详细

代码下载:

 

一、开发背景

随着近几年来计算机算力的不断提升,机器学习也迎来了爆发式的发展,图像识别作为机器学习最典型也是最主要的应用之一,目前应用前景火热。

机器学习最重要的一步就是获取数据集,没有一个坚实的数据集做支撑是无法训练出好用的模型的。因此,本文实现了一个脚本,能够生成任意数量,任意字体,以及带有各种模糊及噪声预处理的图像,用这些图像作为训练集是再合适不过了。

二、脚本效果

1、IDE中的运行界面

 

image.png

2、生成的图像

每个文件夹存放一个汉字,即一个类别:

image.png

打开其中一个文件夹,里面存放的是当前类别汉字的各个字体以及各种预处理后的图像文件。

image.png

三、具体开发

1、功能需求

1. 根据用户指定的汉字字符生成图像文件

2. 用户可自行更改图像数量及图像尺寸

3. 用户可自行更改预处理效果

 

2、实际项目

(1)项目结构

image.png

项目文件夹ImgGenerator下的fonts文件夹用于存放ttf字体文件。

outputs文件夹用于存放输出图像。

config.py中设置相关路径信息。

draw_chara.py是实际的脚本。

 

(2)实现思路:

 

1535936752291024834.png

  1. 设定需要输出的字符:

if __name__ == '__main__':       # 加载所有指定字体    fonts = load_fonts(size)    # 字符集,将其中的字符保存成图像    charset = 'u你想输出的汉字'        # 生成n个字    n = 10    draw_txt(n, charset, fonts, size)

 

2. 加载字体:

# 自动加载字体文件def load_fonts(size):    fnts = []    # 字体路径    font_path = os.path.join(config.FONT_PATH, "*.*")    # 获取全部字体路径,存成list    fonts = list(glob.glob(font_path))    # 遍历字体文件    for each in fonts:        # 调整字体大小        fnt = ImageFont.truetype(each, int(size[0]*1.75/2), 0)        fnts.append(fnt)    return fnts

这里需要根据输出尺寸调整字体大小,避免超出画布或留白太多。

 

3. 预处理图像:

作为数据增强的一种方式,对训练图像进行不同程度的预处理,包括模糊,干扰,噪声等可以增强模型的泛化能力。

这里可以根据自己需要选择在0-7个预处理模式中自行选择,只需要更改循环范围即可。

# 数据增强for mode in range(0, 8):    aug = augmentation(img, mode, size)
def augmentation(img, mode, size):    # 不能直接在原始image上改动    image = img.copy()    '''添加随机模糊和噪声'''    # 高斯模糊    if mode == 0:    # 模糊后二值化,虚化边缘    if mode == 1:    # 横线干扰    if mode == 2:    # 竖线    if mode == 3:    # 十字线    if mode == 4:    # 左右运动模糊    if mode == 5:    # 上下运动模糊    if mode == 6:    # 高斯噪声    if mode == 7:

 

(3)使用说明

现在config文件中设置字体文件路径和输出路径:

# coding=utf-8# 图像保存路径IMAGE_PATH = './outputs'# 字体文件路径FONT_PATH = './fonts'

字体文件路径中存放ttf字体文件,如下:

image.png

最后运行draw_chara.py即可在outputs文件夹中得到输出图像。

代码下载:

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

你可能感兴趣的文章
SLAM数据集
查看>>
c#学习笔记05——数组&集合
查看>>
【图论算法】Dijstra&BFS
查看>>
注册和上传文件(头像)
查看>>
使用OVS
查看>>
键盘回收的几种方法
查看>>
Python(条件判断和循环)
查看>>
day4 linux安装python
查看>>
LeetCode Container With Most Water (Two Pointers)
查看>>
vue (v-if show 问题)
查看>>
https基础
查看>>
css3 canvas之刮刮卡效果
查看>>
并查集模板
查看>>
RESTful Mongodb
查看>>
BZOJ3237:[AHOI2013]连通图(线段树分治,并查集)
查看>>
如何提高Ajax性能
查看>>
Android--自定义加载框
查看>>
LINUX下 lamp安装及配置
查看>>
BZOJ3105 [cqoi2013]新Nim游戏
查看>>
困惑的前置操作与后置操作
查看>>