利用已有的标注文字信息制作fake数据

from PIL import Image, ImageDraw, ImageFont, ImageFilter
import random
import glob
import numpy as np
import os
import cv2
from nespaper_semantics import seg_str'''
1. 从文字库随机选择10个字符
2. 生成图片
3. 随机使用函数
'''
# 从字库中随机选择n个字符
def sto_choice_from_info_str(info_str,quantity):start = random.randint(0, len(info_str)-(quantity+1))end = start + quantityrandom_word = info_str[start:end]return random_worddef random_word_color():font_color_choice = [[10, 10, 10], [5, 5, 5], [0, 0, 0]]font_color = random.choice(font_color_choice)noise = np.array([random.randint(0,2), random.randint(0,2), random.randint(0,2)])font_color = (np.array(font_color) + noise).tolist()return tuple(font_color)
# 生成一张背景图片
def create_an_image(bground_path, width, height):bground_list = os.listdir(bground_path)bground_choice = random.choice(bground_list)bground = cv2.imread(os.path.join(bground_path, bground_choice))x, y = random.randint(0, bground.shape[1]-width), random.randint(0, bground.shape[0]-height)bground = bground[y:y+height, x:x+width, :]return bground# 随机选取文字贴合起始的坐标, 根据背景的尺寸和字体的大小选择
def random_x_y(bground_size, font_size):height, width, _ = bground_sizeprint('bground_size:', bground_size)print('font_size:', font_size)# 为防止文字溢出图片,x,y要预留宽高# x = random.randint(0, width - font_size * 10)# y = random.randint(0, int((height-font_size)/4))"""====notice notice===="""#10个字要减140 9个字要减100 8个字要减80 7个字要减40 6个字要减20 5个字以下不用减x = random.randint(3, int((width - font_size) / 2))y = random.randint(10, height - font_size * 7)return x, ydef random_font_size():font_size = random.randint(22,25)return font_sizedef random_font(font_path):font_list = os.listdir(font_path)random_font = random.choice(font_list)return os.path.join(font_path, random_font)
def add_white_noise(image):rows, cols, dims = image.shaperandom_index=random.randint(10,100)for i in range(random_index):x = np.random.randint(2, rows)y = np.random.randint(2, cols)if random.getrandbits(1):image[x-1:x+1, y-1:y+1, :] = 180else:image[x, y, :] = 180return imagedef main(infostr, save_path, num,words_length,width,height,back_path,font_path):# 随机选取5个字符random_word_ori = sto_choice_from_info_str(infostr, words_length)print('random_word_ori:', random_word_ori)random_word = ''.join([i+'\n' for i in random_word_ori if i not in [':','(',')','「','」']])print('random_word:\n', random_word)# # 生成一张背景图片,已经剪裁好,宽高为280*32raw_image = create_an_image(back_path, width, height)# 随机选取字体大小font_size = random_font_size()# 随机选取字体font_name = random_font(font_path)print('font_name:', font_name)# 随机选取字体颜色font_color = random_word_color()# 随机选取文字贴合的起始坐标 x,ydraw_x, draw_y = random_x_y(raw_image.shape, font_size)# 将文本贴到背景图片raw_image = Image.fromarray(raw_image[..., ::-1])font = ImageFont.truetype(font_name, font_size)draw = ImageDraw.Draw(raw_image)draw.text((draw_x, draw_y), random_word, fill=font_color, font=font)raw_image = raw_image.rotate(0.3)image = add_white_noise(np.array(raw_image))# cv2.imwrite('image.jpg', image)# 保存文本信息和对应图片名称img_name = save_path+'/'+'fake_'+str(words_length)+'_'+str(num)+'.jpg'cv2.imwrite(img_name, image)with open(img_name.replace('.jpg','.txt'), 'w', encoding='utf-8') as file:[file.write(val) for val in random_word_ori]
def make_fake_data(total):#背景图片地址back_path = './background'#字体地址font_path = './font'#语料库 #从make_fake_word_library函数得到得到的语料库info_str = seg_strprint('len(info_str):', len(info_str))# 生成的字符个数words_length = 3output_path = 'data_set/fake_one_'+str(words_length)if not os.path.exists(output_path):os.mkdir(output_path)if words_length < 6:width=32height=200elif 6<=words_length<7:width = 32height = 220elif 7<=words_length<8:width = 32height = 240elif 8 <= words_length < 9:width = 32height = 280elif 9 <= words_length < 10:width = 32height = 300else:width = 32height = 340for i,num in enumerate(range(0, total)):if i<1:main(info_str, output_path, num, words_length, width, height,back_path,font_path)if num % 1000 == 0:print('[%d/%d]' % (num, total))
#根据标注的报纸制作语义库
def make_fake_word_library():import pandas as pdtrain_path = './label/train.txt'val_path = './label/val.txt'train_names = np.array(pd.read_csv(train_path, header=None))val_names = np.array(pd.read_csv(val_path, header=None))Semantics_list=[]for i,train_name in enumerate(train_names):words = train_name[0].split(' ')[-1]Semantics_list.append(words)for i,val_name in enumerate(val_names):words = val_name[0].split(' ')[-1]Semantics_list.append(words)print(len(Semantics_list))print(Semantics_list[:2])Semantics_str=''.join(Semantics_list)print(len(Semantics_str))print(Semantics_str)
if __name__ == '__main__':#用报纸制作的假数据make_fake_data(total=1000)# make_fake_word_library()

