Semnykcz commited on
Commit
7fc1882
Β·
verified Β·
1 Parent(s): 28b792b

Upload folder using huggingface_hub

Browse files
Files changed (6) hide show
  1. .gitignore +61 -0
  2. .gradio/certificate.pem +31 -0
  3. README.md +142 -12
  4. app.py +240 -0
  5. app_hf_spaces.py +143 -0
  6. requirements.txt +11 -0
.gitignore ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ build/
8
+ develop-eggs/
9
+ dist/
10
+ downloads/
11
+ eggs/
12
+ .eggs/
13
+ lib/
14
+ lib64/
15
+ parts/
16
+ sdist/
17
+ var/
18
+ wheels/
19
+ share/python-wheels/
20
+ *.egg-info/
21
+ .installed.cfg
22
+ *.egg
23
+ MANIFEST
24
+
25
+ # Virtual environments
26
+ venv/
27
+ env/
28
+ ENV/
29
+ .venv/
30
+
31
+ # Gradio
32
+ gradio_cached_examples/
33
+ flagged/
34
+
35
+ # Model cache
36
+ .cache/
37
+ huggingface/
38
+ transformers_cache/
39
+
40
+ # IDE
41
+ .vscode/
42
+ .idea/
43
+ *.swp
44
+ *.swo
45
+
46
+ # OS
47
+ .DS_Store
48
+ Thumbs.db
49
+
50
+ # Logs
51
+ *.log
52
+
53
+ # Temporary files
54
+ tmp/
55
+ temp/
56
+ *.tmp
57
+
58
+ # Images (if you don't want to commit test images)
59
+ # *.jpg
60
+ # *.png
61
+ # *.jpeg
.gradio/certificate.pem ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN CERTIFICATE-----
2
+ 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
31
+ -----END CERTIFICATE-----
README.md CHANGED
@@ -1,12 +1,142 @@
1
- ---
2
- title: App
3
- emoji: πŸ†
4
- colorFrom: blue
5
- colorTo: green
6
- sdk: gradio
7
- sdk_version: 5.38.1
8
- app_file: app.py
9
- pinned: false
10
- ---
11
-
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: app
3
+ app_file: app.py
4
+ sdk: gradio
5
+ sdk_version: 5.38.1
6
+ ---
7
+ # πŸš€ Photo Upscaler - Hugging Face Gradio App
8
+
9
+ PokročilΓ‘ aplikace pro zvΔ›tΕ‘ovΓ‘nΓ­ fotografiΓ­ pomocΓ­ AI modelΕ― z Hugging Face.
10
+
11
+ ## ✨ Funkce
12
+
13
+ - πŸ” **AI Upscaling**: PouΕΎΓ­vΓ‘ nejmodernΔ›jΕ‘Γ­ modely pro zvΔ›tΕ‘ovΓ‘nΓ­ obrΓ‘zkΕ―
14
+ - 🎯 **Více modelů**: Různé modely pro různé typy obrÑzků
15
+ - 🌐 **Hugging Face integrace**: PΕ™Γ­mΓ© propojenΓ­ s HF modely
16
+ - 🎨 **ModernΓ­ UI**: PΕ™ehlednΓ© a intuitivnΓ­ rozhranΓ­
17
+ - ⚑ **GPU podpora**: AutomatickÑ detekce CUDA
18
+
19
+ ## πŸ› οΈ Instalace
20
+
21
+ ### 1. KlonovΓ‘nΓ­ a pΕ™Γ­prava prostΕ™edΓ­
22
+
23
+ ```bash
24
+ # PΕ™ejdΔ›te do sloΕΎky projektu
25
+ cd gratio
26
+
27
+ # VytvoΕ™te virtuΓ‘lnΓ­ prostΕ™edΓ­
28
+ python -m venv venv
29
+
30
+ # Aktivace prostΕ™edΓ­ (Windows)
31
+ venv\Scripts\activate
32
+
33
+ # Aktivace prostΕ™edΓ­ (macOS/Linux)
34
+ source venv/bin/activate
35
+ ```
36
+
37
+ ### 2. Instalace dependencies
38
+
39
+ ```bash
40
+ pip install -r requirements.txt
41
+ ```
42
+
43
+ ### 3. SpuΕ‘tΔ›nΓ­ aplikace
44
+
45
+ ```bash
46
+ python app.py
47
+ ```
48
+
49
+ Aplikace se spustΓ­ na `http://localhost:7860`
50
+
51
+ ## 🎯 Jak používat
52
+
53
+ 1. **Nahrajte obrΓ‘zek**: PΕ™etΓ‘hnΔ›te nebo vyberte fotografii
54
+ 2. **Nastavte parametry**:
55
+ - Faktor zvΔ›tΕ‘enΓ­ (1.5x - 4x)
56
+ - Vyberte vhodnΓ½ model
57
+ - VolitelnΔ› zadejte HF token
58
+ 3. **KliknΔ›te na "ZvΔ›tΕ‘it obrΓ‘zek"**
59
+ 4. **StΓ‘hnΔ›te vΓ½sledek**
60
+
61
+ ## πŸ€– DostupnΓ© modely
62
+
63
+ - **microsoft/swin2SR-compressed-sr-x2-48**: KomprimovanΓ½ model pro 2x zvΔ›tΕ‘enΓ­
64
+ - **microsoft/swin2SR-compressed-sr-x4-48**: KomprimovanΓ½ model pro 4x zvΔ›tΕ‘enΓ­
65
+ - **caidas/swin2SR-realworld-sr-x4-64-bsrgan-psnr**: NejlepΕ‘Γ­ pro reΓ‘lnΓ© fotografie
66
+ - **microsoft/swin2SR-classical-sr-x2-64**: Pro umΔ›lΓ©/digitΓ‘lnΓ­ obrΓ‘zky (2x)
67
+ - **microsoft/swin2SR-classical-sr-x4-64**: Pro umΔ›lΓ©/digitΓ‘lnΓ­ obrΓ‘zky (4x)
68
+
69
+ ## πŸ” Hugging Face Token
70
+
71
+ Pro nejlepőí výsledky doporučujeme:
72
+ 1. Registraci na [Hugging Face](https://huggingface.co/)
73
+ 2. VytvoΕ™enΓ­ tokenu v [nastavenΓ­](https://huggingface.co/settings/tokens)
74
+ 3. ZadΓ‘nΓ­ tokenu do aplikace
75
+
76
+ ## πŸ’‘ Tipy pro nejlepΕ‘Γ­ vΓ½sledky
77
+
78
+ - **Velikost obrΓ‘zku**: 256x256 aΕΎ 512x512 pixelΕ― pro nejlepΕ‘Γ­ rychlost
79
+ - **Typ obrΓ‘zku**: Volte model podle typu (reΓ‘lnΓ© foto vs. digitΓ‘lnΓ­)
80
+ - **GPU**: Pro rychlejΕ‘Γ­ zpracovΓ‘nΓ­ pouΕΎijte GPU s CUDA
81
+ - **FormΓ‘t**: PNG poskytuje nejlepΕ‘Γ­ kvalitu
82
+
83
+ ## πŸš€ NΓ‘pady na rozΕ‘Γ­Ε™enΓ­
84
+
85
+ ### ZΓ‘kladnΓ­ rozΕ‘Γ­Ε™enΓ­:
86
+ - **Batch processing**: ZpracovΓ‘nΓ­ vΓ­ce obrΓ‘zkΕ― najednou
87
+ - **Noise reduction**: OdstraňovÑní őumu z obrÑzků
88
+ - **Format converter**: Konverze mezi rΕ―znΓ½mi formΓ‘ty
89
+ - **History**: Historie zpracovanΓ½ch obrΓ‘zkΕ―
90
+
91
+ ### Pokročilé funkce:
92
+ - **Custom models**: MoΕΎnost nahrΓ‘nΓ­ vlastnΓ­ch modelΕ―
93
+ - **API endpoint**: RESTful API pro externΓ­ integrace
94
+ - **Cloud storage**: Integrace s cloud ΓΊloΕΎiΕ‘ti
95
+ - **Real-time preview**: NΓ‘hled bΔ›hem zpracovΓ‘nΓ­
96
+
97
+ ### AI vylepΕ‘enΓ­:
98
+ - **Style transfer**: PΕ™enos stylu na obrΓ‘zky
99
+ - **Colorization**: ObarvovÑní černobílých fotek
100
+ - **Face enhancement**: Specializované vylepőovÑní obličejů
101
+ - **HDR processing**: ZpracovΓ‘nΓ­ HDR obrΓ‘zkΕ―
102
+
103
+ ## πŸ“Š Deployment na Hugging Face Spaces
104
+
105
+ ```bash
106
+ # PΕ™idejte do app.py na konec:
107
+ if __name__ == "__main__":
108
+ demo.launch()
109
+
110
+ # VytvoΕ™te app.py s touto konfiguracΓ­ pro HF Spaces
111
+ ```
112
+
113
+ ## πŸ”§ Troubleshooting
114
+
115
+ ### Časté problémy:
116
+
117
+ **Model se nenačte**:
118
+ - Zkontrolujte internetovΓ© pΕ™ipojenΓ­
119
+ - OvΔ›Ε™te HF token
120
+ - Zkuste jinΓ½ model
121
+
122
+ **PomalΓ© zpracovΓ‘nΓ­**:
123
+ - ZmenΕ‘ete velikost obrΓ‘zku
124
+ - PouΕΎijte GPU
125
+ - Vyberte komprimovanΓ½ model
126
+
127
+ **Chyba pamΔ›ti**:
128
+ - SniΕΎte rozliΕ‘enΓ­ vstupnΓ­ho obrΓ‘zku
129
+ - ZavΕ™ete ostatnΓ­ aplikace
130
+ - PouΕΎijte menΕ‘Γ­ model
131
+
132
+ ## πŸ“ Licence
133
+
134
+ MIT License - mΕ―ΕΎete svobodnΔ› pouΕΎΓ­vat a upravovat.
135
+
136
+ ## 🀝 PΕ™ispΓ­vΓ‘nΓ­
137
+
138
+ MΓ‘te nΓ‘pad na vylepΕ‘enΓ­? VytvoΕ™te issue nebo poΕ‘lete pull request!
139
+
140
+ ---
141
+
142
+ **UΕΎijte si zvΔ›tΕ‘ovΓ‘nΓ­ svΓ½ch fotografiΓ­! πŸ“Έβœ¨**
app.py ADDED
@@ -0,0 +1,240 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import torch
3
+ from PIL import Image
4
+ import numpy as np
5
+ from transformers import pipeline
6
+ import requests
7
+ from io import BytesIO
8
+ import os
9
+ from huggingface_hub import login
10
+ import warnings
11
+ warnings.filterwarnings("ignore")
12
+
13
+ class PhotoUpscaler:
14
+ def __init__(self):
15
+ self.device = "cuda" if torch.cuda.is_available() else "cpu"
16
+ self.current_model = None
17
+ self.upscaler = None
18
+ self.load_default_model()
19
+
20
+ def load_default_model(self):
21
+ """Load default upscaling model"""
22
+ try:
23
+ # Using a Real-ESRGAN style model from Hugging Face
24
+ self.current_model = "caidas/swin2SR-realworld-sr-x4-64-bsrgan-psnr"
25
+ self.upscaler = pipeline(
26
+ "image-to-image",
27
+ model=self.current_model,
28
+ device=0 if self.device == "cuda" else -1
29
+ )
30
+ return f"βœ… Model načten: {self.current_model}"
31
+ except Exception as e:
32
+ # Fallback to a simpler approach
33
+ self.current_model = "microsoft/swin2SR-compressed-sr-x2-48"
34
+ try:
35
+ self.upscaler = pipeline(
36
+ "image-to-image",
37
+ model=self.current_model,
38
+ device=0 if self.device == "cuda" else -1
39
+ )
40
+ return f"βœ… Fallback model načten: {self.current_model}"
41
+ except:
42
+ return f"❌ Chyba pΕ™i načítΓ‘nΓ­ modelΕ―: {str(e)}"
43
+
44
+ def upscale_image(self, image, scale_factor=2, model_choice="default"):
45
+ """Upscale image using selected model"""
46
+ if image is None:
47
+ return None, "❌ ŽÑdný obrÑzek nebyl nahrÑn"
48
+
49
+ try:
50
+ # Convert to PIL if needed
51
+ if isinstance(image, np.ndarray):
52
+ image = Image.fromarray(image)
53
+
54
+ # Resize for processing if image is too large
55
+ max_size = 1024
56
+ if max(image.size) > max_size:
57
+ ratio = max_size / max(image.size)
58
+ new_size = tuple(int(dim * ratio) for dim in image.size)
59
+ image = image.resize(new_size, Image.Resampling.LANCZOS)
60
+
61
+ # Change model if requested
62
+ if model_choice != "default" and model_choice != self.current_model:
63
+ self.load_model(model_choice)
64
+
65
+ # Perform upscaling
66
+ if self.upscaler:
67
+ # For pipeline-based upscaling
68
+ upscaled = self.upscaler(image)
69
+ if isinstance(upscaled, list):
70
+ upscaled = upscaled[0]
71
+ if hasattr(upscaled, 'images'):
72
+ upscaled = upscaled.images[0]
73
+ elif isinstance(upscaled, dict) and 'image' in upscaled:
74
+ upscaled = upscaled['image']
75
+
76
+ return upscaled, f"βœ… ObrΓ‘zek zvΔ›tΕ‘en pomocΓ­ {self.current_model}"
77
+ else:
78
+ # Simple fallback upscaling
79
+ new_size = tuple(int(dim * scale_factor) for dim in image.size)
80
+ upscaled = image.resize(new_size, Image.Resampling.LANCZOS)
81
+ return upscaled, f"βœ… ObrΓ‘zek zvΔ›tΕ‘en pomocΓ­ klasickΓ©ho algoritmu (fallback)"
82
+
83
+ except Exception as e:
84
+ return None, f"❌ Chyba pΕ™i zpracovΓ‘nΓ­: {str(e)}"
85
+
86
+ def load_model(self, model_name):
87
+ """Load specific model"""
88
+ try:
89
+ self.current_model = model_name
90
+ self.upscaler = pipeline(
91
+ "image-to-image",
92
+ model=model_name,
93
+ device=0 if self.device == "cuda" else -1
94
+ )
95
+ return f"βœ… Model zmΔ›nΔ›n na: {model_name}"
96
+ except Exception as e:
97
+ return f"❌ Chyba pΕ™i načítΓ‘nΓ­ modelu {model_name}: {str(e)}"
98
+
99
+ # Initialize upscaler
100
+ upscaler = PhotoUpscaler()
101
+
102
+ # Available models for upscaling
103
+ UPSCALING_MODELS = [
104
+ "default",
105
+ "microsoft/swin2SR-compressed-sr-x2-48",
106
+ "microsoft/swin2SR-compressed-sr-x4-48",
107
+ "caidas/swin2SR-realworld-sr-x4-64-bsrgan-psnr",
108
+ "microsoft/swin2SR-classical-sr-x2-64",
109
+ "microsoft/swin2SR-classical-sr-x4-64"
110
+ ]
111
+
112
+ def process_upscaling(image, scale_factor, model_choice, hf_token):
113
+ """Main processing function"""
114
+ # Login to HuggingFace if token provided
115
+ if hf_token and hf_token.strip():
116
+ try:
117
+ login(hf_token)
118
+ status_msg = "πŸ” PΕ™ihlΓ‘Ε‘en k Hugging Face | "
119
+ except:
120
+ status_msg = "⚠️ Problém s HF tokenem | "
121
+ else:
122
+ status_msg = "ℹ️ PouΕΎΓ­vΓ‘m veΕ™ejnΓ© modely | "
123
+
124
+ # Perform upscaling
125
+ result_image, process_msg = upscaler.upscale_image(image, scale_factor, model_choice)
126
+
127
+ return result_image, status_msg + process_msg
128
+
129
+ def get_model_info():
130
+ """Get current model information"""
131
+ device_info = f"ZaΕ™Γ­zenΓ­: {upscaler.device.upper()}"
132
+ model_info = f"AktuΓ‘lnΓ­ model: {upscaler.current_model}"
133
+ return f"ℹ️ {device_info} | {model_info}"
134
+
135
+ # Create Gradio interface
136
+ with gr.Blocks(
137
+ title="πŸš€ Photo Upscaler - Hugging Face",
138
+ theme=gr.themes.Soft(),
139
+ css="""
140
+ .gradio-container {
141
+ max-width: 1200px !important;
142
+ margin: auto !important;
143
+ }
144
+ .title {
145
+ text-align: center;
146
+ color: #ff6b35;
147
+ margin-bottom: 20px;
148
+ }
149
+ """
150
+ ) as demo:
151
+
152
+ gr.HTML("""
153
+ <div class="title">
154
+ <h1>πŸš€ Photo Upscaler s Hugging Face</h1>
155
+ <p>ZvΔ›tΕ‘ujte svΓ© fotografie pomocΓ­ pokročilΓ½ch AI modelΕ―</p>
156
+ </div>
157
+ """)
158
+
159
+ with gr.Row():
160
+ with gr.Column(scale=1):
161
+ gr.Markdown("### πŸ“€ Vstup")
162
+ input_image = gr.Image(
163
+ label="Nahrajte fotografii",
164
+ type="pil",
165
+ format="png"
166
+ )
167
+
168
+ scale_factor = gr.Slider(
169
+ minimum=1.5,
170
+ maximum=4.0,
171
+ value=2.0,
172
+ step=0.5,
173
+ label="Faktor zvΔ›tΕ‘enΓ­",
174
+ info="KolikrΓ‘t zvΔ›tΕ‘it obrΓ‘zek"
175
+ )
176
+
177
+ model_choice = gr.Dropdown(
178
+ choices=UPSCALING_MODELS,
179
+ value="default",
180
+ label="Vyberte model",
181
+ info="RΕ―znΓ© modely pro rΕ―znΓ© typy obrΓ‘zkΕ―"
182
+ )
183
+
184
+ hf_token = gr.Textbox(
185
+ label="Hugging Face Token (volitelnΓ©)",
186
+ placeholder="hf_xxxxxxxxxxxxx",
187
+ type="password",
188
+ info="Pro pΕ™Γ­stup k privΓ‘tnΓ­m modelΕ―m"
189
+ )
190
+
191
+ upscale_btn = gr.Button(
192
+ "πŸ” ZvΔ›tΕ‘it obrΓ‘zek",
193
+ variant="primary",
194
+ size="lg"
195
+ )
196
+
197
+ with gr.Column(scale=1):
198
+ gr.Markdown("### πŸ“₯ VΓ½stup")
199
+ output_image = gr.Image(
200
+ label="ZvΔ›tΕ‘enΓ½ obrΓ‘zek",
201
+ type="pil"
202
+ )
203
+
204
+ status_text = gr.Textbox(
205
+ label="Status",
206
+ interactive=False,
207
+ max_lines=3
208
+ )
209
+
210
+ info_btn = gr.Button("ℹ️ Info o modelu")
211
+
212
+ # Event handlers
213
+ upscale_btn.click(
214
+ fn=process_upscaling,
215
+ inputs=[input_image, scale_factor, model_choice, hf_token],
216
+ outputs=[output_image, status_text]
217
+ )
218
+
219
+ info_btn.click(
220
+ fn=get_model_info,
221
+ outputs=status_text
222
+ )
223
+
224
+ # Examples
225
+ gr.Markdown("### πŸ“‹ Tipy pro pouΕΎitΓ­")
226
+ gr.Markdown("""
227
+ - **NejlepΕ‘Γ­ vΓ½sledky**: PouΕΎΓ­vejte obrΓ‘zky s rozliΕ‘enΓ­m 256x256 aΕΎ 512x512 pixelΕ―
228
+ - **Modely**: RΕ―znΓ© modely jsou optimalizovanΓ© pro rΕ―znΓ© typy obrΓ‘zkΕ―
229
+ - **Real-world modely**: NejlepΕ‘Γ­ pro fotografie z reΓ‘lnΓ©ho svΔ›ta
230
+ - **Classical modely**: VhodnΓ© pro umΔ›lΓ© nebo digitΓ‘lnΓ­ obrΓ‘zky
231
+ - **HF Token**: Zadejte pro pΕ™Γ­stup k nejnovΔ›jΕ‘Γ­m modelΕ―m
232
+ """)
233
+
234
+ if __name__ == "__main__":
235
+ demo.launch(
236
+ share=True,
237
+ server_name="0.0.0.0",
238
+ server_port=7860,
239
+ show_error=True
240
+ )
app_hf_spaces.py ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import torch
3
+ from PIL import Image
4
+ import numpy as np
5
+ from transformers import pipeline
6
+ import os
7
+ from huggingface_hub import login
8
+ import warnings
9
+ warnings.filterwarnings("ignore")
10
+
11
+ class PhotoUpscaler:
12
+ def __init__(self):
13
+ self.device = "cuda" if torch.cuda.is_available() else "cpu"
14
+ self.current_model = "microsoft/swin2SR-compressed-sr-x2-48"
15
+ self.upscaler = None
16
+ self.load_default_model()
17
+
18
+ def load_default_model(self):
19
+ """Load default upscaling model optimized for HF Spaces"""
20
+ try:
21
+ self.upscaler = pipeline(
22
+ "image-to-image",
23
+ model=self.current_model,
24
+ device=0 if self.device == "cuda" else -1
25
+ )
26
+ return f"βœ… Model loaded: {self.current_model}"
27
+ except Exception as e:
28
+ return f"❌ Error loading model: {str(e)}"
29
+
30
+ def upscale_image(self, image, scale_factor=2):
31
+ """Upscale image with simplified processing for HF Spaces"""
32
+ if image is None:
33
+ return None, "❌ No image uploaded"
34
+
35
+ try:
36
+ # Convert to PIL if needed
37
+ if isinstance(image, np.ndarray):
38
+ image = Image.fromarray(image)
39
+
40
+ # Limit size for HF Spaces (smaller memory limits)
41
+ max_size = 512
42
+ if max(image.size) > max_size:
43
+ ratio = max_size / max(image.size)
44
+ new_size = tuple(int(dim * ratio) for dim in image.size)
45
+ image = image.resize(new_size, Image.Resampling.LANCZOS)
46
+
47
+ # Perform upscaling
48
+ if self.upscaler:
49
+ try:
50
+ upscaled = self.upscaler(image)
51
+ if isinstance(upscaled, list):
52
+ upscaled = upscaled[0]
53
+ return upscaled, f"βœ… Image upscaled using {self.current_model}"
54
+ except:
55
+ # Fallback to simple upscaling if model fails
56
+ new_size = tuple(int(dim * scale_factor) for dim in image.size)
57
+ upscaled = image.resize(new_size, Image.Resampling.LANCZOS)
58
+ return upscaled, "βœ… Image upscaled using fallback method"
59
+ else:
60
+ new_size = tuple(int(dim * scale_factor) for dim in image.size)
61
+ upscaled = image.resize(new_size, Image.Resampling.LANCZOS)
62
+ return upscaled, "βœ… Image upscaled using classic algorithm"
63
+
64
+ except Exception as e:
65
+ return None, f"❌ Processing error: {str(e)}"
66
+
67
+ # Initialize upscaler
68
+ upscaler = PhotoUpscaler()
69
+
70
+ def process_upscaling(image, scale_factor):
71
+ """Main processing function for HF Spaces"""
72
+ result_image, process_msg = upscaler.upscale_image(image, scale_factor)
73
+ return result_image, process_msg
74
+
75
+ # Create Gradio interface optimized for HF Spaces
76
+ with gr.Blocks(
77
+ title="πŸš€ Photo Upscaler",
78
+ theme=gr.themes.Default(),
79
+ css="""
80
+ .gradio-container {
81
+ max-width: 900px !important;
82
+ margin: auto !important;
83
+ }
84
+ """
85
+ ) as demo:
86
+
87
+ gr.HTML("""
88
+ <div style="text-align: center; margin-bottom: 20px;">
89
+ <h1>πŸš€ Photo Upscaler</h1>
90
+ <p>Enhance your photos with AI-powered upscaling</p>
91
+ </div>
92
+ """)
93
+
94
+ with gr.Row():
95
+ with gr.Column():
96
+ gr.Markdown("### πŸ“€ Input")
97
+ input_image = gr.Image(
98
+ label="Upload Photo",
99
+ type="pil"
100
+ )
101
+
102
+ scale_factor = gr.Slider(
103
+ minimum=1.5,
104
+ maximum=3.0,
105
+ value=2.0,
106
+ step=0.5,
107
+ label="Scale Factor"
108
+ )
109
+
110
+ upscale_btn = gr.Button(
111
+ "πŸ” Upscale Image",
112
+ variant="primary"
113
+ )
114
+
115
+ with gr.Column():
116
+ gr.Markdown("### πŸ“₯ Output")
117
+ output_image = gr.Image(
118
+ label="Upscaled Image"
119
+ )
120
+
121
+ status_text = gr.Textbox(
122
+ label="Status",
123
+ interactive=False
124
+ )
125
+
126
+ # Event handler
127
+ upscale_btn.click(
128
+ fn=process_upscaling,
129
+ inputs=[input_image, scale_factor],
130
+ outputs=[output_image, status_text]
131
+ )
132
+
133
+ # Tips
134
+ gr.Markdown("""
135
+ ### πŸ’‘ Tips for best results:
136
+ - Use images between 256x256 and 512x512 pixels
137
+ - PNG format provides best quality
138
+ - Lower scale factors work faster
139
+ """)
140
+
141
+ # Launch for HF Spaces
142
+ if __name__ == "__main__":
143
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ gradio>=4.0.0
2
+ torch>=2.0.0
3
+ torchvision>=0.15.0
4
+ transformers>=4.35.0
5
+ huggingface-hub>=0.17.0
6
+ Pillow>=9.0.0
7
+ numpy>=1.21.0
8
+ requests>=2.28.0
9
+ accelerate>=0.20.0
10
+ diffusers>=0.21.0
11
+ opencv-python>=4.7.0