用大模型生成带文字的海报

本文代码讲整合在:
GitHub - liangwq/Chatglm_lora_multi-gpu: chatglm多gpu用deepspeed和
这篇文章介绍如何利用VLM+diffusion模型来搭建一条文本生成海报的链路。搭建这条链路有两个应用:1.实际的业务中需要批量生产文字+图海报可以用,2.可以用来造训练数据。
首先介绍下这篇文章的整体框架安排:
1.生图模块
2.字排版模块
3.图文混合模块
4.图审核验证模块
image.png

生成模块

部署文本生成图片模型pixart-sigma:

1.安装环境和下载源码

conda create -n pixart python==3.9.0
conda activate pixart
conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c pytorch -c nvidiagit clone https://github.com/PixArt-alpha/PixArt-sigma.git
cd PixArt-sigma
pip install -r requirements.txt

2.下载模型

# SDXL-VAE, T5 checkpoints
git lfs install
git clone https://huggingface.co/PixArt-alpha/pixart_sigma_sdxlvae_T5_diffusers output/pretrained_models/pixart_sigma_sdxlvae_T5_diffusers# PixArt-Sigma checkpoints
python tools/download.py # environment eg. HF_ENDPOINT=https://hf-mirror.com can use for HuggingFace mirror

3.启动模型后台

python scripts/interface.py --model_path output/pretrained_models/PixArt-Sigma-XL-2-2k-MS.pth --image_size 2048 --port 6006

4.gradio_cleint前端API方式生成图片

from gradio_client import Client#建立后台服务器链接
client = Client("http://0.0.0.0:6006")
#查看请求参数
client.view_api(return_format="dict")#传参请求生成图
out_data = client.predict("An adorable girl with curly hair, innocently laughing with a big smile, looking very happy Poster style --ar 9:16","dpm-solver",14,4.5,0,True)
#生成图片可视化
import matplotlib.pyplot as plt
from PIL import Image# 图片地址
image_path = out_data[0]# 打开并显示图片
img = Image.open(image_path)
plt.imshow(img)
plt.axis('off')  # 关闭坐标轴
plt.show()

image.png
使用Gradio客户端来与一个后台服务器建立连接,并通过传递参数请求生成一张图片。首先建立了与服务器的连接,然后查看了请求参数的格式。接着使用client.predict方法传递参数来生成一张图片,参数包括描述图片内容的文本、模型名称、以及其他参数。生成的图片保存在out_data中,然后通过Matplotlib和PIL库来打开和显示这张图片。
具体步骤包括:

  1. 建立与服务器的连接。
  2. 查看请求参数的格式。
  3. 使用client.predict方法传递参数请求生成一张图片。
  4. 从生成的结果中获取图片地址。
  5. 使用PIL库打开并显示生成的图片。

最后一段代码使用Matplotlib显示了生成的图片,关闭了坐标轴以便更清晰地展示图片内容。

文字排版模块

def auto_text_layout(inputext=[], x=0,y=0,row_spacing=100, col_spacing=80, vertical=True, font="SimSun", color=(255, 255, 255, 0)):if vertical:output=[] y0=yfor text in inputext:for char in list(text):output.append({"content": char,"position": (x, y),"font": font,"color": color})y +=   col_spacingy= y0x += row_spacingelse:output=[]x0 = xfor text in inputext:for char in list(text):output.append({"content": char,"position": (x, y),"font": font,"color": color})x += row_spacingx=x0y += col_spacingreturn output
text_lines = ['    悠闲的夏日,','   不在乎目的地,', '在乎的是沿途的风景', ' 以及看风景的心情.'] 
auto_text=auto_text_layout(inputext=text_lines, x=510,y=85,row_spacing=48, col_spacing=63, vertical=False, font="SimSun", color=(255, 255, 255, 0))
print(auto_text)

这段代码定义了一个函数auto_text_layout,用于根据输入的文本内容和参数生成一个文本布局的列表。函数的参数包括输入文本列表inputext,起始坐标xy,行间距row_spacing,列间距col_spacing,布局方向vertical,字体font和颜色color
函数根据vertical参数的取值,决定文本是垂直排列还是水平排列。如果是垂直排列,函数会按列逐个字符添加到输出列表中;如果是水平排列,函数会按行逐个字符添加到输出列表中。每个字符的信息包括内容、位置、字体和颜色。
在代码中,定义了一个包含多行文本的列表text_lines,然后调用auto_text_layout函数生成文本布局。生成的文本布局存储在auto_text变量中,并通过print(auto_text)打印出来。
这段代码是一个用于生成文本布局的函数,并展示了如何使用该函数来布局指定的文本内容。

合图渲染模块