背景:

 

字体:https://download.csdn.net/download/fanzonghao/11866723

 

输出:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汽车芯片:半导体芯片巨头加速成长

来源&#xff1a;乐晴智库精选伴随汽车智能化提速&#xff0c;汽车半导体加速成长。2017年全球汽车销量9680万辆(3%);汽车半导体市场规模288亿美元(26%)&#xff0c;增速远超整车。汽车半导体按种类可分为功能芯片MCU(MicrocontrollerUnit)、功率半导体(IGBT、MOSFET等)、传感器…

将MSRA-TD500标签转换成逆时针输出标签+labeleme json格式转四个点的txt

一&#xff0e;MSRA-TD500 : http://www.iapr-tc11.org/mediawiki/index.php/MSRA_Text_Detection_500_Database_%28MSRA-TD500%29 #coding:utf-8 """ fzh created on 2019/12/6 将MSRA-TD500数据标签转换成按逆时针输出 也即  index,difficulty label,x,y,w…

一文看尽2018全年AI技术大突破

来源&#xff1a;量子位摘要&#xff1a;2018&#xff0c;仍是AI领域激动人心的一年。这一年成为NLP研究的分水岭&#xff0c;各种突破接连不断&#xff1b;CV领域同样精彩纷呈&#xff0c;与四年前相比GAN生成的假脸逼真到让人不敢相信&#xff1b;新工具、新框架的出现&#…

pyecharts地图使用

1.首先安装包 pip install pyecharts0.5.1 2.安装地图包 依次是全球地图、中国省级地图、中国市级地图、中国区县级地图、中国区域地图 pip install echarts-countries-pypkg pip install echarts-china-provinces-pypkg pip install echarts-china-cities-pypkg …

《科学》:基因编辑婴儿入选年度“科学崩坏”事件

来源&#xff1a;知识分子摘要&#xff1a;《科学》杂志每年会评出在即将过去的一年里最为重要的十大科学突破&#xff08;Science Breakthrough&#xff09;。今年&#xff0c;夺得年度突破桂冠的是“单细胞水平细胞谱系追踪技术”&#xff0c;帮助破获多起悬案的法医系谱技术…

利用scipy包计算表格线的峰值,还原表格得到表格结构

