项目实训记录10

记录一下测试前的代码

import gradio as gr
import numpy as np
from PIL import Image
import requests
import base64
import os
from io import BytesIO
import llm
import collage
import inference_cjh


def welcome(name):
return f"Welcome to Gradio, {name}!"

js = """
function createGradioAnimation() {
var container = document.createElement('div');
container.id = 'gradio-animation';
container.style.fontSize = '2em';
container.style.fontWeight = 'bold';
container.style.textAlign = 'center';
container.style.marginBottom = '20px';
container.style.color = 'white';

var text = 'Welcome to Gradio!';
for (var i = 0; i < text.length; i++) {
(function(i){
setTimeout(function(){
var letter = document.createElement('span');
letter.style.opacity = '0';
letter.style.transition = 'opacity 0.5s';
letter.innerText = text[i];

container.appendChild(letter);

setTimeout(function() {
letter.style.opacity = '1';
}, 50);
}, i * 250);
})(i);
}

var gradioContainer = document.querySelector('.gradio-container');
gradioContainer.insertBefore(container, gradioContainer.firstChild);

return 'Animation created';
}
"""

#file=http://localhost:8000/background3.gif
css="""
.gradio-container {
background: url('file=http://localhost:5000/image/background3.gif') no-repeat center center; /* 确保 URL 是正确的 */
background-color: #192a56;
background-size: cover; /* 宽度100%,高度自适应 */
margin-left: 0px; /* 左边边距 */
margin-right: 0px; /* 右边边距 */
}
.image {background-color: #dfe4ea}
.text {
background-color: #dfe4ea
}
.text textarea {
background-color: #f1f2f6;
font-size: 20px !important;
}
"""

novel_view_images = []
predictor = inference_cjh.sam_init()
zero123pipe, controlnetpipe, ddim_sampler, sdxl_pipe = inference_cjh.load_pipelines()

def f1(sketch, in_text):
#根据草稿和描述生成单视角的产品图。
cond = sketch["composite"]
# cond = Image.open(f'./data/glass.png')
# cond = np.array(cond)
predictor = inference_cjh.sam_init()
zero123pipe, controlnetpipe, ddim_sampler, sdxl_pipe = inference_cjh.load_pipelines()
refined_image = inference_cjh.controlnetpipe(controlnetpipe,ddim_sampler,cond,prompt=in_text)
#生成6张不同视角下的图片。
novel_view_images = inference_cjh.novel_view_synthesis(zero123pipe, refined_image)
return novel_view_images


def f2(sketch,checkbox_values, in_text):
#return "http://localhost:8000/ImageToStl_model.glb"
selected_images = [novel_view_images[i] for i, checked in enumerate(checkbox_values) if checked]
display_image, masks = inference_cjh.segment_images(predictor,selected_images)

# print("开始处理")
# #读取sketch中的图片
# image_data = sketch["composite"]
# image = Image.fromarray(image_data)
# 将图像保存为临时文件
# 创建目录,如果不存在
save_path = 'E:\\tmp\\'
os.makedirs(save_path, exist_ok=True) # 添加exist_ok=True防止抛出已存在目录的异常
sketch_path = os.path.join(save_path, 'display_image.png')
display_image.save(sketch_path)
# 发送文件到后端
with open(sketch_path, 'rb') as f:
response = requests.post('http://localhost:5000/upload', files={'image': f})
print("Response status code:", response.status_code)
print("Response body:", response.text) # 查看响应内容
# 获取保存后的图片路径
data = response.json()
image_url = f"http://localhost:5000/image/{data['path']}"
print(image_url)

url = f"http://127.0.0.1:7860"
return f'<a href="{url}" target="_blank">点击这里查看3D模型</a>'
#return "http://localhost:8000/Anya Forger.glb"

