ll7098ll commited on
Commit
3f89275
·
verified ·
1 Parent(s): dad4b05

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -61
app.py CHANGED
@@ -1,7 +1,7 @@
1
  import os
 
2
  import google.generativeai as genai
3
  import gradio as gr
4
- from PIL import Image
5
 
6
  genai.configure(api_key=os.environ["GEMINI_API_KEY"])
7
 
@@ -9,80 +9,70 @@ genai.configure(api_key=os.environ["GEMINI_API_KEY"])
9
  generation_config = {
10
  "temperature": 0.7,
11
  "top_p": 0.95,
12
- "top_k": 64,
13
- "max_output_tokens": 5000,
14
  "response_mime_type": "text/plain",
15
  }
16
  model = genai.GenerativeModel(
17
- model_name="gemini-1.5-pro-002",
18
  generation_config=generation_config,
19
  )
20
 
21
- def generate_news_article(images, space_characteristic, key_features):
22
  """
23
- 학교 공간 혁신 사진, 공간 성, 주요 특징을 기반으로 기사문을 생성합니다.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  """
25
 
26
- formatted_descriptions = ""
27
- if images:
28
- for i, image_path in enumerate(images):
29
- try:
30
- # 이미지 열기
31
- image = Image.open(image_path)
32
- description = genai.generate_image_caption(image)
33
- formatted_descriptions += f"사진 {i+1} 설명: {description.result}\n"
34
- except Exception as e:
35
- print(f"Error generating caption: {e}")
36
- formatted_descriptions += f"사진 {i+1} 설명: (설명 생성 오류)\n"
37
- else:
38
- formatted_descriptions = "사진 설명 없음\n"
39
-
40
-
41
- characteristic_description = ""
42
- if space_characteristic:
43
- characteristic_description = f"\n**공간 특성: {space_characteristic}**\n"
44
- if space_characteristic == "유연하다":
45
- characteristic_description += "- 하나의 공간을 목적에 따라 다양한 공간으로 사용할 수 있도록 디자인\n"
46
- elif space_characteristic == "연결하다":
47
- characteristic_description += "- 공간과 공간, 사람과 사람 간 유기적인 교류와 소통을 지원하고, 정보 접근과 활용이 원활한 공간으로 디자인\n"
48
- elif space_characteristic == "상상하다":
49
- characteristic_description += "- 흥미와 호기심, 상상력을 자극하고, 모험적이고 놀이적 요소가 많아서 다양하고 흥미로운 경험을 제공할 수 있도록 디자인\n"
50
- elif space_characteristic == "특화하다":
51
- characteristic_description += "- 사용자가 원하는 유형의 활동(놀이, 학습, 실험, 표현 및 전시, 휴식 등)을 충분히 지원할 수 있도록 디자인\n"
52
-
53
-
54
- prompt = f"""## 학교 공간 혁신 기사 작성
55
- {formatted_descriptions}
56
- {characteristic_description}
57
- **주요 특징:** {key_features}
58
- 위 내용을 바탕으로 **{space_characteristic}** 공간 특성을 반영하여 다음과 같은 서식을 갖춘 학교 공간 혁신에 대한 기사를 작성해주세요.
59
- **제목:** ({space_characteristic} 특성을 반영한 제목)
60
- **소제목 1:** {space_characteristic} 공간의 특징을 잘 드러내는 소제목
61
- ({space_characteristic} 특성을 반영한 내용)
62
- **소제목 2:** {space_characteristic} 공간의 다른 특징을 잘 드러내는 소제목
63
- ({space_characteristic} 특성을 반영한 내용)
64
- """
65
-
66
- try:
67
- response = model.generate_text(prompt=prompt)
68
- full_text = response.result
69
- except Exception as e:
70
- print(f"Error generating text: {e}")
71
- full_text = "기사 생성 오류"
72
-
73
- return full_text
74
 
