python制作印刷体数据集:数字符号数据集(字符串转图⽚)做OCR项⽬,需要有很多印刷体的数据集,靠⼈⼯⼿动截图标注显然不现实,于是“⼈⽣苦短,我⽤python”
思路:数据集分两类,⼀类是长浮点数,模拟财务报表中的上亿元⾦额:
⽐如799,889,565.24
实验证明,识别模型经常把最后的⼩数点识别成,
还有⼀类就是随机的各种数字以及符号混合
⽣成完之后⽤pycharm的库将⽂本转为图⽚,把标签信息按格式写⼊中。
为了模拟扫描件效果,⽤opencv再打开,作图⽚(微⼩的)旋转,再保存。
最后的图⽚锐化处理模拟扫描(这个另讲)和数据集处理。
上代码:
#先导⼊所需的包
import pygame
import os
import string
import random
import shutil
import cv2
import numpy as np
pygame.init()# 初始化
def generate_random_str(geshu):#⽣成不规则字符串
stringlist=list()
for i in range(geshu):
random_str =''
base_str ='-().%0123456789'
length =len(base_str)-1
for i in range(random.randint(3,10)):
random_str += base_str[random.randint(0, length)]
# print(random_str)
stringlist.append(random_str)
return stringlist;
def get_correct(geshu):#⽣成随机两位浮点数
stringlist=list()
for i in range(geshu):
j=random.randint(1,9)
maxnum=pow(10,j)
num=round(random.uniform(-maxnum, maxnum),2)
# print("{:,}".format(num))
stringlist.append("{:,}".format(num))
return stringlist;
def rotate_bound(image, angle):
#获取宽⾼
random python(h, w)= image.shape[:2]
(cX, cY)=(w //2, h //2)
# 提取旋转矩阵 sin cos
M = RotationMatrix2D((cX, cY),-angle,1.0)
cos = np.abs(M[0,0])
sin = np.abs(M[0,1])
# 计算图像的新边界尺⼨
nW =int((h * sin)+(w * cos))
# nH = int((h * cos) + (w * sin))
nH = h
# 调整旋转矩阵
M[0,2]+=(nW /2)- cX
M[1,2]+=(nH /2)- cY
return cv2.warpAffine(image, M,(nW, nH),flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
try:
<('image')#强制删除
except:
pass
try:
os.mkdir("image")#创建⽬录
except:
pass
try:
except:
pass
randomcount=eval(input("请输⼊⽣成的随机浮点数字符串数量:"))
numbercount=eval(input("请输⼊⽣成的随机符号字符串数量:"))
rotatedmaxangel=eval(input("请输⼊最⼤随机旋转⾓度:"))
randomstringlist = get_correct(randomcount)#在括号⾥输⼊⽣成数量
numberstringlist = generate_random_str(numbercount)#在括号⾥输⼊⽣成数量
list= numberstringlist+randomstringlist#列表合并
listcount=randomcount+numbercount
#设置字体⼤⼩及路径
font = pygame.font.Font(os.path.join("C:\\Windows\\Fonts\\STKAITI.TTF"),26)
with open('','a')as file_handle:# .txt可以不⾃⼰新建,代码会⾃动新建
for i in range(listcount):
text = u"{0}".format(list[i])# 引号内引⽤变量使⽤字符串格式化
#设置位置及颜⾊
rtext = der(text,True,(0,0,0),(255,255,255))
#保存图⽚及路径
path=".\\image\\"+str(i)+".png"
pygame.image.save(rtext, path)
image = cv2.imread(path)#再次读取
rotated = rotate_bound(image, random.randint(-rotatedmaxangel,rotatedmaxangel))#转转转
cv2.imwrite(path, rotated)#保存旋转的图⽚
file_handle.write("image/"+str(i)+".png"+"\t"+list[i]+"\n")#写⼊标签⽂件
print("完成,请查看⽬录下内容")
其中图⽚旋转的代码是copy别⼈的,忘了是在哪个⽹站了……
这是⽣成的图⽚,想⽣成多少张就⽣成多少张,⽐⼈⼯标注⾼到不知道哪⾥去了。
这是对应的标签txt
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论