mingjunji commited on
Commit
c4d7db7
·
verified ·
1 Parent(s): dcf361d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +76 -34
app.py CHANGED
@@ -1,43 +1,85 @@
1
  import gradio as gr
 
 
 
 
 
 
 
 
 
2
 
3
- # 定义一个简单的分析函数(稍后我们会接入 AI)
4
  def analyze_lighting(image):
5
  if image is None:
6
- return "请先上传一张 UE5 场景截图。"
7
-
8
- # 这里是占位内容,模拟未来的 AI 输出
9
- analysis_report = """
10
- ## 💡 灯光初步分析报告
11
-
12
- ### 1. 色彩与氛围
13
- - **主色调:** 识别中...
14
- - **色温倾向:** 建议检查冷暖对比。
15
-
16
- ### 2. 曝光与明暗
17
- - **高光区域:** 曝光正常。
18
- - **暗部细节:** 建议增加一些补光 (Fill Light) 以提升暗部层次。
19
-
20
- ### 3. 渲染建议
21
- - 检查 **Volumetric Fog** 的散射强度。
22
- - 考虑在主要物件处增加 **Rim Light** 增强轮廓。
23
- """
24
- return analysis_report
25
-
26
- # 构建界面
27
- with gr.Blocks(title="UE5 灯光艺术分析助手") as demo:
28
- gr.Markdown("# 🎨 UE5 游戏场景灯光分析助手")
29
- gr.Markdown("上传你的场景截图,AI 将从灯光美术的角度提供优化建议。")
 
 
 
 
 
 
 
30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  with gr.Row():
32
- with gr.Column(scale=1):
33
- input_image = gr.Image(label="上传截图", type="pil")
34
- analyze_btn = gr.Button("开始分析", variant="primary")
35
-
36
- with gr.Column(scale=1):
37
  output_text = gr.Markdown("分析结果将在此处显示...")
38
-
39
- # 绑定点击事件
40
- analyze_btn.click(fn=analyze_lighting, inputs=input_image, outputs=output_text)
41
 
42
- # 启动
43
  demo.launch()
 
1
  import gradio as gr
2
+ import os
3
+ from openai import OpenAI # 现在的多模态模型大多兼容 OpenAI 格式
4
+
5
+ # 从环境变量中安全读取 Key
6
+ # 如果你没设置环境变量,这里会报错,提醒你需要配置
7
+ api_key = os.getenv("MY_API_KEY")
8
+ base_url = "https://api.openai.com/v1" # 这里可以换成你想要的任何服务商地址
9
+
10
+ client = OpenAI(api_key=api_key, base_url=base_url)
11
 
 
12
  def analyze_lighting(image):
13
  if image is None:
14
+ return "请先上传一张场景截图。"
15
+ if not api_key:
16
+ return "请在 Space Settings 中配置 MY_API_KEY"
17
+
18
+ # 将图片交给 AI 逻辑
19
+ # 注意:这里需要根据你选的模型(如 gpt-4o 或 qwen-vl)调整 model 参数
20
+ try:
21
+ response = client.chat.completions.create(
22
+ model="gpt-4o", # 或者是 "qwen-plus" 等支持视觉的模型
23
+ messages=[
24
+ {
25
+ "role": "user",
26
+ "content": [
27
+ {"type": "text", "text": "分析这张 UE5 截图的灯光建议..."},
28
+ {
29
+ "type": "image_url",
30
+ "image_url": {"url": f"data:image/jpeg;base64,{image_to_base64(image)}"}
31
+ },
32
+ ],
33
+ }
34
+ ],
35
+ )
36
+ return response.choices[0].message.content
37
+ except Exception as e:
38
+ return f"接口调用失败: {str(e)}"
39
+
40
+ # 剩下的 Gradio UI 代码保持不变...
41
+
42
+ def analyze_lighting(image):
43
+ if image is None:
44
+ return "请先上传一张场景截图。"
45
 
46
+ # 将图片转换为字节流
47
+ img_byte_arr = io.BytesIO()
48
+ image.save(img_byte_arr, format='PNG')
49
+ img_iterable = img_byte_arr.getvalue()
50
+
51
+ # 构建发送给 AI 的提示词(Prompt)
52
+ # 作为一个 UE5 灯光师,你可以根据你的需求修改这里的描述
53
+ prompt = "你是一位资深的 AAA 级游戏灯光美术总监。请分析这张 UE5 场景截图。请从:1.色彩与明暗平衡 2.丁达尔效应/体积光 3.材质与光影交互 4.优化建议 这四个维度给出专业评论。请用中文回答。"
54
+
55
+ try:
56
+ # 调用模型
57
+ output = client.chat_completion(
58
+ messages=[
59
+ {
60
+ "role": "user",
61
+ "content": [
62
+ {"type": "text", "text": prompt},
63
+ {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{image}"}} # 简单处理
64
+ ],
65
+ },
66
+ ],
67
+ max_tokens=1000,
68
+ )
69
+ return output.choices[0].message.content
70
+ except Exception as e:
71
+ return f"AI 分析出错啦: {str(e)}\n(提示:免费接口可能繁忙,请稍后再试)"
72
+
73
+ # 保持你之前的 Gradio 布局
74
+ with gr.Blocks(theme=gr.themes.Soft()) as demo:
75
+ gr.Markdown("# 🎨 LightingArtist_SC | 游戏灯光 AI 分析")
76
  with gr.Row():
77
+ with gr.Column():
78
+ input_img = gr.Image(label="上传截图", type="pil")
79
+ btn = gr.Button("开始分析报告", variant="primary")
80
+ with gr.Column():
 
81
  output_text = gr.Markdown("分析结果将在此处显示...")
82
+
83
+ btn.click(analyze_lighting, inputs=[input_img], outputs=[output_text])
 
84
 
 
85
  demo.launch()