前言

哦,那是一个阳光明媚的下午。作为一个浑水摸鱼的高手,无意中发现了这样一篇文章。

用Python写春联:表达最真挚的祝福和最美好的祝愿

这不是打我的枪。反正我闲着。做点什么比较好。于是我高兴地喝了一杯茶

去看看看看。好家伙,原来对联的图片是生成的。然后问题来了。有没有办法自动生成对联,然后生成图片?

并在本地部署。

所以我有一个大胆的想法

基于RNN(Seq2Seq + Attention)生成对联(屁)

是的,我有个大胆的想法,就是让我们基于 Seq2Seq + Attention 来生成对联。然而

好吧,看来我们必须改变主意了。

啊哈,我真的找到了。

环境准备

算了,废话少说。让我们快速开始吧。

在此之前,我们必须准备好我们的环境。

我在这里使用 python 3.8

点安装桨桨

pip 安装 paddlehub

#如果paddlehub安装失败,可以使用

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeoutu003d100 paddlehub

pip 安装枕头

功能分析

对联生成

感谢飞浆提供的支持PaddleHub我们可以快速实现我们需要的功能。所以我们可以像这样封装我们的代码。

这个真的没什么好说的。

导入 paddlehub 作为集线器

类 HubUtils(对象):

定义__init__(自我):

self.hub u003d 集线器

#模型需要在初始化时加载。这需要时间。加载它以供以后调用,但标题很特殊

self.module_love_words u003d self.hub.Module(nameu003d"ernie_gen_lover_words")

self.module_poetry u003d self.hub.Module(nameu003d"ernie_gen_poetry")

self.module_couplets u003d self.hub.Module(nameu003d"ernie_gen_couplet")

def GetLoveWords(self,curx,sizeu003d5):

生成情话。默认返回五个情话。这被传递到列表中

结果 u003d self.module_love_words.generate(textsu003dcurx, use_gpuu003dTruebeam_widthu003dsize)

返回结果[0]

def GetAcrostic(self,title,lineu003d4,wordu003d7,sizeu003d1):

#默认返回一首歌曲,可以输入标题

self.module_acrostic u003d self.hub.module u003d hub.Module(nameu003d"ernie_gen_acrostic_poetry", lineu003d4, wordu003d7)

结果 u003d self.module\acrostic.generate(textsu003d[title], use_gpuu003dTruebeam_widthu003dsize)

返回结果[0]

def GetPoetry(self,curx,sizeu003d1):

#输入关键句和词生成一首诗,默认为一首

结果 u003d self.module\poetry.generate(textsu003d[curx], use_gpuu003dTruebeam_widthu003dsize)

返回结果[0]

def GetCouplet(self,up_couplet,sizeu003d1):

#输入上层链接,给出下层链接。默认是一个

结果 u003d self.module_couplets.generate(textsu003d[up_couplet],使用_gpuu003dTrue,beam_widthu003dsize)

返回结果[0]

如果 __name__u003du003d"__main__":

huba u003d hubuntilus()

print(Hub.GetCouplet("小母牛飞了"))

print(Hub.GetCouplet("风吹云破天"))

在这里,我还封装了几个有趣的训练模型。

图像生成

现在我们有了对联,接下来要做的就是生成我们的图片。

这实际上非常简单。我们可以直接使用飞行员在背景图片上书写,就像水印一样。

但在此之前,我们必须选择一个漂亮的字体。

我这里还是用windows系统的(实在忍不住了,很多环境配置都是windows系统的,除了办公室没玩过,现在放寒假了......以前玩kali)

打开这个文件夹

C:\Windows\字体

让我们选择一个不错的。

我们先来看看这一代的效果

让我们再次美化他。同时,我们需要让我们的话站起来。

然后我们再画一些点,让它发光。

类 ImgUtils(对象):

def Set_Color(self):

返回随机数.randrange(255)

def 漂亮(自我,博士,宽度,高度):

对于范围内的 i (800):

绘制干扰点

dr.point(xyu003d(random.randrange((宽度)), random.randrange(高度)),

填充u003d(self.Set_Color(), self.Set_Color(), self.Set_Color()))

def CreateImg(self,text,output_pathu003d"output.png",

fontPath u003d r"C:\Windows\Fonts\STXINGKA.TTF",showu003dTrue,

字体大小 u003d 55,漂亮u003d真):

#普通文本

镜头 u003d len(文本)

画布颜色

im u003d Image.new("RGB", (fontSize * lens + 20, (fontSize + 20)), (255, 0, 0))

博士 u003d ImageDraw.Draw(im)

字体 u003d ImageFont.truetype(fontPath, fontSize)

#美化

如果(漂亮):

self.Pretty(dr,fontSize * lens + 20,(fontSize + 20))

文字颜色

dr.text((10, 10), text, fontu003dfont, fillu003d"black")

im.save(输出_path)

如果(显示):

im.show()

def CoupletImg(self,text,input\pathu003d"output.png",

fontPath u003d r"C:\Windows\Fonts\STXINGKA.TTF",showu003dTrue,

字体大小 u003d 55,漂亮u003d真):

镜头 u003d len(文本)

单词 u003d 列表(文本)

画布颜色

im u003d Image.new("RGB", ((fontSize + 20),fontSize * (lens+1) + 20), (255, 0, 0))

博士 u003d ImageDraw.Draw(im)

字体 u003d ImageFont.truetype(fontPath, fontSize)

#美化

如果(漂亮):

self.Pretty(dr,(fontSize + 20),fontSize * lens + 20)

文字颜色

步长 u003d 10

对于单词中的单词:

dr.text((10, step), word, fontu003dfont, fillu003d"black")

step +u003d10+fontSize

im.save(输出_path)

如果(显示):

im.show()

调用

然后我们调用它。

从实用程序导入 ImgUtils,HubUtils

定义主():

huba u003d hubuntilus()

imgUtils u003d ImgUtils()

up_couplet u003d "漂亮的小妹妹"

down_couplet u003d Hub.GetCouplet(up_couplet)[0]

imageUtils.CoupletImg(up\couplet,output\pathu003d"up\couplet.png")

imgUtils.CoupletImg(down_couplet, output_pathu003d"down_couplet.png")

如果 __name__ u003du003d '__main__':

主要()

效果

好像车翻了

总结

这也是我第一次写科普类型(难度)的文章。如有不足,请多多指教

另外,祝大家新年快乐~

点击阅读全文
Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