Update app.py
Browse files
app.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
import gradio as gr
|
2 |
# requests jest nadal w requirements.txt, ale nie jest już bezpośrednio używany do głównego wywołania API
|
3 |
import requests
|
4 |
-
from PIL import Image
|
5 |
import io
|
6 |
import os
|
7 |
import traceback
|
@@ -40,6 +40,64 @@ print(f"--- Konfiguracja załadowana. Cel dla gradio_client: {TARGET_SPACE_ID} -
|
|
40 |
|
41 |
# --- Logika aplikacji ---
|
42 |
def generate_photo(input_selfie, current_prompt):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
# Ta funkcja jest teraz wywoływana przez Gradio po kliknięciu przycisku
|
44 |
print("\n--- Funkcja generate_photo (gradio_client) została wywołana ---")
|
45 |
|
|
|
1 |
import gradio as gr
|
2 |
# requests jest nadal w requirements.txt, ale nie jest już bezpośrednio używany do głównego wywołania API
|
3 |
import requests
|
4 |
+
from PIL import Image, ImageOps
|
5 |
import io
|
6 |
import os
|
7 |
import traceback
|
|
|
40 |
|
41 |
# --- Logika aplikacji ---
|
42 |
def generate_photo(input_selfie, current_prompt):
|
43 |
+
|
44 |
+
print(f"Otrzymano obrazek typu: {type(input_selfie)}, Oryginalny rozmiar: {input_selfie.size}")
|
45 |
+
print(f"Otrzymano prompt (początek): {current_prompt[:100]}...")
|
46 |
+
|
47 |
+
# --- Dodany Krok: Przeskalowanie obrazka wejściowego ---
|
48 |
+
try:
|
49 |
+
max_size = (1024, 1024) # Maksymalny rozmiar (szerokość, wysokość)
|
50 |
+
# Używamy thumbnail, aby zachować proporcje i zmniejszyć tylko jeśli jest większy
|
51 |
+
input_selfie_resized = input_selfie.copy() # Pracuj na kopii
|
52 |
+
input_selfie_resized.thumbnail(max_size, Image.Resampling.LANCZOS)
|
53 |
+
print(f"Obrazek przeskalowany do (maksymalnie) {max_size}. Nowy rozmiar: {input_selfie_resized.size}")
|
54 |
+
except Exception as e_resize:
|
55 |
+
print(f"BŁĄD podczas skalowania obrazka: {e_resize}")
|
56 |
+
traceback.print_exc()
|
57 |
+
raise gr.Error(f"Nie można przeskalować obrazka wejściowego: {e_resize}")
|
58 |
+
# ---------------------------------------------------------
|
59 |
+
|
60 |
+
# 2. Przygotowanie pliku tymczasowego dla obrazka wejściowego
|
61 |
+
# (Używamy teraz przeskalowanego obrazka: input_selfie_resized)
|
62 |
+
temp_dir = f"temp_input_{uuid.uuid4()}"
|
63 |
+
input_image_path = None
|
64 |
+
try:
|
65 |
+
os.makedirs(temp_dir, exist_ok=True)
|
66 |
+
input_image_path = os.path.join(temp_dir, "input_selfie.jpg")
|
67 |
+
|
68 |
+
# Upewnijmy się, że obraz jest w RGB przed zapisem jako JPEG
|
69 |
+
rgb_image = input_selfie_resized # Używamy przeskalowanego!
|
70 |
+
if rgb_image.mode == 'RGBA':
|
71 |
+
print("Konwertuję przeskalowany obraz RGBA na RGB z białym tłem...")
|
72 |
+
# Stwórz nowy obraz RGB wypełniony białym kolorem
|
73 |
+
final_image = Image.new("RGB", rgb_image.size, (255, 255, 255))
|
74 |
+
# Wklej oryginalny obraz używając jego kanału alfa jako maski
|
75 |
+
final_image.paste(rgb_image, mask=rgb_image.split()[3])
|
76 |
+
else:
|
77 |
+
final_image = rgb_image # Już jest w odpowiednim trybie
|
78 |
+
|
79 |
+
# Zapisz przeskalowany i skonwertowany obraz jako JPEG
|
80 |
+
final_image.save(input_image_path, format="JPEG")
|
81 |
+
print(f"Przeskalowany obrazek wejściowy zapisany tymczasowo w: {input_image_path}")
|
82 |
+
|
83 |
+
except Exception as e:
|
84 |
+
# ... (reszta obsługi błędu zapisu bez zmian) ...
|
85 |
+
|
86 |
+
# 3. Wywołanie zdalnego API Gradio za pomocą gradio_client
|
87 |
+
# ... (reszta kodu bez zmian, aż do obsługi błędu AppError) ...
|
88 |
+
|
89 |
+
except Exception as e:
|
90 |
+
print(f"BŁĄD podczas komunikacji z klientem Gradio lub przetwarzania wyniku: {e}")
|
91 |
+
traceback.print_exc()
|
92 |
+
# Dodajmy podpowiedź o możliwej przyczynie błędu AppError
|
93 |
+
error_message = f"Problem podczas generowania przez zdalny serwis InstantID: {e}"
|
94 |
+
if isinstance(e, AppError): # Sprawdzamy czy to ten konkretny błąd
|
95 |
+
error_message = f"Zdalny serwis ({TARGET_SPACE_ID}) zgłosił wewnętrzny błąd. Najczęstszą przyczyną są problemy z obrazkiem wejściowym (np. brak wykrytej twarzy, nietypowy format) lub przeciążenie serwisu. Spróbuj z innym zdjęciem lub ponownie później."
|
96 |
+
elif "Could not fetch config" in str(e):
|
97 |
+
# ... (reszta obsługi błędów bez zmian)
|
98 |
+
|
99 |
+
raise gr.Error(error_message) # Pokaż (potencjalnie bardziej pomocny) błąd
|
100 |
+
|
101 |
# Ta funkcja jest teraz wywoływana przez Gradio po kliknięciu przycisku
|
102 |
print("\n--- Funkcja generate_photo (gradio_client) została wywołana ---")
|
103 |
|