import os
import json
from PIL import Image, ImageDraw, ImageFont
import cv2# 设置海报模板路径、文字内容、输出目录等参数
template_path = 'boy_autumn.png'  # 海报模板路径
text_lines = [{'content': '悠闲的夏日', 'position': (300, 150), 'color': (0, 0, 0, 0)},{'content': ' 悠闲的夏日\n不在乎目的地,在乎的是沿途的风景,以及看风景的心情。', 'position': (300, 200), 'color': (0, 255, 0)},{'content': '以及看风景的心情。', 'position': (300, 250), 'color': (0, 0, 255)}
]  # 文字内容、位置和颜色的列表text_lines = [{'content': '悠闲的夏日,', 'position': (300, 150), 'color': (255, 255, 255, 0)},  # 淡青色{'content': '不在乎目的地,', 'position': (310, 210), 'color': (126, 200, 190,1)},  # 淡绿色{'content': '在乎的是沿途的风景', 'position': (330, 270), 'color': (16, 175, 220,1)},  # 淡绿色{'content': '以及看风景的心情。', 'position': (360, 330), 'color': (13, 180, 180,1)}  # 淡黄色
]   # 文字内容、位置和颜色的列表
text_lines = auto_text
output_dir = 'output_posters'  # 输出目录
font_path = '/Library/Fonts/Alibaba-PuHuiTi-Heavy.otf'  # 字体文件路径
font_size = 42  # 字体大小
text_angle = 290  # 文字旋转角度(竖排)# 确保输出目录存在
if not os.path.exists(output_dir):os.makedirs(output_dir)# 加载模板图片
template_image = Image.open(template_path)# 创建一个可以在Pillow中使用的字体对象
font = ImageFont.truetype(font_path, font_size)# 创建一个可以在Pillow中使用的绘图对象
draw = ImageDraw.Draw(template_image)# 在指定位置添加文字
for line in text_lines:draw.text(line['position'], line['content'], font=font, fill=line['color'], rotation=text_angle)# 保存处理后的图片
output_path = os.path.join(output_dir, 'poster_with_multiple_lines.jpg')
template_image.save(output_path)# 如果需要进行图层融合和模糊处理,可以使用OpenCV
# 读取处理后的图片
image = cv2.imread(output_path)# 这里可以添加OpenCV的图层融合和模糊处理代码
# 例如,使用高斯模糊
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)# 保存模糊处理后的图片
cv2.imwrite(os.path.join(output_dir, 'blurred_poster.jpg'), blurred_image)print("海报生成和处理完成。")

这段代码实现了往一张图片中添加文字渲染,并在需要时进行图层融合和模糊处理。以下是代码的主要步骤和解释:

  1. 设置参数
  • template_path: 海报模板的路径。
  • text_lines: 包含要添加到海报上的文字内容、位置和颜色的列表。
  • output_dir: 输出目录。
  • font_path: 字体文件的路径。
  • font_size: 字体大小。
  • text_angle: 文字旋转角度(竖排)。
  1. 加载模板图片
    使用PIL库中的Image.open方法加载海报模板图片。
  2. 创建字体对象
    使用指定的字体文件路径和字体大小创建一个可以在Pillow中使用的字体对象。
  3. 创建绘图对象
    使用ImageDraw.Draw方法创建一个可以在Pillow中使用的绘图对象。
  4. 添加文字到图片
    遍历text_lines列表,根据每个字体的位置、内容和颜色,使用draw.text方法将文字添加到模板图片上。
  5. 保存处理后的图片
    使用template_image.save方法将处理后的图片保存到指定的输出路径。
  6. 图层融合和模糊处理(使用OpenCV):
  • 读取处理后的图片。
  • 进行图层融合和模糊处理,例如使用高斯模糊。
  • 保存模糊处理后的图片到输出目录。
  1. 最后,打印出"海报生成和处理完成。"

将指定的文字内容添加到海报模板图片中,并在需要时进行模糊处理。

审核模块

from dashscope import MultiModalConversation
import dashscope
dashscope.api_key ='把你申请的qwenvl api-key放这边'
def call_with_local_file():"""Sample of use local file.linux&mac file schema: file:///home/images/test.pngwindows file schema: file://D:/images/abc.png"""local_file_path1 = 'file:///Users/**/output_posters/poster_with_multiple_lines.jpg'local_file_path2 = 'file://The_local_absolute_file_path2'messages = [{'role': 'system','content': [{'text': 'You are a helpful assistant.'}]}, {'role':'user','content': [{'image': local_file_path1},{'text': '请描述这张图,这张图中文字放置的位置合理吗?符合审美需求吗?\1.如果合理请回复是,并给出合理原因\2.如果不合理给出理由和建议\3.如果有建议请给出文字合适放置的坐标位置\4.如果不合理给出字体大小建议\5.如果不合理给出字体颜色建议\6.json格式输出回答结果'},]}]response = MultiModalConversation.call(model=MultiModalConversation.Models.qwen_vl_chat_v1, messages=messages)print(response)if __name__ == '__main__':call_with_local_file()