1. 利用scipy包计算表格线的峰值 import cv2 import numpy as np from scipy.signal import find_peaks, peak_widthsdef get_lines_from_image(img_bin, axis, kernel_len_div 20, kernel_len None, iters 3):""":param img_bin: opencv img:param axis: 0…

原子智库 | 刘伟:人工智能快追上人类思维?答案可能让你失望

来源&#xff1a;原子智库摘要&#xff1a;2018年12月15日&#xff0c;原子智库主办的“改革的规则与创新——2018光华腾讯经济年会暨风云演讲”在北京大学举办北京邮电大学人机交互与认知工程实验室主任刘伟发表演讲。演讲的话题是未来工业化发展、智能化发展。刘伟在演讲中指…

利用xlwt写excel并进行单元格的合并

1.写入行列值 import xlwt # 创建一个workbook 设置编码 workbook xlwt.Workbook(encodingutf-8) # 创建一个worksheet worksheet workbook.add_sheet(My Worksheet)# 写入excel # 参数对应 行, 列, 值 worksheet.write(1, 0, label this is test)# 保存 workbook.save(Exc…

为了边缘计算,亚马逊、谷歌、微软已正面交锋!

来源&#xff1a;全球物联网观察摘要&#xff1a;so&#xff0c;你真的了解边缘计算吗&#xff1f;边缘计算的前世今生云计算自2005年提出之后&#xff0c;就开始逐步地改变我们的生活、学习、工作的方式。云计算使得公司能够在自己的物理硬件之外&#xff0c;通过远程服务器网…

每日一小练——二项式系数加法解

上得厅堂&#xff0c;下得厨房&#xff0c;写得代码&#xff0c;翻得围墙&#xff0c;欢迎来到睿不可挡的每日一小练&#xff01; 题目&#xff1a;二项式系数加法解 内容&#xff1a;请编写一个程序&#xff0c;仅仅用加法&#xff0c;求出n中取r个组合系数C(n,r)&#xff0c;…

华为、苹果、高通,谁在领跑?全面解读清华AI芯片报告

来源&#xff1a;智东西摘要&#xff1a;本文全面讲解人工智能芯片&#xff0c;系统梳理人工智能芯片的发展现状及趋势。2010 年以来&#xff0c;由于大数据产业的发展&#xff0c;数据量呈现爆炸性增长态势&#xff0c;而传统的计算架构又无法支撑深度学习的大规模并行计算需求…

SSD300网络结构(pytorch)+多尺度训练与测试

一.SSD300 1.如图是预测框的相应feature map 这里smin是0.2&#xff0c;表示最底层的scale是0.2&#xff1b;smax是0.9&#xff0c;表示最高层的scale是0.9,m代表产生尺度预测的feature map个数。 其中anchor的长宽关系&#xff0c;s就是上图中的scale,a就是上图中的anchor …

01-08-02【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider...

第一步骤&#xff1a;hibernate.cfg.xml文件补上如下配置&#xff1a; <?xml version"1.0" encoding"utf-8"?> <!-- This template was written to work with NHibernate.Test. Copy the template to your NHibernate.Test project folder and…

2018, 自动驾驶异常艰难的一年

编译&#xff1a;张玺 &#xff0c;编辑&#xff1a;宇多田摘要&#xff1a;虽然文章几乎聚焦于美国硅谷的技术公司&#xff0c;但这并不意味着作者提出的种种问题不存在于中国的技术公司身上。有意思的是&#xff0c;作者批评了各大公司此前疯狂立 flag&#xff0c;却最后纷纷…

目标检测矩形框与polygon数据增加--裁剪,拓展,旋转

1.裁剪 import torch from torchvision import transforms import cv2 import numpy as np import types from numpy import random class RandomSampleCrop(object):"""CropArguments:img (Image): the image being input during trainingboxes (Tensor): th…

医生们说,AI不会取代我们!

来源&#xff1a;IEEE电气电子工程师学会每次人工智能在医疗任务中与医生进行竞争&#xff08;对此我们已经报道过很多次&#xff09;时&#xff0c;一个问题不可避免地浮出水面&#xff1a;人工智能会取代医生吗&#xff1f;如果你与AI 专家或硅谷投资者交谈&#xff0c;答案往…

ubuntu安装python3.5+pycharm+anaconda+opencv+docker+nvidia-docker+tensorflow+pytorch+Cmake3.8

一&#xff0c;切换python版本为3.5 装好ubuntu&#xff0c;python版本是2.7的 我自己安装并更改打开为python3.5 sudo apt-get install python3.5 设置优先级和默认环境&#xff1a; sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 su…

学界 | 量化深度强化学习算法的泛化能力

来源&#xff1a;AI 科技评论OpenAI 近期发布了一个新的训练环境 CoinRun&#xff0c;它提供了一个度量智能体将其学习经验活学活用到新情况的能力指标&#xff0c;而且还可以解决一项长期存在于强化学习中的疑难问题——即使是广受赞誉的强化算法在训练过程中也总是没有运用监…

《科学》评出2018年度十大科学突破事件

来源&#xff1a;科学大院《科学》杂志每年会评出在即将过去的一年里最为重要的十大科学突破&#xff08;Science Breakthrough&#xff09;。今年&#xff0c;夺得年度突破桂冠的是“单细胞水平细胞谱系追踪技术”&#xff0c;帮助破获多起悬案的法医系谱技术、#MeToo 运动等也…

递归理解以及时间复杂度计算

一.复杂度分析&#xff1a; 可以理解为递归的深度就是空间复杂度&#xff0c;时间复杂度就是O(T*depth),其中&#xff34;是每个递归函数的时间复杂度&#xff0c;depth是递归深度&#xff0e; #空间复杂度O(1) def sum1_(n):res 0for i in range(n1):resireturn res#递归 空…