PaulinaAa commited on
Commit
aaf6a9f
·
verified ·
1 Parent(s): 72f2543

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +59 -1
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