带文字海报流程自动化

2024-05-05 09:52
文章标签 文字 流程 自动化 海报

本文主要是介绍带文字海报流程自动化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一篇文章:

带文字海报流程自动化 - 知乎

项目代码整理在:

https://github.com/liangwq/Chatglm_lora_multi-gpu​github.com/liangwq/Chatglm_lora_multi-gpu

根据用户的输入生成图片prompt模块代码封装:

from openai import OpenAI import json
def json_parse(image_prompt):image_prompt = image_prompt.replace("```\n","")image_prompt = image_prompt.replace("\n```","")# 您提供的字符串data_str =image_prompt #completion.choices[0].message.content# 将字符串转换为JSON对象try:data_json = json.loads(data_str)return data_jsonexcept json.JSONDecodeError as e:print("字符串不是有效的JSON格式:", e)def gen_text_to_image_prompt(user_input): client = OpenAI(api_key="你的阶跃APIkey", base_url="https://api.stepfun.com/v1")completion = client.chat.completions.create(model="step-1-200k",messages=[{"role": "system","content": "你是由阶跃星辰提供的带文字海报生成助手,你擅长中文,英文,以及多种其他语言的对话。在保证用户数据安全的前提下,你能对用户的问题和请求,作出快速和精准的回答。同时,你的回答和建议应该拒绝黄赌毒,暴力恐怖主义的内容",},{"role": "user", "content": "你是带文本海报生成智能助理. \1.根据用户输入内容生成做图需要的描述prompt \2.描述图片详细具体内容 \3.描述图片风格、颜色分布、光影效果、纹理、材质\4.给出图片具体尺寸、比例 \5.适合的配文,按行分句放到list里\6.输出英文结果\7.json格式输出生成结果:{\\"prompt\":\"把上面文本生成图描述+具体信息描述+风格颜色光影纹理材质描述汇总到prompt\",\\"text\":\"适合用户输入场景的配文\",\\"ar\":\"图片长:宽比,数字:数字\",\\"hw\":\"图长宽具体尺寸\",\\"X\":\"文字所在坐标位置值X\,\\"Y\":\"文字所在坐标位置值Y\,\\"is_vertical\":\"文字排版是否竖排\"}"},{"role": "user", "content":user_input},],)out_put_chinese = completion.choices[0].message.contentcompletion = client.chat.completions.create(model="step-1-200k",messages=[{"role": "system","content": "你是由阶跃星辰提供的带文字海报生成助手,你擅长中文,英文,以及多种其他语言的对话。在保证用户数据安全的前提下,你能对用户的问题和请求,作出快速和精准的回答。同时,你的回答和建议应该拒绝黄赌毒,暴力恐怖主义的内容",},{"role": "user", "content": out_put_chinese +"\n把上面中文输出翻译成英文,无关信息不要过多输出" },],)out_put = completion.choices[0].message.contentprint(out_put)out_put = json_parse(out_put)return out_put

图片生成模块封装,根据上面生成的prompt调用图片生成后台服务生成图片。

from gradio_client import Client
def image_generation(image_prompt,ip_url):client = Client(ip_url)image_prompt = image_prompt["prompt"] + " --ar " + image_prompt["ar"]out_data = client.predict(image_prompt,"dpm-solver",14,4.5,0,True)# 图片地址image_path = out_data[0]return image_path

根据用户输入生成prompt中抽取出文字排版的信息对文字排版。

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

根据生成图片,排版好的文字合成海报模块。

import os
import json
from PIL import Image, ImageDraw, ImageFont
import cv2def text_image_blender_poster(image_url,auto_text,font_path ,font_size,output_dir,out_file_name):# 设置海报模板路径、文字内容、输出目录等参数template_path = image_url  # 海报模板路径text_lines = auto_textoutput_dir = output_dir  # 输出目录font_path =  font_path # 字体文件路径font_size = font_size  # 字体大小# 确保输出目录存在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'])# 保存处理后的图片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, out_file_name), blurred_image)print("海报生成和处理完成。")