text1 = '你是一个经验丰富的商品海报设计师,请协助我定制一个海报布局设计。现在我有如下file元素:1.png:图片,即我发送给你的产品图;2.png:图标;3.png:另一个图标。我需要你给我生成:1.海报的主标题和若干个次标题和次标题之下的一些其他的必要描述即有层次的文字内容 2.图片摆放位置xml描述 指定的标签如下positions,position,file,包括坐标位置coords,大小size3.文字摆放位置xml描述 指定的标签如下:texts,text,包括font_name字体,color颜色,size字号,content你生成的内容 请严格按照我给的格式回答 不需要其他任何另外的文字 排版建议:1.产品图作为一个枢轴图或主题图像,它作为一个锚点,其他元素围绕着它旋转。2.文字主标题 次标题 内容的布局和枢轴图形成树状结构有层次感 根据上面的提示由你设计根据上面需要生成的三个点 给我一个关于海报布局的完整的按照上面的要求的描述 一个具体示例如下 严格按照它的格式来回复 不需要其他的回复文字 只要xml文件格式 不要其他的回复:<positions><position><file>1.png</file><coords>(400,400)</coords><size>(500,500)</size></position><position><file>2.png</file><coords>(50,50)</coords><size>(150,150)</size></position></positions><texts><text><font_name>msyh.ttc</font_name><color>ffffff</color><size>36</size><coords>(150,150)</coords><content>清新透明</content></text><text><font_name>msyh.ttc</font_name><color>ffffff</color><size>24</size><coords>(150,200)</coords><content>纯净之选</content></text><text><font_name>msyh.ttc</font_name><color>ffffff</color><size>20</size><coords>(150,250)</coords><content>立即购买享受专属优惠</content></text></texts>'
text2 = '你是一个经验丰富的商品海报设计师,请根据我发送给你的产品图,设计一个海报背景,说明背景是什么颜色,有什么花纹就好 请注意:不要有任何的多余的字仅生成关于背景图片的简要描述 字越少越好'
text3 = '你是一个经验丰富的商品海报设计师,请根据我发送给你的产品图,设计一个关于这个产品的两个图标icon的描述icon的形状和内容 这个图标用于海报上 请注意:不要有任何的多余的字仅生成关于图标的简要描述 字越少越好 要非常简要'
icon_prompt = llm.simple_multimodal_conversation_call(display_image, text3)
background_prompt = llm.simple_multimodal_conversation_call(display_image, text2)
icon = inference_cjh.generate_icon(sdxl_pipe,prompt=icon_prompt)
bg = inference_cjh.generate_background(sdxl_pipe, prompt=background_prompt)

#保存文件,创建input和output文件夹
input_folder = 'input'
output_folder = 'output'
if not os.path.exists(os.path.join(input_folder, 'fg')):
os.makedirs(os.path.join(input_folder, 'fg'))
if not os.path.exists(os.path.join(input_folder, 'pics')):
os.makedirs(os.path.join(input_folder, 'pics'))
if not os.path.exists(output_folder):
os.makedirs(output_folder)

# 保存icon和bg和mask到input/pics文件夹
icon_path = os.path.join(input_folder, 'pics', '2.png')
bg_path = os.path.join(input_folder, 'pics', 'bg.png')
mask_path = os.path.join(input_folder, 'pics', '1-mask.png')
icon.save(icon_path)
bg.save(bg_path)
img_mask = Image.fromarray(masks)
img_mask.save(mask_path)

#生成两个XML的内容
positions, texts = llm.generate_poster_layout(img, "")
# 检查和保存 positions 和 texts
if positions:
with open(os.path.join('input', 'text', 'coord.xml'), 'w') as f:
f.write(positions)
if texts:
with open(os.path.join('input', 'text', 'text.xml'), 'w') as f:
f.write(texts)

#整合图片和文字
collage.process_images(os.path.join(input_folder, 'pics'))
collage.create_composite_image(os.path.join(input_folder, 'pics', 'bg.png'), os.path.join(input_folder, 'pics'),
os.path.join(input_folder, 'text', 'coord.xml'),
os.path.join(input_folder, 'fg', 'total-fg.png'))
eval = Evaluater()
eval.harmonize_images(os.path.join(input_folder, 'pics', 'bg.png'),
os.path.join(input_folder, 'fg', 'total-fg.png'),
os.path.join(output_folder, 'final-poster-ori.png'))
poster_image = collage.add_text(os.path.join(output_folder, 'final-poster-ori.png'),
os.path.join(input_folder, 'text', 'text.xml'),
os.path.join(output_folder, 'final-poster-withtext.png'),
os.path.join(input_folder, 'fonts'))

#把最终海报发给服务器显示到前端
poster_path = os.path.join(save_path, 'poster_image.png')
poster_image.save(poster_path)
# 发送文件到后端
with open(poster_path, 'rb') as f:
response = requests.post('http://localhost:5000/upload', files={'image': f})
return poster_image
with gr.Blocks(js=js, css=css) as demo:
with gr.Row():
sketchpad = gr.Sketchpad(label="绘制图像")
inp_text = gr.Textbox(lines=8, label="输入文本", placeholder="请输入产品描述")
btn_generate = gr.Button("生成图像")
#out_model = gr.Model3D(clear_color=[0.0, 0.0, 0.0, 0.0], label="3D模型")
with gr.Row():
output_images = [gr.Image(interactive=False, label=f"Image {i + 1}") for i in range(6)]
with gr.Row():
checkboxes = [gr.Checkbox(label=f"选择 {i + 1}") for i in range(6)]
btn_process = gr.Button("处理选中图像")
new_page = gr.HTML()
final_image = gr.Image(interactive=False)

#btn_generate.click(process_image, inputs=[sketchpad, inp_text], outputs=output_images)
btn_generate.click(f1, inputs=[sketchpad, inp_text], outputs=new_page)
btn_process.click(f2, inputs=checkboxes, outputs=final_image)

demo.launch()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值