Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -9,36 +9,51 @@ import tempfile
|
|
| 9 |
import requests
|
| 10 |
|
| 11 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 12 |
-
# 1) Path ke ONNX model βΓ2β dan βΓ4β
|
| 13 |
MODEL_DIR = "model"
|
| 14 |
MODEL_X2_PATH = os.path.join(MODEL_DIR, "Real-ESRGAN_x2plus.onnx")
|
| 15 |
MODEL_X4_PATH = os.path.join(MODEL_DIR, "Real-ESRGAN-x4plus.onnx")
|
| 16 |
|
| 17 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
"""
|
| 19 |
-
|
| 20 |
"""
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
|
| 43 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 44 |
# 2) Buat ONNXRuntime session hanya dengan CPU, 2 thread
|
|
@@ -74,7 +89,7 @@ if SCALE_X4 != 4:
|
|
| 74 |
raise RuntimeError(f"Model Γ4 menghasilkan scale = {SCALE_X4}, bukan 4")
|
| 75 |
|
| 76 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 77 |
-
# 3) Fungsi util untuk memβproses satu tile
|
| 78 |
def run_tile_x2(tile_np: np.ndarray) -> np.ndarray:
|
| 79 |
patch_nchw = np.transpose(tile_np, (2, 0, 1))[None, ...]
|
| 80 |
out_nchw = session_x2.run(None, {input_meta_x2.name: patch_nchw})[0]
|
|
@@ -97,6 +112,7 @@ def tile_upscale(input_img: Image.Image, scale: int, max_dim=1024):
|
|
| 97 |
else:
|
| 98 |
H_in, W_in, run_tile, SCALE = H_in_x4, W_in_x4, run_tile_x4, SCALE_X4
|
| 99 |
|
|
|
|
| 100 |
w, h = input_img.size
|
| 101 |
if w > max_dim or h > max_dim:
|
| 102 |
scale_factor = max_dim / float(max(w, h))
|
|
@@ -168,7 +184,7 @@ css = """
|
|
| 168 |
"""
|
| 169 |
|
| 170 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 171 |
-
# 7) Bangun Gradio Blocks
|
| 172 |
with gr.Blocks(css=css, title="Real-ESRGAN Triple-Mode Upscaler") as demo:
|
| 173 |
gr.Markdown(
|
| 174 |
"""
|
|
|
|
| 9 |
import requests
|
| 10 |
|
| 11 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 12 |
+
# 1) Path ke ONNX model βΓ2β dan βΓ4β di folder model/
|
| 13 |
MODEL_DIR = "model"
|
| 14 |
MODEL_X2_PATH = os.path.join(MODEL_DIR, "Real-ESRGAN_x2plus.onnx")
|
| 15 |
MODEL_X4_PATH = os.path.join(MODEL_DIR, "Real-ESRGAN-x4plus.onnx")
|
| 16 |
|
| 17 |
+
# File ID Google Drive (contohβganti dengan ID asli Anda)
|
| 18 |
+
FILE_ID_X2 = "15xmXXZNH2wMyeQv4ie5hagT7eWK9MgP6"
|
| 19 |
+
FILE_ID_X4 = "1wDBHad9RCJgJDGsPdapLYl3cr8j-PMJ6"
|
| 20 |
+
|
| 21 |
+
def download_from_drive(file_id: str, dest_path: str):
|
| 22 |
"""
|
| 23 |
+
Download file besar dari Google Drive dengan mengatasi prompt konfirmasi (jika ada).
|
| 24 |
"""
|
| 25 |
+
URL = "https://drive.google.com/uc?export=download"
|
| 26 |
+
session = requests.Session()
|
| 27 |
+
|
| 28 |
+
# Permintaan awal
|
| 29 |
+
response = session.get(URL, params={"id": file_id}, stream=True)
|
| 30 |
+
token = None
|
| 31 |
+
for key, value in response.cookies.items():
|
| 32 |
+
if key.startswith('download_warning'):
|
| 33 |
+
token = value
|
| 34 |
+
break
|
| 35 |
+
|
| 36 |
+
# Jika membutuhkan konfirmasi, ulangi dengan token
|
| 37 |
+
if token:
|
| 38 |
+
params = {"id": file_id, "confirm": token}
|
| 39 |
+
response = session.get(URL, params=params, stream=True)
|
| 40 |
+
|
| 41 |
+
# Tuliskan file ke disk
|
| 42 |
+
os.makedirs(os.path.dirname(dest_path), exist_ok=True)
|
| 43 |
+
with open(dest_path, "wb") as f:
|
| 44 |
+
for chunk in response.iter_content(chunk_size=32768):
|
| 45 |
+
if chunk:
|
| 46 |
+
f.write(chunk)
|
| 47 |
+
print(f"Model telah diunduh dan disimpan di {dest_path}")
|
| 48 |
+
return dest_path
|
| 49 |
+
|
| 50 |
+
# Unduh model Γ2
|
| 51 |
+
if not os.path.isfile(MODEL_X2_PATH):
|
| 52 |
+
download_from_drive(FILE_ID_X2, MODEL_X2_PATH)
|
| 53 |
+
|
| 54 |
+
# Unduh model Γ4
|
| 55 |
+
if not os.path.isfile(MODEL_X4_PATH):
|
| 56 |
+
download_from_drive(FILE_ID_X4, MODEL_X4_PATH)
|
| 57 |
|
| 58 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 59 |
# 2) Buat ONNXRuntime session hanya dengan CPU, 2 thread
|
|
|
|
| 89 |
raise RuntimeError(f"Model Γ4 menghasilkan scale = {SCALE_X4}, bukan 4")
|
| 90 |
|
| 91 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 92 |
+
# 3) Fungsi util untuk memβproses satu tile
|
| 93 |
def run_tile_x2(tile_np: np.ndarray) -> np.ndarray:
|
| 94 |
patch_nchw = np.transpose(tile_np, (2, 0, 1))[None, ...]
|
| 95 |
out_nchw = session_x2.run(None, {input_meta_x2.name: patch_nchw})[0]
|
|
|
|
| 112 |
else:
|
| 113 |
H_in, W_in, run_tile, SCALE = H_in_x4, W_in_x4, run_tile_x4, SCALE_X4
|
| 114 |
|
| 115 |
+
# Resize jika terlalu besar
|
| 116 |
w, h = input_img.size
|
| 117 |
if w > max_dim or h > max_dim:
|
| 118 |
scale_factor = max_dim / float(max(w, h))
|
|
|
|
| 184 |
"""
|
| 185 |
|
| 186 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 187 |
+
# 7) Bangun Gradio Blocks
|
| 188 |
with gr.Blocks(css=css, title="Real-ESRGAN Triple-Mode Upscaler") as demo:
|
| 189 |
gr.Markdown(
|
| 190 |
"""
|