这份代码实现了使用 DashScope 的 MultiModalConversation API 对一张本地图片进行审美评估。

  1. 导入必要的库:
  • dashscope: 用于调用 DashScope 的 MultiModalConversation API。
  • MultiModalConversation: 用于创建和调用多模态对话。
  1. 设置 API 密钥:
    将你申请的 DashScope API 密钥设置为 dashscope.api_key 的值。
  2. 定义 **call_with_local_file()** 函数:
  • 这个函数演示了如何使用本地文件作为输入。
  • 定义了两个本地文件路径 local_file_path1local_file_path2
  • 构建了一个消息列表,其中包含一个系统消息和一个用户消息。
    • 系统消息指定了助手的角色为"You are a helpful assistant."。
    • 用户消息包含了两个部分:
      1. 一个图像,使用 local_file_path1 指定的本地文件路径。
      2. 一个文本,包含了对图像的评估要求。
  1. 调用 MultiModalConversation.call() 方法:
  • 使用 MultiModalConversation.call() 方法调用 DashScope 的 MultiModalConversation API。
  • 传入了 MultiModalConversation.Models.qwen_vl_chat_v1 作为模型参数,这是一个预训练的多模态对话模型。
  • 将前面构建的消息列表作为 messages 参数传入。
  1. 打印响应结果:
    将 API 调用的响应结果打印出来。

这段代码的主要功能是:

  1. 加载一张本地图片作为输入。
  2. 构建一个包含图像和文本的多模态消息。
  3. 使用 DashScope 的 MultiModalConversation API 对图像进行审美评估。
  4. 打印出 API 的响应结果。

这个代码可以用于对图像的文字布局、字体大小和颜色等进行自动化评估和建议。通过调用 DashScope 的多模态对话 API,可以获得专业的审美意见和优化建议。

小结:

上面介绍了一条使用diffusion+VLM+code方式实现的海报生成链路。链路已经具备了一键生成和图片审核的能力,但是现在只给到了一种图层合图的实现。
1.有兴趣的朋友可以试试如何在现有代码基础上增加controlnet做字图融合生成。
2.同时可以考虑下如何让LLM模型来自动根据用户输入的简单需求来生成自动生成文本描述生成图,让这个工作流更智能强大。
3.同时还可以考虑如何让大模型对已经又的参考图做描述,批量生成更多类似风格图
大家可以先思考,后面我也会给出我的实现方案。

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

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

相关文章

生成式人工智能(AIGC)教学解决方案

一、前言 近年来,伴随计算能力跃升和数据量指数级增长,以多模态巨型模型为典型代表的生成式AI技术,在全球范围内引起了广泛关注与热烈追捧。在教育、医疗、法律等众多专业领域,生成式人工智能技术的影响力日益凸显,尤…

C++11 设计模式5. 原型模式

什么是原型模式? 原型模式⼀种创建型设计模式,该模式的核⼼思想是基于现有的对象创建新的对象,⽽不是从头开始创建。在原型模式中,通常有⼀个原型对象,它被⽤作创建新对象的模板。新对象通过复制原型对象的属性和状态来…

24.什么是跨域?解决方案有哪些?

为什么会出现跨域问题 存在浏览器同源策略,所以才会有跨域问题。那么浏览器是出于何种原因会有跨域的限制呢。其实不难想到,跨域限制主要的目的就是为了用户的上网安全。 同源策略导致的跨域是浏览器单方面拒绝响应数据,服务器端是处理完毕…

opencv基础篇 ——(十)非真实感渲染

非真实感渲染(Non-Photorealistic Rendering, NPR)是指通过一系列图像处理技术,将真实感图像转换为具有特定艺术风格或视觉效果的图像,模拟绘画、素描、卡通等非现实主义表现手法。OpenCV 提供了一些内置函数来实现非真实感渲染&a…

2024最新的,免费的 ChatGPT 网站AI(八个)

ChatGPT是美国人工智能研究实验室OpenAI在2022年11月推出的一款人工智能技术驱动的语言模型应用。它基于GPT-3.5架构(后续还有GPT-4架构的升级版)构建,拥有强大的自然语言处理能力和上下文理解能力,能够参与多轮对话,为…

Python_GUI工具包 PyQt 与 Pyside6的介绍

Python_GUI工具包 PyQt 与 Pyside6的介绍 一、简介 在Python的GUI(图形用户界面)开发领域,PyQt和PySide6是两个非常重要的工具包。它们都基于Qt库,为Python开发者提供了丰富的GUI组件和强大的功能。当然Python也有一些其他的GU…

