带文字海报流程自动化

上一篇文章:

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

项目代码整理在:

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.rhkb.cn/news/319438.html

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

相关文章

获取淘宝商品销量数据接口

淘宝爬虫商品销量数据采集通常涉及以下几个步骤: 1、确定采集目标:需要明确要采集的商品类别、筛选条件(如天猫、价格区间)、销量和金额等数据。例如,如果您想了解“小鱼零食”的销量和金额,您需要设定好价…

【云原生系列】云计算概念与架构设计介绍

1 什么是云计算 云计算是一种基于互联网的计算模式,在这个模式下,各种计算资源(例如计算机、存储设备、网络设备、应用程序等)可以通过互联网实现共享和交付。云计算架构设计的主要目标是实现高效、可扩展、可靠、安全和经济的计算…

C++多态特性详解

目录 概念: 定义及实现: 虚函数重写的两个例外: 1.协变: 2.析构函数的重写: final关键字: override关键字: 多态是如何实现的(底层): 面试题&#xff1…

idea No versioned directories to update were found

idea如何配置svn以及svn安装时需要注意什么 下载地址:https://112-28-188-82.pd1.123pan.cn:30443/download-cdn.123pan.cn/batch-download/123-820/3ec9445a/1626635-0/3ec9445a25ba365a23fc433ce0c16f34?v5&t1714358478&s171435847804276f7d9249382ba512…

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

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

小蓝本--因式分解(习题1)讲解

这几天要备战期中,下一期可能要等暑假了...... 小升初的压力真是紧扣于头啊,为了分到一个好班,拼了! 对了,下一期可能在寒假更,见谅! 1分解因式: 公因式: 答案&#xff…

vue3--element-plus-抽屉文件上传和富文本编辑器

一、封装组件 article/components/ArticleEdit.vue <script setup> import { ref } from vue const visibleDrawer ref(false)const open (row) > {visibleDrawer.value trueconsole.log(row) }defineExpose({open }) </script><template><!-- 抽…

iptables---防火墙

防火墙介绍 防火墙的作用可以理解为是一堵墙&#xff0c;是一个门&#xff0c;用于保护服务器安全的。 防火墙可以保护服务器的安全&#xff0c;还可以定义各种流量匹配的规则。 防火墙的作用 防火墙具有对服务器很好的保护作用&#xff0c;入侵者必须穿透防火墙的安全防护…

排序算法--快速排序

前提&#xff1a; 快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据都比另外一部分的所有数据都要小&#xff0c;然后再按此方法对这两部分…

【Leetcode每日一题】 综合练习 - 全排列 II(难度⭐⭐)(71)

1. 题目解析 题目链接&#xff1a;47. 全排列 II 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 算法思路梳理 为了生成给定数组nums的全排列&#xff0c;同时避免由于重复元素导致的重复排列&#xff0c;我们可以遵…

快速上手RabbitMQ

安装RabbitMQ 首先将镜像包上传到虚拟机&#xff0c;使用命令加载镜像 docker load -i mq.tar 运行MQ容器 docker run \-e RABBITMQ_DEFAULT_USERitcast \-e RABBITMQ_DEFAULT_PASS123321 \-v mq-plugins:/plugins \--name mq \--hostname mq \-p 15672:15672 \-p 5672:5672 …

如何使用 GPT API 从 PDF 出版物导出研究图表?

原文地址&#xff1a;how-to-use-gpt-api-to-export-a-research-graph-from-pdf-publications 揭示内部结构——提取研究实体和关系 2024 年 2 月 6 日 介绍 研究图是研究对象的结构化表示&#xff0c;它捕获有关实体的信息以及研究人员、组织、出版物、资助和研究数据之间的关…

brpc profiler

cpu profiler cpu profiler | bRPC MacOS的额外配置 在MacOS下&#xff0c;gperftools中的perl pprof脚本无法将函数地址转变成函数名&#xff0c;解决办法是&#xff1a; 安装standalone pprof&#xff0c;并把下载的pprof二进制文件路径写入环境变量GOOGLE_PPROF_BINARY_PA…

Microsoft 365 for Mac(Office 365)v16.84正式激活版

office 365 for mac包括Word、Excel、PowerPoint、Outlook、OneNote、OneDrive和Teams的更新。Office提供了跨应用程序的功能&#xff0c;帮助用户在更短的时间内创建令人惊叹的内容&#xff0c;您可以在这里创作、沟通、协作并完成重要工作。 Microsoft 365 for Mac(Office 36…

1. 深度学习笔记--神经网络中常见的激活函数

1. 介绍 每个激活函数的输入都是一个数字&#xff0c;然后对其进行某种固定的数学操作。激活函数给神经元引入了非线性因素&#xff0c;如果不用激活函数的话&#xff0c;无论神经网络有多少层&#xff0c;输出都是输入的线性组合。激活函数的意义在于它能够引入非线性特性&am…

【webrtc】MessageHandler 7: 基于线程的消息处理:切换main线程向observer发出通知

以当前线程作为main线程 RemoteAudioSource 作为一个handler 仅实现一个退出清理的功能 首先on message的处理会切换到main 线程 :main_thread_其次,这里在main 线程对sink_ 做清理再次,在main 线程做出状态改变,并能通知给所有的observer 做出on changed 行为。对接mediac…

clang:在 Win10 上编译 MIDI 音乐程序(二)

先从 Microsoft C Build Tools - Visual Studio 下载 1.73GB 安装 "Microsoft C Build Tools“ 访问 Swift.org - Download Swift 找到 Windows 10&#xff1a;x86_64 下载 swift-5.10-RELEASE-windows10.exe 大约490MB 建议安装在 D:\Swift\ &#xff0c;安装后大约占…

《金融研究》:普惠金融改革试验区DID工具变量数据(2012-2023年)

数据简介&#xff1a;本数据集包括普惠金融改革试验区和普惠金融服务乡村振兴改革试验区两类。 其中&#xff0c;河南兰考、浙江宁波、福建龙岩和宁德、江西赣州和吉安、陕西铜川五省七地为普惠金融改革试验区。山东临沂、浙江丽水、四川成都三地设立的是普惠金融服务乡村振兴…

手撸Mybatis(二)—— 配置项的获取

本专栏的源码&#xff1a;https://gitee.com/dhi-chen-xiaoyang/yang-mybatis。 配置项解析 在mybatis中&#xff0c;一般我们会定义一个mapper-config.xml文件&#xff0c;来配置数据库连接的相关信息&#xff0c;以及我们的mapperxml文件存放目录。在本章&#xff0c;我们会…

docker-compose启动mysql5.7报错

描述一下问题经过&#xff1a; 使用docker compose 部署mysql5.7 文件如下: 使用命名卷的情况下&#xff0c;匿名卷不存在该问题 services:mysql:restart: alwaysimage: mysql:5.7container_name: mysql-devports:- 3306:3306environment:- MYSQL_DATABASEdev- MYSQL_ROOT_PAS…