J191 commited on
Commit
97de575
·
1 Parent(s): ae84eb6

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +241 -0
app.py ADDED
@@ -0,0 +1,241 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import openai
2
+ import gradio as gr
3
+ import os
4
+ import io
5
+ import IPython.display
6
+ import requests
7
+ import json
8
+
9
+ from PIL import Image
10
+ import base64
11
+ import replicate
12
+
13
+ os.environ['REPLICATE_API_TOKEN']="r8_7PMZcnMsCEYMaRCjX7wcOAer0fHBbF52SbCF6"
14
+ openai.api_key = "fk206009-v2FjZOZh2np9ypBbduofpAsF2t46phMa"
15
+ openai.api_base = "https://openai.api2d.net/v1"
16
+
17
+ #词出故事/重新出
18
+ def W2S(input_words_1,input_words_2,input_words_3):
19
+ prompt = f"""
20
+
21
+ Imagine a world where the text enclosed by triple backticks represents unique and fantastical concepts.
22
+ Your task is to weave these concepts into a coherent story, combining them with imaginative Chinese text segments that bring them to life. Your output will be the vivid portrayal of each concept, allowing me to use it for concept design.
23
+
24
+ Create an engaging narrative that showcases these concepts in an interconnected and creative way. Each concept should be described with captivating details, and if possible, emphasize the emotional impact they have on the inhabitants of this imaginative world. Each concept should be presented with captivating details, showcasing their visual features in a compelling manner. Let your creativity flow and let's craft a captivating story together!
25
+ and summarize it into a Chinese paragraph within 50 words as output.
26
+
27
+ here are some examples:
28
+
29
+ example1:
30
+ input:太空,牛仔族
31
+ output:经历过AI支配恐惧的未来元年,自由和爱仍是3050年生命的主题,唯一与千年前不同的是,私人领域与公共空间只剩下模糊的界限,已经被电子生命割裂形成了无法修复的融合,被称为“未来牛仔族”的族群,更加向往人性集会的温存,仍在探索重回人类私密聚会时代的机会,当然,尽管这些已经变得非常困难。
32
+
33
+ example2:
34
+ input:火星,酿酒器
35
+ output:讲述的是未来世界的人类生生存于极端的条件,甚至居住在一个个坚固的容器中,虽然只能完全依赖AI机器接管日常工业的制造,但这丝毫不影响在火星酿酒器中沉浸在最后娱乐之地的人类。
36
+
37
+ example3:
38
+ input:雷电,瀑布
39
+ output:在一个高山峡谷,有一个“雷电瀑布”,瀑布水流中蕴含着闪电的能量,给人以震撼和力量。
40
+
41
+ ```{input_words_1}```
42
+ ```{input_words_2}```
43
+ ```{input_words_3}```
44
+
45
+ """
46
+ messages = [{"role": "user", "content": prompt}]
47
+ response = openai.ChatCompletion.create(
48
+ model="gpt-3.5-turbo",
49
+ messages=messages,
50
+ temperature=0.8,
51
+
52
+ )
53
+ return response.choices[0].message["content"]
54
+
55
+ #丰富故事
56
+ def Rich(inputs):
57
+ prompt = f"""
58
+
59
+
60
+ Your task is Close the vocabulary within the next three word enclosed by triple backticks and enrich the story within the first story enclosed by triple backticks, combining them with imaginative Chinese text segments that bring them to life. Your output will be the vivid portrayal of each concept, allowing me to use it for concept design.
61
+
62
+ Create an engaging narrative that showcases these concepts in an interconnected and creative way. Each concept should be described with captivating details, and if possible, emphasize the emotional impact they have on the inhabitants of this imaginative world. Each concept should be presented with captivating details, showcasing their visual features in a compelling manner. Let your creativity flow and let's craft a captivating story together!
63
+
64
+ example:
65
+ input:在一个神秘的山谷里,开满了五彩斑斓的花朵,形成了一个“奇迹花海”,人们在这里感受到大自然的奇妙创造
66
+ output:
67
+ 在那神秘的山谷里,一个奇迹般的景象映入眼帘,无数五彩斑斓的花朵绽放在一片繁花似锦的景色中,形成了一个如梦似幻的"奇迹花海"。这里是大自然的杰作,是生命的庆典,每一朵花儿都是奇迹的化身,每一片花海都是对创造力的最美嘉颂。当人们步入奇迹花海,仿佛进入了一个神秘的仙境。空气中弥漫着花香,微风轻拂,花瓣随风飘舞,宛如一幅绚烂的画卷在大地上展开。五彩斑斓的花朵竞相绽放,争奇斗艳,红艳、粉嫩、金黄、碧绿,各色花朵在阳光的照耀下闪烁着如宝石般的光芒,构成了一幅无与伦比的自然画面。奇迹花海不仅是一场视觉盛宴,更是一场心灵之旅。在这片花海中,人们可以感受到大自然的鬼斧神工,体验到生命的无限可能。蝴蝶在花间翩翩起舞,蜜蜂在花丛中忙碌采集花蜜,小鸟在枝头欢快地歌唱,大自然的音乐交织成一曲美妙的交响乐。而这个奇迹花海也承载着人们的愿望和希冀。在花海深处,有一个祈愿池,人们可以投下心愿,期待着奇迹的降临。每一朵花儿都代表着一个希望,每一片花海都是一个祝福。在这里,人们可以寻找到内心的宁静,感受到生命的美好,与大自然融为一体。奇迹花海不仅仅是一片美丽的景色,更是一个灵感的源泉。艺术家、诗���、作家,都会在这里找到创作的灵感。花海中的色彩、芬芳、生机,都将激发人们的创造力,让他们用最美的笔触、最灵动的音符,将奇迹花海的美妙呈现给世人。这个奇迹花海不仅仅存在于现实,更存在于人们的心灵深处。它是大自然的赠礼,也是人类创造的奇迹。在这个花海中,人们可以感受到生命的美好、自然的奇迹,也可以在创作中体验到无穷的想象力和创造力的涌动。无论是在梦中还是现实中,奇迹花海都将永远是人们心灵的乐园,让人们感受到大自然的奇妙与灵感的涌现。
68
+
69
+
70
+ ```{inputs}```
71
+
72
+ """
73
+ messages = [{"role": "user", "content": prompt}]
74
+ response = openai.ChatCompletion.create(
75
+ model="gpt-3.5-turbo",
76
+ messages=messages,
77
+ temperature=0.9,
78
+
79
+ )
80
+ return response.choices[0].message["content"]
81
+
82
+ #丰富故事出图词
83
+ def image_prompt(inputs):
84
+ prompt = f"""
85
+
86
+ 我是一名 AIGC 爱好者,使用 Midjourney 进行 AI 创作。我希望你能成为 Midjourney 的 Prompt 生成器。关于如何启动你的服务:我会将创作主题放在``` ```中,根据我的故事文段,提取与空间描述(诸如空间物体,外形,风格,位置)有关的关键词并尽可能地发挥你的想象力和描述能力去丰富它,最终将英文 Prompt 发给我。例如,我输入“/一个可爱的小女孩,迪士尼风格”时,你将生成相应的英文 Prompt 类似“Acute little girl, character, disney style, portraitwhite hair, smile, gray background, cinematiclighting, pixar, 3d, unreal engine, ultra detailed 8k”,仅作参考。注意,不要使用完整的一句话来描述,而是必须要拆分成各个用英文逗号分隔的关键词。一定不能使用完整的一句英文来返回给我,必须要拆分成各个用英文逗号分隔的关键词。关于 Prompt 的生成规则:1. 注意用单词和词组来生成 Prompt,避免用句子 2. 请尽量用具体的关键词。例如“大”是“big”,具体可以是“gigantic”、“enormous”或者 immense3. 请尽量用更少的关键词,让每个关键词有更大的影响力 4. 注意用“,”分隔 5. 请尽量统一小写
87
+
88
+ ```{inputs}```
89
+
90
+ """
91
+ messages = [{"role": "user", "content": prompt}]
92
+ response = openai.ChatCompletion.create(
93
+ model="gpt-3.5-turbo",
94
+ messages=messages,
95
+ temperature=0.4,
96
+
97
+ )
98
+ return response.choices[0].message["content"]
99
+
100
+ #SWOT分析
101
+ def SWOT(inputs):
102
+ prompt = f"""
103
+ 对``````中的内容或主题进行SWOT分析,并以json字典格式输出,例如:
104
+ 输入:家居展厅设计
105
+ 输出:\"Strengths\":\"1.创意与创新:精心设计的家居展厅可以展示独特和创新的想法,吸引参观者和潜在客户。\\n2.视觉吸引力:视觉上吸引人的展厅可以给参观者留下积极的第一印象并增强整体体验。\\n3.功能性:精心设计的展厅可以有效地展示各种家居产品,为参观者提供舒适便捷的空间,以便与展品进行探索和互动。\\n4.品牌和营销:精心设计的展厅可以有效地传达品牌形象和信息,有助于建立品牌知名度并吸引潜在客户。\",
106
+ \"Weaknesses\":\"1.成本:设计和设置家庭展厅可能很昂贵,尤其是在需要定制展示或安装的情况下。\\n2.空间有限:展厅的空间可能有限,这会限制可以展示的展品的数量和大小。\\n3.维护:展厅需要定期维护和更新,以保持新鲜感并吸引参观者。\",
107
+ \"Opportunities\":\"1.不断增长的家装市场:家装市场正在扩大,为设计师提供了创建展厅的机会,以满足对家居产品和服务日益增长的需求。\\n2.与家居品牌合作:设计师可以与家居品牌合作创建展示其产品和服务的展厅,建立互惠互利的合作伙伴关系。\\n3.技术整台:结合互动展示或虚拟现实等技术,可以增强展厅体验并吸引精通技术的参观者\",
108
+ \"Threats\":\"1.竞争:市场上可能还有其他家居展厅,因此有必要区分并提供独特的功能来吸引参观者。\\n2.改变消费者偏好:消费者对家居设计的偏好和趋势可能会随着时间的推移而改变,需要设计师保持沉默。\"
109
+
110
+ ```{inputs}```
111
+
112
+ """
113
+ messages = [{"role": "user", "content": prompt}]
114
+ response = openai.ChatCompletion.create(
115
+ model="gpt-3.5-turbo",
116
+ messages=messages,
117
+ temperature=0.9,
118
+ )
119
+ swot_json = response.choices[0].message["content"]
120
+ swot_dict = json.loads(swot_json)
121
+ strengths = swot_dict["Strengths"]
122
+ weaknesses = swot_dict["Weaknesses"]
123
+ opportunities = swot_dict["Opportunities"]
124
+ threats = swot_dict["Threats"]
125
+ return strengths, weaknesses, opportunities, threats
126
+
127
+ import requests
128
+ from PIL import Image
129
+ from io import BytesIO
130
+
131
+ def base64_to_pil(img_base64):
132
+ base64_decoded = base64.b64decode(img_base64)
133
+ byte_stream = io.BytesIO(base64_decoded)
134
+ pil_image = Image.open(byte_stream)
135
+ return pil_image
136
+
137
+ def S2I(user_input):
138
+ output = replicate.run(
139
+ "stability-ai/sdxl:a00d0b7dcbb9c3fbb34ba87d2d5b46c56969c84a628bf778a7fdaec30b1b99c5",
140
+ input={"prompt": user_input,
141
+
142
+ "refine":"base_image_refiner",
143
+ "negative_prompt":"lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry"
144
+ }
145
+ )
146
+ for url in output:
147
+ response = requests.get(url)
148
+ response.raise_for_status() # 检查请求是否成功
149
+
150
+ # 将图片数据转换为PIL Image对象
151
+ image_data = BytesIO(response.content)
152
+ img = Image.open(image_data)
153
+
154
+ return img
155
+
156
+ #聚类模型提取颜色
157
+ import numpy as np
158
+ import cv2
159
+ from PIL import Image
160
+ from skimage import io
161
+ from sklearn.cluster import KMeans
162
+ import warnings
163
+
164
+ def color_picker(pic_name):
165
+ warnings.filterwarnings('ignore')
166
+ k = 10 # 决定有几个中心点
167
+ pic = cv2.imread(pic_name) # 读取图片
168
+ image = cv2.resize(pic, (100, 100)) # 将图片尺寸改成需要的大小
169
+ img = io.imread(pic_name) # 读取图片
170
+ img_ori_shape = img.shape # 图片的维度形状
171
+ print("Image shape:", img_ori_shape) # 添加这一行以便输出图像维度
172
+ assert img_ori_shape[2] == 3
173
+ img1 = img.reshape((img_ori_shape[0] * img_ori_shape[1], img_ori_shape[2])) # 转换数组的维度为二维数组
174
+ img_shape = img1.shape # 更改后图片的维度形状
175
+ assert img_shape[1] == 3
176
+ n_channels = img_shape[1] # 获取图片的维度
177
+ clf = KMeans(n_clusters=k) # 构造聚类器
178
+ clf.fit(img1) # 聚类
179
+ centroids = clf.cluster_centers_ # 获取的聚类中心
180
+ labels = list(clf.labels_) # 标签
181
+
182
+ color_info = {}
183
+ for center_index in range(k):
184
+ colorRatio = labels.count(center_index) / len(labels) # 获取这个颜色中心点的个数占总中心点的ratio
185
+ key = colorRatio
186
+ value = list(centroids[center_index]) # 将对应中心点对应ratio存入字典中
187
+ color_info[key] = value
188
+ color_info_sorted = sorted(color_info.keys(), reverse=True)
189
+ colorInfo = [(k, color_info[k]) for k in color_info_sorted]
190
+ assert len(color_info) == k
191
+
192
+ result_width = 200 # 可视化结果矩阵的宽度
193
+ result_height = 300 # 可视化结果矩阵的高度
194
+ result = []
195
+ height = []
196
+ for center_indexx in range(k):
197
+ height.append(int(result_height * colorInfo[center_indexx][0]))
198
+ real_height = sum(height)
199
+ result = np.full((real_height, result_width, n_channels), 255, dtype=int) # 创建空白背景矩阵
200
+ y_offset = 0
201
+ for center_index in range(k):
202
+ color = np.array(colorInfo[center_index][1], dtype=int)
203
+ height = int(result_height * colorInfo[center_index][0])
204
+ result[y_offset:y_offset+height, :, :] = color
205
+ y_offset += height
206
+
207
+ pil_image = Image.fromarray(result.astype(np.uint8))
208
+ return pil_image
209
+
210
+ with gr.Blocks() as demo:
211
+ gr.Markdown("# Seehance flow demo 🖍️")
212
+ with gr.Tab("设计流"):
213
+ inputs_W2S = [gr.inputs.Textbox(label=f"输入词语 {i+1}") for i in range(3)]
214
+ btn_W2S = gr.Button("词出故事")
215
+ output_W2S = gr.Textbox(label="故事输出10-20s")
216
+ btn_Rich = gr.Button("丰富此故事")
217
+ output_Rich = gr.Textbox(label="丰富故事输出40-50s")
218
+ btn_prompt = gr.Button("debug出图提示词")
219
+ output_prompt = gr.Textbox(label="debug出图提示词20-30s")
220
+ btn_image = gr.Button("丰富故事出图")
221
+ output_image = gr.Image(label="概念图")
222
+ btn_color = gr.Button("提取颜色")
223
+ output_Color = gr.Image(label="主要颜色")
224
+
225
+ btn_W2S.click(fn=W2S, inputs=inputs_W2S, outputs=[output_W2S],)
226
+ btn_Rich.click(fn=Rich,inputs=[output_W2S], outputs=[output_Rich])
227
+ btn_prompt.click(fn=image_prompt,inputs=[output_Rich], outputs=[output_prompt])
228
+ btn_image.click(fn=S2I,inputs=[output_prompt],outputs=[output_image])
229
+ btn_color.click(fn=color_picker,inputs=[output_image],outputs=[output_Color])
230
+ with gr.Tab("SWOT"):
231
+ inputs_SWOT=gr.Textbox(label="输入")
232
+ outputs_SWOT_S=gr.Textbox(label="Strengths")
233
+ outputs_SWOT_W=gr.Textbox(label="Weaknesses")
234
+ outputs_SWOT_O=gr.Textbox(label="Opportunities")
235
+ outputs_SWOT_T=gr.Textbox(label="Threats")
236
+ btn_SWOT=gr.Button("SWOT分析")
237
+ btn_SWOT.click(fn=SWOT, inputs=[inputs_SWOT],outputs=[outputs_SWOT_S,outputs_SWOT_W,outputs_SWOT_O,outputs_SWOT_T])
238
+
239
+
240
+
241
+ demo.launch()