Halcon 检测物体定位点

文章目录 get_domain 返回所有输入图像的定义域作为一个区域add_channels 给区域增加灰度值find_shape_model 发现匹配模板find_shape_models 发现最佳模板示例 get_domain 返回所有输入图像的定义域作为一个区域 Halcon 中的区域 get_domain(Image : Domain : : ) Image : …

SpringBoot之自定义注解参数校验

SpringBoot之自定义注解参数校验 为什么要自定义注解 我这里先引入一个例子,就比如我现在要写文章,文章也许写完正要发布,也可以是还没写完正要存草稿,前端往后端发送数据,如果前端的state不是草稿或者已发布状态&…

大模型应用开发极简入门

简单的归纳一下书的前序部分 目录 LLM(Large Language Model)的应用技术栈通常包括以下几个方面: 深度学习框架: 数据预处理工具: 训练资源: 模型优化和调参工具: 部署和应用集成&#xf…

智慧图书管理|基于SSM+vue的网上服装商城系统(源码+数据库+文档)

智慧图书管理目录 基于SSMvue的网上服装商城系统 一、前言 二、系统设计 三、系统功能设计 1.1 服装列表 1.2 公告信息管理 1.3 公告类型管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍&#xff1…

linus下Anaconda创建虚拟环境pytorch

一、虚拟环境 1.创建 输入下面命令 conda create -n env_name python3.8 输入y 2.激活环境 输入 conda activate env_name 二、一些常用的命令 在Linux的控制平台 切换到当前的文件夹 cd /根目录/次目录 查看conda目录 conda list 查看pip目录 pip list查看历史命…

Python 爬虫如何配置代理 IP (Py 采集)

在Python中配置代理IP,可以通过设置requests库的proxies参数来实现。以下是一个示例: import requests# 则立可以获取稳定代理Ip:https://www.kuaidaili.com/?refrg3jlsko0ymg # 推荐使用私密动态 IP proxies {"http": "ht…

芒果超媒财报解读:科技加持下,如何蜕变为内容“全科生”?

在降本增效和内容为王的基调下,国内头部长视频平台正在拥抱增长。 爱奇艺率先公布2023年财务数据,实现归母净利润19.25亿元,与2022年亏损1.36亿元相比,扭亏为盈且增幅显著。 而近日,随着新一季《浪姐》播出&#xff…

JAVA面试题分享---多线程与线程池

多线程 什么是线程?线程和进程的区别?(了解) 线程:是进程的一个实体,是 cpu 调度和分派的基本单位,是比进程更小的 可以独立运行的基本单位。 进程:具有一定独立功能的程序关于某个数据集合上的一次运…

【漏洞复现】IP-guard WebServer 权限绕过漏洞

0x01 产品简介 IP-guard WebServer 是 IP-guard 网络安全管理系统的一部分,用于提供 Web 界面以进行用户权限管理、监控和审计。 0x02 漏洞概述 IP-guard WebServer的权限验证机制中存在设计缺陷,未授权的攻击者能够规避安全验证,通过后端接口执行文件的任意读取和删除操…

DaVinci Resolve Studio 19(达芬奇19调色剪辑)win/mac激活版

DaVinci Resolve Studio是一个结合专业的8k 编辑,颜色混合,视觉效果和音频后期制作的软件。只需点击一下,你就可以立即在编辑、混音、特效和音频流之间切换。此外,达芬奇解决(达芬奇)是一个多用户协作的解决方案,使编辑…

一单利润100+,不起眼的小生意,却能闷声发财!

今天,我想向大家介绍一个看似不太热门,但实际上需求很高的项目——酒店代订。这个项目其实很早以前就已经有人开始尝试了,但可能并没有被大众所熟知。简而言之,酒店代订就是帮助他人通过我们来预订他们想要入住的酒店。 当客户将…

管理能力学习笔记八:Will-Skill矩阵“盘“团队

如何把握带教中的“度”,才能在把事情做好的基础上,又能使员工获得成长呢? 需要做到 合理授权 & 适当辅导 如何做到? 通过使用 意愿-技能矩阵(Will-Skill Matrix) 辨别不同带教方法的适用情形,"盘"…

ElasticSearch总结1

目录 一、ElasticSearch介绍: 举例一: 举例二: 举例三: 二、ELK技术栈 三、Elasticsearch 的基本概念: 四、正向索引和倒排索引: 正向索引: 倒排索引: 五、Mysql和Elastics…

新版本Qt Creator安装配置

新版本Qt Creator安装配置 文章目录 新版本Qt Creator安装配置1、前言2、环境3、安装配置4、总结 更多精彩内容👉个人内容分类汇总 👈👉Qt开发经验 👈 1、前言 Qt是一个跨平台的C应用程序开发框架,而Qt Creator是专为Q…