文章目录

  • 前言
  • 基于RNN(Seq2Seq + Attention)生成对联(个屁)
  • 环境准备
  • 功能分析
    • 对联生成
    • 图片生成
      • 调用
      • 效果
  • 总结

前言

哦,那是一个阳光明媚的午后,作为浑水摸鱼大师的我无意中一撇,突然发现了这么一篇文章。
用Python写春联:抒写最真诚的祝福和最美好的祈愿

这不是撞我枪口了嘛,反正闲着也是闲着,不如搞点事情。于是我兴致勃勃地喝了一杯茶

去look look。好家伙,原来是生成了对联的图片,那么问题来了有木有办法自动生成对联,然后再生成图片呢?

并且在本地部署咧。

于是我有个大胆的想法

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

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

好吧看来我们得换一个思路了。

呀呼,还真让我找到了。

环境准备

好了不说废话了,让我们快速开始吧。
在此之前我们得准备一下我们的环境。
我这里使用的是python 3.8

pip install paddlepaddle
pip install paddlehub
#如果paddlehub安装失败的话,可以使用
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout=100 paddlehubpip install pillow 

功能分析

对联生成

得益于飞浆为我们提供的PaddleHub我们可以快速地实现我们需要的功能。于是我们可以这样封装一下我们的代码。

这个真没啥好说的。

import paddlehub as hubclass HubUtils(object):def __init__(self):self.hub = hub#初始化时需要加载模型,需要时间,饿汉加载吧,方便后面调用,但是给标题的比较特殊self.module_love_words = self.hub.Module(name="ernie_gen_lover_words")self.module_poetry = self.hub.Module(name="ernie_gen_poetry")self.module_couplets = self.hub.Module(name="ernie_gen_couplet")def GetLoveWords(self,curx,size=5):# 生成情话,默认返回五个情话,这个传入listresults = self.module_love_words.generate(texts=curx, use_gpu=True, beam_width=size)return results[0]def GetAcrostic(self,title,line=4,word=7,size=1):#默认返回一首,输入标题即可self.module_acrostic = self.hub.module = hub.Module(name="ernie_gen_acrostic_poetry", line=4, word=7)results = self.module_acrostic.generate(texts=[title], use_gpu=True, beam_width=size)return results[0]def GetPoetry(self,curx,size=1):#输入关键句,词即可生成诗歌,默认一首results = self.module_poetry.generate(texts=[curx], use_gpu=True, beam_width=size)return results[0]def GetCouplet(self,up_couplet,size=1):#输入上联给出下联,默认给一个results = self.module_couplets.generate(texts=[up_couplet], use_gpu=True, beam_width=size)return results[0]if __name__=="__main__":Hub = HubUtils()print(Hub.GetCouplet("小母牛坐飞机"))print(Hub.GetCouplet("风吹云乱天垂泪"))

这里的话我还封装了几个比较有意思的训练好的模型。

图片生成

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

这个其实很简单,我们直接使用pillow在一张背景图片上写字就行,就像打水印一样。

不过在此之前我们得先选一个好看的字体。
这里我使用的还是Windows系统(没办法,很多环境配置都在Windows系统,除了平时办公室玩玩基本没玩了,而且现在还放寒假了…以前还玩kali来着的)

打开这个文件夹
C:\Windows\Fonts

咱们选一个好看的。


来我们先来看看这个生成的效果


我们再给他美化一下,同时我们需要让我们的字竖起来。

然后我们再绘制一些点,让它布灵布灵。

from PIL import Image,ImageFont,ImageDraw
import randomclass ImgUtils(object):def Set_Color(self):return random.randrange(255)def Pretty(self,dr,width,height):for i in range(800):# 绘制干扰点dr.point(xy=(random.randrange((width)), random.randrange(height)),fill=(self.Set_Color(), self.Set_Color(), self.Set_Color()))def CreateImg(self,text,output_path="output.png",fontPath = r"C:\Windows\Fonts\STXINGKA.TTF",show=True,fontSize = 55,pretty=True):#正常情况下的文字lens = len(text)# 画布颜色im = Image.new("RGB", (fontSize * lens + 20, (fontSize + 20)), (255, 0, 0))dr = ImageDraw.Draw(im)font = ImageFont.truetype(fontPath, fontSize)#美化if(pretty):self.Pretty(dr,fontSize * lens + 20,(fontSize + 20))# 文字颜色dr.text((10, 10), text, font=font, fill="black")im.save(output_path)if(show):im.show()def CoupletImg(self,text,output_path="output.png",fontPath = r"C:\Windows\Fonts\STXINGKA.TTF",show=True,fontSize = 55,pretty=True):lens = len(text)words = list(text)# 画布颜色im = Image.new("RGB", ((fontSize + 20),fontSize * (lens+1) + 20), (255, 0, 0))dr = ImageDraw.Draw(im)font = ImageFont.truetype(fontPath, fontSize)#美化if(pretty):self.Pretty(dr,(fontSize + 20),fontSize * lens + 20)# 文字颜色step = 10for word in words:dr.text((10, step), word, font=font, fill="black")step +=10+fontSizeim.save(output_path)if (show):im.show()

调用

之后就是咱们调用啦。

