Python3生成手写体数字方法

  

<强> 0。引言

  

平时上网干啥的基本上都会接触验证码,或者在机器学习学习过程中,大家或许会接触过手写体识别/验证码识别之类问题,会用到手写体的数据集;

  

自己尝试写了一个生成手写体图片的python程序,在此分享下生成单张30 * 30像素的手写体数字1 - 9图像的一种实现方法;

  

我是利用随机生成随机数1 - 9,然后公益诉讼写到图像上,然后经过旋转,扭曲处理,得到“手写体”,这里没有加干扰线和干扰点;

  

得到的手写体数字图像如图1所示,

  

实现比较简单,用了公益诉讼库,不需要额外安装opencv啥的,有兴趣可以自己试试。

  

 Python3生成手写体数字方法

  

图1生成的手写体数字1 - 9

  

 Python3生成手写体数字方法

  

图2利用generate_pngs.py写入到文件夹3的数字3图像

  

如果你想生成手写体的字母/汉字也可以:

  

 Python3生成手写体数字方法”> <img src=

  

图3利用generate_single_png.py生成汉字的手写体

  

源码上传到了我的GitHub: https://github.com/coneypo/Generate_handwritten_number

  

<强> 1。设计流程
  

  

 Python3生成手写体数字方法

  

图4整体设计流程

  

 Python3生成手写体数字方法

  

图5生成的图像经过的处理

  

1.1新建一个空白图像img_50,尺寸大小为50 * 50,

        img_50_blank=形象。新(RGB, (50,50) (255、255、255))      

<强>为什么我这里要先生成50 * 50的空白图像?

  

因为图像背景(50 * 50像素的画布)初始化的时候设置为白色(颜色数组(255、255、255)),而背景色之外的其实是黑色;

  

之后需要进行旋转处理,如果直接新建30 * 30像素的画布,旋转之后边上会出现黑边,如图6所示,

  

所以我新建了一个50 * 50,然后旋转之后从中间裁出来一个30 * 30的图像出来,

  

 Python3生成手写体数字方法

  

图6直接用30 * 30像素的画布写字旋转(会出现黑边)

  

1.2利用公益诉讼在图像上写文字

  

利用公益诉讼的ImageDraw,创建画笔,然后利用draw.text在指定位置写字;

  

xy=(18日11)是从图像左上角开始的坐标,取值自己根据需求调整;

        #创建画笔   画=ImageDraw.Draw (img_50_blank)      #生成随机数1 - 9   num=str(随机的。randint (9))      #设置字体,这里选取字体大小25岁   字体=ImageFont.truetype (simsun。ttc ', 20)      # xy是左上角开始的位置坐标   画画。11)文本(xy=(18日,字体=字体,文本=num,填补=(0,0,0))      

1.3将图像随机旋转一定角度

  

利用旋转(天使)进行旋转图像,天使取的是度数,这里让它随机旋转-10到+ 10度:

        #随机旋转的真空度角度   random_angle=随机的。randint(-10年,10)   img_50_rotated=img_50_blank.rotate (random_angle)      

1.4图像扭曲

  

这里是生成“手写体”数字的核心步骤,一个正常的图像经过扭曲之后就可以得到想要的验证码了:

        #图形扭曲参数   params=[1 -(随机浮动。randint (1、2))/100,   0,   0,   0,   1 -(随机浮动。randint (10))/100,   (随机浮动。randint (1、2))/500,   0.001,   (随机浮动。randint (1、2))/500)      #创建扭曲   img_50_transformed=img_50_rotated。变换(50,50)的形象。的角度来看,params)      

<强> 2. py源码介绍

  

2.1 generate_folders_1to9.py   

因为我们要将指定的图像分类放入指定文件夹,所以我们需要先在项目目录下面新建9个文件夹:

  

(当然你也可以自己新建,新建9个文件夹工作量还不大,但是如果要生成的验证码包含英文字母那就比较多了,大写所有共24个+小写所有共24个+数字1 - 9共9个=57个子文件夹)

Python3生成手写体数字方法