那是一個陽光明媚的午后,作為渾水摸魚大師的我無意中一撇,突然發現了這么一篇文章:
用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 paddlehub
pip install pillow
功能分析
對聯生成
得益于飛漿為我們提供的PaddleHub我們可以快速地實作我們需要的功能,于是我們可以這樣封裝一下我們的代碼,
這個真沒啥好說的,
import paddlehub as hub
class 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):
# 生成情話,默認回傳五個情話,這個傳入list
results = 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

咱們選一個好看的,

來我們先來看看這個生成的效果

我們再給他美化一下,同時我們需要讓我們的字豎起來,

然后我們再繪制一些點,讓它布靈布靈,

class 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 = 10
for word in words:
dr.text((10, step), word, font=font, fill="black")
step +=10+fontSize
im.save(output_path)
if (show):
im.show()

呼叫
之后就是咱們呼叫啦,
from utils import ImgUtils,HubUtils
def 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()
效果



貌似好像翻車了

總結
這次也是我第一次寫科普型別(難度)的文章,如有不足多多指教(開個玩笑,本次的內容是很簡單的,只是調調訓練好的模型罷了)
另外提前祝大家新年快樂~
目前python發展前景最好,下面有一份全套的 Python 學習資料,給那些想學習 Python 的小伙伴們一點幫助!
一、Python所有方向的學習路線
Python所有方向路線就是把Python常用的技術點做整理,形成各個領域的知識點匯總,它的用處就在于,你可以按照上面的知識點去找對應的學習資源,保證自己學得較為全面,

二、學習軟體
工欲善其事必先利其器,學習Python常用的開發軟體都在這里了,給大家節省了很多時間,

三、入門學習視頻
我們在看視頻學習的時候,不能光動眼動腦不動手,比較科學的學習方法是在理解之后運用它們,這時候練手專案就很適合了,

四、實戰案例
光學理論是沒用的,要學會跟著一起敲,要動手實操,才能將自己的所學運用到實際當中去,這時候可以搞點實戰案例來學習,

這份完整版的Python全套學習資料已經上傳CSDN,朋友們如果需要可以微信掃描下方CSDN官方認證二維碼免費領取【保證100%免費】,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/419106.html
標籤:AI
上一篇:pandas 進階
下一篇:Python深度學習:計算機視覺與深度學習的關系(包含Anaconda安裝與使用,和Pycharm激活虛擬環境教程)