from utils import ImgUtils,HubUtilsdef main():Hub = HubUtils()imgUtils = ImgUtils()up_couplet = "漂亮小姐姐"down_couplet = Hub.GetCouplet(up_couplet)[0]imgUtils.CoupletImg(up_couplet,output_path="up_couplet.png")imgUtils.CoupletImg(down_couplet, output_path="down_couplet.png")if __name__ == '__main__':main()

效果



貌似好像翻车了

总结

其实我们的实现还是非常简单的,只是简单地去调用一些已经训练好的模型,并且实现的思路也很简单,就是拿到春联,然后绘制图片即可。难度其实就是和科普读物一样,代码非常简单。

另外提前祝大家新年快乐~

2022写春联(春联生成--用python手把手教你玩(科普难度))相关推荐

  1. python入门小游戏之跳一跳_从零基础开始,用python手把手教你玩跳一跳小游戏,直接打出高分...

    这对于很多人来说,可能是已经过时的游戏,但是对于python入门来说,却是一个非常值得学习的项目. TONOW收集了很多有关python入门的项目案例,包含了相应的教程和源码,哪怕你从未接触编程,也通 ...

  2. python 玩公众号游戏_从零基础开始,用python手把手教你玩跳一跳小游戏,直接打出高分...

    这对于很多人来说,可能是已经过时的游戏,但是对于python入门来说,却是一个非常值得学习的项目. 我们收集了很多有关python入门的项目案例,包含了相应的教程和源码,哪怕你从未接触编程,也通过这些 ...

  3. echarts formatter_手把手教你玩转echarts(二)折线图

    茫茫人海中与你相遇 相信未来的你不会很差 作者:婷酱Yaaa 来源:https://juejin.im/post/5f0292d35188252e5a5dbed0 前言 哈喽,everybody,我又 ...

  4. 手把手教你玩转SOCKET模型:完成端口(Completion Port)详解

    这篇文档我非常详细并且图文并茂的介绍了关于网络编程模型中完成端口的方方面面的信息,从API的用法到使用的步骤,从完成端口的实现机理到实际使用的注意事项,都有所涉及,并且为了让朋友们更直观的体会完成端口 ...

  5. android 自动化 微信,C#手把手教你玩微信自动化

    原标题:C#手把手教你玩微信自动化 转自:初久的私房菜 cnblogs.com/MrChuJiu/p/13959383.html 介绍 本文主要讲的内容是 C# + Appium 自动化玩微信. Ap ...

  6. 手把手教你玩转SOCKET模型之重叠I/O篇(下)

    http://blog.csdn.net/PiggyXP/archive/2004/09/23/114908.aspx 四.     实现重叠模型的步骤 作了这么多的准备工作,费了这么多的笔墨,我们终 ...

  7. 手把手教你玩转SOCKET模型:完成例程(Completion Routine)篇

    本文假设你已经对重叠I/O的机制已有了解,否则请先参考本系列的前一篇<手把手教你玩转SOCKET模型之重叠I/O篇>: 目录: 1.完成例程的优点 2.完成例程的基本原理 3.关于完成例程 ...

  8. 手把手教你玩转网络编程模型之完成例程(Completion Routine)

    前  言 记得写这个系列的上一篇文章的时候已经是四年前了,准确的说是四年半以前了,翻开我尘封已久的IO模型里面的"完成例程"的实现方式及示例代码. 本文凝聚着笔者心血,如要转载,请 ...

  9. 手把手教你玩转ARP包(一)

    原文地址:http://blog.csdn.net/piggyxp/article/details/19606 前   言 首先要感谢网络安全资深专家卢湖川博士以及VC网络版的limin朋友提供的资料 ...

最新文章

  1. Jenkins的环境部署
  2. Android 开发, Android 安全 精品资料收集 (持续更新...)
  3. SAP Cloud Platform integration上创建一个最简单的iFlow
  4. 使用STAD研究product搜索和保存的性能
  5. ctrl z撤销后如何恢复_回收站清空后数据如何恢复?
  6. python requests verify=True vs verity=Flase
  7. 插槽的使用_思维导图
  8. Web存储—本地存储Cookie
  9. 解决tomcat控制台以及localhost Log和Catalina Log乱码问题
  10. 选股方法-陶博士-月线反方法的思路来源
  11. .Net资源文件全球化
  12. win8更改计算机锁屏时间,win8如何设置电脑屏保时间设置方法
  13. 你知道门禁卡的原理吗?手机模拟门禁卡研究
  14. ali p3c规则扩展-集成sonar
  15. IntelliJ IDEA现有项目连接SVN(2)
  16. 2021年茶艺师(初级)考试题及茶艺师(初级)新版试题
  17. 一文分析 快应用技术架构及业务前景
  18. 【李佳辉_周报_2022.10.23】
  19. 微信小程序上传图片裁剪工具image-cropper使用
  20. Linux常用 bash命令

热门文章

  1. 22、js - 处理异常
  2. cf虚拟服务器设置方法,cf客户端 服务器 连接
  3. 一条命令解决99%的电脑问题
  4. Thingsboard 编译前端 ui-ngx 踩坑记录
  5. Tic-tac-toe(翻译)
  6. 2018年10月7日英语学习
  7. SQL 视图,存储过程锁住了解锁的方法——最简单的方法
  8. IOS 初级开发入门教程(四)基础控件使用小练习
  9. 龙蜥社区助力中国联通完成核心业务CentOS试点替换
  10. 零基础搭建智能垃圾分类小程序(可做毕设,可加入流量主,赚取零花钱)