生成海报是否合格验证模块。

from dashscope import MultiModalConversation
import dashscope
dashscope.api_key ='把你申请的qwenvl api-key放这边'
def call_with_local_file(local_file_path):"""Sample of use local file.linux&mac file schema: file:///home/images/test.pngwindows file schema: file://D:/images/abc.png"""local_file_path1 = local_file_path#'file:///Users/**/output_posters/poster_with_multiple_lines.jpg'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)

把上面的模块串接成自动化流程。

#根据用户输入生成图片生成prompt
image_prompt = gen_text_to_image_prompt("5.1劳动节")#根据ptompt生成图
ip_url ="http://0.0.0.0:6006"
image_url = image_generation(image_prompt,ip_url)#文字排版
text_lines = image_prompt["text"]
vertical = False if image_prompt["is_vertical"]=='false' else True
x =  float(image_prompt["X"])
y =  float(image_prompt["Y"])
auto_text=auto_text_layout(inputext=text_lines, x=x,y=y,row_spacing=48, col_spacing=63, vertical=False, font="SimSun", color=(255, 255, 255, 0))
print(auto_text)#根据生成图片+排版文字合成海报
image_url =image_url
auto_text = auto_text
font_size = 42
output_dir = 'output_posters'
font_path="/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"
out_file_name = 'blurred_poster.jpg'
text_image_blender_poster(image_url,auto_text,font_path ,font_size,output_dir,out_file_name)#生成海报是否合格验证模块
local_file_path ='file://'+'/Users/**/output_posters/poster_with_multiple_lines.jpg'
call_with_local_file(local_file_path)

小结:

上面代码实现,根据把海报生成的各模块做了封装,并利用封装了自动化流程。让这条海报生成模块可以根据用户一键生成期待的海报,这只是一个基本流程封装,用户可以根据自己的需要调整每个模块实现,让生成海报符合自己需要。

现在流程只允许用户输入文字描述生成海报,大家如果感兴趣可以对这条链路改造。允许用户输入参考的图,生成类似的海报;允许用户给出参考图,文字创意包生成指定约束的海报...

这篇关于带文字海报流程自动化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/961417

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

如何使用Ansible实现CI/CD流水线的自动化

如何使用Ansible实现CI/CD流水线的自动化 持续集成(CI)和持续交付(CD)是现代软件开发过程中的核心实践,它们帮助团队更快地交付高质量的软件。Ansible,作为一个强大的自动化工具,可以在CI/CD流水线中发挥关键作用。本文将详细介绍如何使用Ansible实现CI/CD流水线的自动化,包括设计流水线的结构、配置管理、自动化测试、部署、以及集成Ansible与CI/CD工具(如Jen

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

火语言RPA流程组件介绍--浏览网页

🚩【组件功能】:浏览器打开指定网址或本地html文件 配置预览 配置说明 网址URL 支持T或# 默认FLOW输入项 输入需要打开的网址URL 超时时间 支持T或# 打开网页超时时间 执行后后等待时间(ms) 支持T或# 当前组件执行完成后继续等待的时间 UserAgent 支持T或# User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器

BIRT 报表的自动化测试

来源:http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-birttest/如何为 BIRT 报表编写自动化测试用例 BIRT 是一项很受欢迎的报表制作工具,但目前对其的测试还是以人工测试为主。本文介绍了如何对 BIRT 报表进行自动化测试,以及在实际项目中的一些测试实践,从而提高了测试的效率和准确性 -------

UMI复现代码运行逻辑全流程(一)——eval_real.py(尚在更新)

一、文件夹功能解析 全文件夹如下 其中,核心文件作用为: diffusion_policy:扩散策略核心文件夹,包含了众多模型及基础库 example:标定及配置文件 scripts/scripts_real:测试脚本文件,区别在于前者倾向于单体运行,后者为整体运行 scripts_slam_pipeline:orb_slam3运行全部文件 umi:核心交互文件夹,作用在于构建真

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python