salman555 commited on
Commit
11e2133
Β·
verified Β·
1 Parent(s): f3562a9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +42 -26
app.py CHANGED
@@ -9,36 +9,51 @@ import tempfile
9
  import requests
10
 
11
  # β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”
12
- # 1) Path ke ONNX model β€œΓ—2” dan β€œΓ—4” (diunduh dari GitHub RAW)
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
- def download_model(path: str, url: str):
 
 
 
 
18
  """
19
- Jika file model belum ada, unduh dari URL RAW GitHub.
20
  """
21
- if not os.path.isfile(path):
22
- os.makedirs(MODEL_DIR, exist_ok=True)
23
- response = requests.get(url, stream=True)
24
- if response.status_code == 200:
25
- with open(path, "wb") as f:
26
- for chunk in response.iter_content(chunk_size=8192):
27
- if chunk:
28
- f.write(chunk)
29
- print(f"Model telah diunduh dan disimpan di {path}")
30
- else:
31
- raise FileNotFoundError(f"Model gagal diunduh dari {url}, status code: {response.status_code}")
32
-
33
- # **Ganti link β€œblob” dengan raw.githubusercontent.com**
34
- download_model(
35
- MODEL_X2_PATH,
36
- "https://raw.githubusercontent.com/salmanalfarisi11/Upscaler_images/master/model/Real-ESRGAN_x2plus.onnx"
37
- )
38
- download_model(
39
- MODEL_X4_PATH,
40
- "https://raw.githubusercontent.com/salmanalfarisi11/Upscaler_images/master/model/Real-ESRGAN-x4plus.onnx"
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 untuk Γ—2 dan Γ—4
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 – tiga tombol (Γ—2, Γ—4, Γ—8)
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
  """