75
 
 
76
  iface = gr.Interface(
77
- fn=generate_news_article,
78
  inputs=[
79
- gr.Files(label="사진 업로드 (여러 장 가능)", type="filepath"),
80
- gr.Radio(["유연하다", "연결하다", "상상하다", "특화하다"], label="공간 특성"),
81
- gr.Textbox(label="주요 특징", lines=3),
 
 
 
82
  ],
83
- outputs=gr.Textbox(label="생성된 기사", lines=20),
84
- title="학교 공간 혁신 기사 생성",
85
- description="사진, 공간 특성, 주요 특징을 입력하여 학교 공간 혁신 기사를 생성합니다.",
86
  )
87
 
 
88
  iface.launch()
 
1
  import os
2
+ import time
3
  import google.generativeai as genai
4
  import gradio as gr
 
5
 
6
  genai.configure(api_key=os.environ["GEMINI_API_KEY"])
7
 
 
9
  generation_config = {
10
  "temperature": 0.7,
11
  "top_p": 0.95,
12
+ "top_k": 40,
13
+ "max_output_tokens": 6000,
14
  "response_mime_type": "text/plain",
15
  }
16
  model = genai.GenerativeModel(
17
+ model_name="gemini-1.5-flash-exp-0827",
18
  generation_config=generation_config,
19
  )
20
 
21
+ def generate_architecture_article(images, space_characteristics):
22
  """
23
+ 학교 공간 사진 특징을 분석하여 건축 잡지 기사 생성합니다.
24
+
25
+ Args:
26
+ images: 학교 공간 사진 리스트 (gradio.Image 타입)
27
+ space_characteristics: 공간 특징 (str) - "유연하다", "연결하다", "상상하다", "특화하다" 중 하나
28
+
29
+ Returns:
30
+ str: 생성된 건축 잡지 기사 텍스트
31
+ """
32
+
33
+ full_text = ""
34
+ yield full_text
35
+
36
+ # 이미지들을 base64로 인코딩하여 프롬프트에 추가
37
+ encoded_images = [gr.processing_utils.encode_base64(img) for img in images]
38
+
39
+
40
+ prompt = f"""
41
+ 당신은 건축 전문 잡지 기자입니다. 아래 이미지들과 공간 특징을 참고하여 학교 공간에 대한 건축 잡지 기사를 작성해주세요.
42
+ 기사에는 공간의 디자인, 기능, 분위기, 사용된 재료, 건축학적 특징, 장점과 단점 등을 포함해야 합니다.
43
+ 전문적인 용어를 사용하고, 객관적인 시각을 유지하며, 비평적인 분석을 추가하여 기사를 풍부하게 만들어주세요.
44
+
45
+ **공간 특징:** {space_characteristics}
46
+
47
  """
48
 
49
+ for img in encoded_images:
50
+ prompt += f"{img}\n"
51
+
52
+
53
+ response = model.generate_content([prompt])
54
+
55
+ for chunk in response.text:
56
+ full_text += chunk
57
+ yield full_text
58
+ time.sleep(0.01)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
 
60
 
61
+ # Gradio 인터페이스 설정
62
  iface = gr.Interface(
63
+ fn=generate_architecture_article,
64
  inputs=[
65
+ gr.Gallery(label="학교 공간 사진", type="pil"), # 여러 이미지 업로드 가능
66
+ gr.Radio(
67
+ choices=["유연하다", "연결하다", "상상하다", "특화하다"],
68
+ label="공간 특징",
69
+ info="공간의 주요 특징을 선택하세요.",
70
+ ),
71
  ],
72
+ outputs=gr.Textbox(label="건축 잡지 기사"),
73
+ title="학교 공간 건축 기사 생성",
74
+ description="학교 공간 사진과 특징을 입력하여 건축 잡지 기사를 생성합니다.",
75
  )
76
 
77
+ # 인터페이스 실행
78
  iface.launch()