Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -6,6 +6,7 @@ import uuid
|
|
6 |
import base64
|
7 |
import mimetypes
|
8 |
import json
|
|
|
9 |
|
10 |
import torch
|
11 |
from safetensors.torch import load_file
|
@@ -19,6 +20,9 @@ from diffusers import FluxPipeline
|
|
19 |
from google import genai
|
20 |
from google.genai import types
|
21 |
|
|
|
|
|
|
|
22 |
#######################################
|
23 |
# 0. 환경설정
|
24 |
#######################################
|
@@ -34,7 +38,7 @@ os.environ["HF_HOME"] = CACHE_PATH
|
|
34 |
# (예시) Google GenAI 사용:
|
35 |
# export GAPI_TOKEN="<YOUR_GOOGLE_GENAI_API_KEY>"
|
36 |
|
37 |
-
#
|
38 |
class timer:
|
39 |
def __init__(self, method_name="timed process"):
|
40 |
self.method = method_name
|
@@ -164,7 +168,6 @@ def generate_initial_image(prompt, text, height, width, steps, scale, seed):
|
|
164 |
prompt: 이미지 배경/장면/스타일 묘사를 위한 프롬프트
|
165 |
text: 실제로 이미지에 들어가야 할 문구(예: "안녕하세요", "Hello world" 등)
|
166 |
"""
|
167 |
-
# Diffusion 모델에 "이미지 안에 텍스트를 표시하라"는 요청을 넣기 위해
|
168 |
combined_prompt = f"{prompt} with clear readable text that says '{text}'"
|
169 |
|
170 |
with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16), timer("inference"):
|
@@ -186,29 +189,32 @@ def change_text_in_image(original_image, new_text):
|
|
186 |
업로드된 이미지 내부의 문구를 `new_text`로 변경해주는 함수.
|
187 |
"""
|
188 |
try:
|
189 |
-
# 임시
|
190 |
with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as tmp:
|
191 |
original_path = tmp.name
|
192 |
original_image.save(original_path)
|
193 |
|
194 |
-
# Gemini 모델
|
195 |
image_path, text_response = generate_by_google_genai(
|
196 |
text=f"Change the text in this image to: '{new_text}'",
|
197 |
file_name=original_path
|
198 |
)
|
199 |
|
200 |
-
# 결과가 이미지로
|
201 |
if image_path:
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
|
|
|
|
|
|
|
|
206 |
else:
|
207 |
-
#
|
208 |
return None, text_response
|
209 |
|
210 |
except Exception as e:
|
211 |
-
# Gradio 에러 표시를 위해 gr.Error를 사용
|
212 |
raise gr.Error(f"Error: {e}")
|
213 |
|
214 |
|
|
|
6 |
import base64
|
7 |
import mimetypes
|
8 |
import json
|
9 |
+
import io
|
10 |
|
11 |
import torch
|
12 |
from safetensors.torch import load_file
|
|
|
20 |
from google import genai
|
21 |
from google.genai import types
|
22 |
|
23 |
+
# PIL 이미지 처리를 위해 추가
|
24 |
+
from PIL import Image
|
25 |
+
|
26 |
#######################################
|
27 |
# 0. 환경설정
|
28 |
#######################################
|
|
|
38 |
# (예시) Google GenAI 사용:
|
39 |
# export GAPI_TOKEN="<YOUR_GOOGLE_GENAI_API_KEY>"
|
40 |
|
41 |
+
# 간단한 타이머 클래스
|
42 |
class timer:
|
43 |
def __init__(self, method_name="timed process"):
|
44 |
self.method = method_name
|
|
|
168 |
prompt: 이미지 배경/장면/스타일 묘사를 위한 프롬프트
|
169 |
text: 실제로 이미지에 들어가야 할 문구(예: "안녕하세요", "Hello world" 등)
|
170 |
"""
|
|
|
171 |
combined_prompt = f"{prompt} with clear readable text that says '{text}'"
|
172 |
|
173 |
with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16), timer("inference"):
|
|
|
189 |
업로드된 이미지 내부의 문구를 `new_text`로 변경해주는 함수.
|
190 |
"""
|
191 |
try:
|
192 |
+
# 이미지를 임시 파일로 저장
|
193 |
with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as tmp:
|
194 |
original_path = tmp.name
|
195 |
original_image.save(original_path)
|
196 |
|
197 |
+
# Gemini 모델 호출하여 텍스트 변경
|
198 |
image_path, text_response = generate_by_google_genai(
|
199 |
text=f"Change the text in this image to: '{new_text}'",
|
200 |
file_name=original_path
|
201 |
)
|
202 |
|
203 |
+
# 결과가 이미지로 반환된 경우
|
204 |
if image_path:
|
205 |
+
# Gradio 구버전(4.26.0 이하)에는 decode_base64_to_image가 없으므로 PIL을 직접 사용
|
206 |
+
with open(image_path, "rb") as f:
|
207 |
+
image_data = f.read()
|
208 |
+
|
209 |
+
# base64를 거치지 않고, PIL Image로 디코딩
|
210 |
+
modified_img = Image.open(io.BytesIO(image_data))
|
211 |
+
return modified_img, ""
|
212 |
+
|
213 |
else:
|
214 |
+
# 이미지 없이 텍스트만 응답으로 온 경우
|
215 |
return None, text_response
|
216 |
|
217 |
except Exception as e:
|
|
|
218 |
raise gr.Error(f"Error: {e}")
|
219 |
|
220 |
|