带文字海报流程自动化

上一篇文章:

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

项目代码整理在:

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.mzph.cn/bicheng/6553.shtml

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

相关文章

【无标题】vue webrtc 播放rtsp视频流

最近有个小活其中有涉及播放大华及海康摄像头视频流的需求,经调查发现可以使用webrtc来实现相关功能,记录一下,步骤如下: 1、下载webrtc :Releases mpromonet/webrtc-streamer GitHub winows下下载&…

华为机考入门python3--(22)牛客22- 汽水瓶

分类:数字 知识点: 整除符号// 5//3 1 取余符号% 5%3 2 题目来自【牛客】 import sysdef calc_soda_bottles(n):if n 0: # 结束输入,不进行处理returnelse:# 循环进行汽水换算total_drunk 0 # 记录总共喝了多少瓶汽水while…

永不过期的SSL/TLS证书解决方案

前提: cloudflare API 密钥宝塔面板安装了nginx 如果你不使用宝塔面板,可以参照脚本修改 生成证书脚本 curl -sS -O https://raw.githubusercontent.com/woniu336/open_shell/main/ssl_pro.sh && chmod x ssl_pro.sh && ./ssl_pro.sh使用方法: https://blo…

城市反无人机技术

一、城市环境下反无人机难点 1) 城市建筑密级遮挡严重 城市中建筑物密集,通视条件差。设备若部署于地面,受限于建筑物遮挡,探测和处置距离有限。因此,通常采用将设备部署于建筑物楼顶的方式应对无人机威胁。此种方式对于飞行在楼…

Windows系统如何切换32位和64位Python

1.简介 由于需要编译32位的程序,默认已经安装了Anaconda和Pycharm,虚拟环境使用的是64位Python,现在需要使用32位Python开发32位的软件程序。 2.操作过程 2.1查询自己的conda是32位还是64位 打开 Anaconda 命令提示符或任何命令行界面&am…

golang使用DoH解析域名

按照RFC 8484 规范,DoH服务器支持GET或POST两种方式。 当使用GET方法,唯一的变量"dns"被赋值为base64url编码的DNS请求内容。 These examples use a DoH service with a URI Template of"https://dnsserver.example.net/dns-query{?dns}…

USP技术提升大语言模型的零样本学习能力

大语言模型(LLMs)在零样本和少样本学习能力上取得了显著进展,这通常通过上下文学习(in-context learning, ICL)和提示(prompting)来实现。然而,零样本性能通常较弱,因为缺…

【数据结构(邓俊辉)学习笔记】列表03——有序列表

文章目录 0. 概述1. 唯一化2. 查找2.1 实现2.2 顺序查找2.3 复杂度 0. 概述 介绍下有序列表。 若列表中所有节点的逻辑次序与其大小次序完全一致,则称作有序列表(sorted list)。为保证节点之间可以定义次序,依然假定元素类型T直接…

WebAssembly 入门教程 c++、python编译wasm

WebAssembly 入门 了解 wasm 使用场景,复杂对象传递和经验法则。 简介 WebAssembly 是一种新的编码方式,可以在现代的网络浏览器中运行。它是一种低级的类汇编语言,具有紧凑的二进制格式,可以接近原生的性能运行,并…

AI大模型探索之路-训练篇13:大语言模型Transformer库-Evaluate组件实践

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…

【算法小白周赛1A】分析 - 题解与代码

题目链接:https://www.starrycoding.com/problem/155 题目描述 小可可最近在学数学运算!他希望考考你,给你两个整数 A , B A,B A,B,询问 A B A\times B AB 是否是偶数。 注意,可能存在前导 0 0 0,比如…

接口测试工具-postman介绍

一、介绍 Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。 作用:常用于进行接口测试。 它可以模拟浏览器发起任何形式的HTTP请求

OpenCV | 入门

OpenCV | 入门 安装 参考教程 基础知识 V G A 640 480 VGA 640 \times 480 VGA640480 H D 1280 720 HD 1280 \times 720 HD1280720 F H D 1920 1080 FHD 1920 \times 1080 FHD19201080 4 K 3840 2160 4K 3840 \times 2160 4K38402160 这些都表示了固定的像素…

大语言模型教程与实践(开源)

1.简介 大语言模型(Large Language Models, LLMs)的兴起确实始于OpenAI在2018年发布的GPT(Generative Pre-trained Transformer),这一开创性工作引领了自然语言处理领域的新纪元。随后,2022年底ChatGPT的横…

课程表 - LeetCode 热题 53

大家好!我是曾续缘💘 今天是《LeetCode 热题 100》系列 发车第 53 天 图论第 3 题 ❤️点赞 👍 收藏 ⭐再看,养成习惯 课程表 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需…

oneapi:强大而易用的OpenAI接口管理和分发系统 大模型 通用接口 ollama

使用One-api代理我所有的各类接口渠道,包括gpt-3.5-trubo、gpt-4等openAI官方模型,azure提供的模型,集成联网知识库等功能的gpt4模型,以及国内模型的一些模型。同时支持openai图像生成接口。 1. 准备工作 创建应用目录,例如在/share/Container下创建文件夹oneapi在oneapi…

情绪自留地:是自我世界,不被他人左右

情绪,是我们内心世界的反映,它既能够体现我们对外界事物的态度,也是我们自我认知的重要部分。在现代社会,人们越来越重视情绪管理,因为良好的情绪状态对于个人的心理健康和社交关系都有着不可忽视的影响。本文将探讨如…

代码随想录算法训练营DAY40\DAY41|C++动态规划Part.3|343.整数拆分、96.不同的二叉搜索树

DAY40休息日,本篇为DAY41的内容 文章目录 343.整数拆分思路dp含义递推公式(难点)初始化遍历顺序打印 CPP代码数学方法归纳证明法 96.不同的二叉搜索树思路dp含义递推公式初始化遍历顺序打印 CPP代码题目总结 343.整数拆分 力扣题目链接 文章…

Windows系统下安装Mosquitto的步骤(7)

接前一篇文章:Windows系统下安装Mosquitto的步骤(6) 本文内容参考: Windows下搭建MQTT服务器_mqtt服务器软件-CSDN博客 Enable SSL/TLS Connection | EMQX Enterprise Docs 特此致谢! 上一回讲解了使用MQTTX图形界面…

C/C++开发,opencv-ml库学习,K近邻(KNN)应用

目录 一、k近邻算法 1.1 算法简介 1.2 opencv-k近邻算法 二、cv::ml::KNearest应用 2.1 数据集样本准备 2.2 KNearest应用 2.3 程序编译 2.4 main.cpp全代码 一、k近邻算法 1.1 算法简介 K近邻算法(K-Nearest Neighbor,KNN)基本原理是…