【新春特辑】基于文心大模型的新年春联生成器

★★★ 本文源自AI Studio社区精品项目,【点击此处】查看更多精品内容 >>>


【新春特辑】基于文心大模型的新年春联生成器

一、技术路线

  1. 首先,使用文心大模型的对联功能,通过上联生成下联;
  2. 其次,使用图片处理方式,将生成的对联与背景合并在一起;
  3. 最后,生成可打印的对联图片文件,预览效果如下所示:

二、代码实现

!pip install freetype-py
!pip install wenxin-api
import wenxin_api # 可以通过"pip install wenxin-api"命令安装
from wenxin_api.tasks.couplet import Couplet
wenxin_api.ak = ""
wenxin_api.sk = ""
input_dict = {
    "text": "上联:金虎辞旧岁\n下联:",
    "seq_len": 32,
    "topp": 0.8,
    "penalty_score": 1.15,
    "min_dec_len": 1,
    "is_unidirectional": 0,
    "task_prompt": "couplet"
}
rst_text = Couplet.create(**input_dict)
print(rst_text)
import os
import freetype
import numpy as np
from PIL import Image

FONT_FILE = 'SIMYOU.TTF'
BG_FILE = 'bg.jpg'

def text2image(word, font_file, size=128, color=(218, 179, 0)):
    """使用指定字库将单个汉字转为图像

    word        - 单个汉字字符串
    font_file   - 矢量字库文件名
    size        - 字号,默认128
    color       - 颜色,默认黑色
    """

    face = freetype.Face(font_file)
    face.set_char_size(size * size)

    face.load_char(word)
    btm_obj = face.glyph.bitmap
    w, h = btm_obj.width, btm_obj.rows
    pixels = np.array(btm_obj.buffer, dtype=np.uint8).reshape(h, w)

    dx = int(face.glyph.metrics.horiBearingX / 64)
    if dx > 0:
        patch = np.zeros((pixels.shape[0], dx), dtype=np.uint8)
        pixels = np.hstack((patch, pixels))

    r = np.ones(pixels.shape) * color[0]
    g = np.ones(pixels.shape) * color[1]
    b = np.ones(pixels.shape) * color[2]
    im = np.dstack((r, g, b, pixels)).astype(np.uint8)

    return Image.fromarray(im)

# img = text2image('国', font_file=FONT_FILE, size=128, color=(218, 179, 0))

def write_couplets(text, horv='V', quality='L', color =(0,0,0) ,out_file=None):
    """写春联

    text        - 春联字符串
    bg          - 背景图片路径
    horv        - H-横排,V-竖排
    quality     - 单字分辨率,H-640像素,L-320像素
    out_file    - 输出文件名
    """

    size, tsize = (320, 128) if quality == 'L' else (640, 180)
    ow, oh = (size, size * len(text)) if horv == 'V' else (size * len(text), size)
    im_out = Image.new('RGBA', (ow, oh), '#f0f0f0')

    im_bg = Image.open('bg.jpg')
    print()

    font_file = 'SIMYOU.TTF'

    # 生成图片
    for i, w in enumerate(text):
        im_w = text2image(w, font_file, size=tsize, color=color)
        w, h = im_w.size
        dw, dh = (size - w) // 2, (size - h) // 2

        if horv == 'V':
            im_out.paste(im_bg, (0, i * size))
            im_out.paste(im_w, (dw, i * size + dh), mask=im_w)
        else:

            im_out.paste(im_bg, (i * size, 0))
            im_out.paste(im_w, (i * size + dw, dh), mask=im_w)

    return im_out

shanglian = "金虎辞旧岁"
xialian = rst_text['result']
hengpi = '辞旧迎新'

shanglian_img = write_couplets(shanglian, horv='V', quality='L', color =(0,0,0) ,out_file=None)
shanglian_img.save('shanglian.png')
xialian_img = write_couplets(xialian, horv='V', quality='L', color =(0,0,0) ,out_file=None)
xialian_img.save('xialian.png')
hengpi_img = write_couplets(hengpi, horv='H', quality='L', color =(0,0,0) ,out_file=None)
hengpi_img.save('hengpi.png')

三、结果展示



总结

本次项目主要使用了一些基础的图像处理方法。首先,将汉字的字符串转换为图片,其次将汉字图片贴在我们的背景图上,通过垂直拼接与水平拼接分别生成对联与横批。最后,祝大家新春快乐。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值