时间:2021-05-23
平时上网干啥的基本上都会接触验证码,或者在机器学习学习过程中,大家或许会接触过手写体识别/验证码识别之类问题,会用到手写体的数据集;
自己尝试写了一个生成手写体图片的python程序,在此分享下生成单张 30*30像素的手写体数字1-9图像 的一种实现方法;
我是利用random生成随机数1-9,然后PIL写到图像上,然后经过旋转、扭曲处理,得到“手写体”,这里没有加干扰线和干扰点;
得到的手写体数字图像如图1所示;
实现比较简单,用了PIL库,不需要额外安装opencv啥的,有兴趣可以自己试试。
图1 生成的手写体数字1-9
图2 利用generate_pngs.py写入到文件夹3的数字3图像
如果你想生成手写体的字母/汉字也可以:
图3 利用generate_single_png.py生成汉字的手写体
源码上传到了我的GitHub: https://github.com/coneypo/Generate_handwritten_number
图4 整体设计流程
图5 生成的图像经过的处理
1.1 新建一个空白图像img_50,尺寸大小为50*50
img_50_blank = Image.new('RGB', (50, 50), (255, 255, 255))为什么我这里要先生成50*50的空白图像?
因为图像背景(50*50像素的画布)初始化的时候设置为白色(颜色数组(255, 255, 255)),而背景色之外的其实是黑色;
之后需要进行旋转处理,如果直接新建30*30像素的画布,旋转之后边上会出现黑边,如图6所示;
所以我新建了一个50*50,然后旋转之后从中间裁出来一个30*30的图像出来;
图6 直接用30*30像素的画布写字旋转(会出现黑边)
1.2 利用PIL在图像上写文字
利用PIL的ImageDraw,创建画笔,然后利用draw.text在指定位置写字;
xy=(18,11)是从图像左上角开始的坐标,取值自己根据需求调整;
# 创建画笔 draw = ImageDraw.Draw(img_50_blank)# 生成随机数1-9num = str(random.randint(1, 9))# 设置字体,这里选取字体大小25font = ImageFont.truetype('simsun.ttc', 20)# xy是左上角开始的位置坐标draw.text(xy=(18, 11), font=font, text=num, fill=(0, 0, 0))1.3 将图像随机旋转一定角度
利用 rotate(angel) 进行旋转图像,angel取的是度数,这里让它随机旋转-10到+10度:
# 随机旋转-10-10角度 random_angle = random.randint(-10, 10) img_50_rotated = img_50_blank.rotate(random_angle)1.4 图像扭曲
这里是生成“手写体”数字的核心步骤,一个正常的图像经过扭曲之后就可以得到想要的验证码了:
# 图形扭曲参数params = [1 - float(random.randint(1, 2)) / 100, 0, 0, 0, 1 - float(random.randint(1, 10)) / 100, float(random.randint(1, 2)) / 500, 0.001, float(random.randint(1, 2)) / 500]# 创建扭曲img_50_transformed = img_50_rotated.transform((50, 50), Image.PERSPECTIVE, params)2.1 generate_folders_1to9.py
因为我们要将指定的图像分类放入指定文件夹,所以我们需要先在项目目录下面新建9个文件夹:
(当然你也可以自己新建,新建9个文件夹工作量还不大,但是如果要生成的验证码包含英文字母那就比较多了,大写A-Z共24个+小写a-z共24个+数字1-9共9个=57个子文件夹)
# 2018-01-9# By TimeStamp# cnblogs: http:///coneypo/Generate_handwritten_number声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在前几天写的一篇博文《如何从TensorFlow的mnist数据集导出手写体数字图片》中,我们介绍了如何通过TensorFlow将mnist手写体数字集导出到本
一,mnist数据集形如上图的数字手写体就是mnist数据集。二,GAN原理(生成对抗网络)GAN网络一共由两部分组成:一个是伪造器(Generator,简称G
本文实例为大家分享了用KNN算法手写体识别的具体代码,供大家参考,具体内容如下#!/usr/bin/python#coding:utf-8importnumpy
本文学习NeuralNetworksandDeepLearning在线免费书籍,用python构建神经网络识别手写体的一个总结。代码主要包括两三部分:1)、数据
1.前言版本:Python3.6.1+PyQt5+SQLServer2012以前一直觉得,机器学习、手写体识别这种程序都是很高大上很难的,直到偶然看到了这个视频