Spaces:
Build error
Build error
| import gradio as gr | |
| import torch | |
| import os | |
| from PIL import Image | |
| import numpy as np | |
| from huggingface_hub import hf_hub_download, list_repo_files | |
| # ----------------------------- | |
| # CONFIG | |
| # ----------------------------- | |
| REPO_ID = "easygoing0114/AI_upscalers" | |
| MODEL_DIR = "/tmp/upscalers" | |
| os.makedirs(MODEL_DIR, exist_ok=True) | |
| DEVICE = "cpu" | |
| # ----------------------------- | |
| # LOAD MODEL LIST | |
| # ----------------------------- | |
| def get_models(): | |
| files = list_repo_files(REPO_ID) | |
| models = [f for f in files if f.endswith(".pth")] | |
| return models | |
| MODEL_LIST = get_models() | |
| # ----------------------------- | |
| # DOWNLOAD MODEL | |
| # ----------------------------- | |
| def download_model(model_name): | |
| path = hf_hub_download( | |
| repo_id=REPO_ID, | |
| filename=model_name, | |
| local_dir=MODEL_DIR | |
| ) | |
| return path | |
| # ----------------------------- | |
| # LOAD UPSCALER (GENERIC ESRGAN STYLE) | |
| # ----------------------------- | |
| def load_model(model_path): | |
| # Lazy import to avoid heavy startup | |
| from basicsr.archs.rrdbnet_arch import RRDBNet | |
| from realesrgan import RealESRGANer | |
| model = RRDBNet( | |
| num_in_ch=3, | |
| num_out_ch=3, | |
| num_feat=64, | |
| num_block=23, | |
| num_grow_ch=32, | |
| scale=4 | |
| ) | |
| upsampler = RealESRGANer( | |
| scale=4, | |
| model_path=model_path, | |
| model=model, | |
| tile=0, | |
| tile_pad=10, | |
| pre_pad=0, | |
| half=(DEVICE == "cuda"), | |
| device=DEVICE | |
| ) | |
| return upsampler | |
| # ----------------------------- | |
| # UPSCALE FUNCTION | |
| # ----------------------------- | |
| def upscale_image(image, model_name): | |
| if image is None: | |
| return None | |
| # Download model | |
| model_path = download_model(model_name) | |
| # Load model | |
| upsampler = load_model(model_path) | |
| # Convert image | |
| img = np.array(image) | |
| # Upscale | |
| output, _ = upsampler.enhance(img, outscale=4) | |
| return Image.fromarray(output) | |
| # ----------------------------- | |
| # UI | |
| # ----------------------------- | |
| with gr.Blocks(title="AI Image Upscaler") as app: | |
| gr.Markdown("# 🔍 AI Image Upscaler (Multi-Model)") | |
| gr.Markdown("Select any model from the repository and upscale your image.") | |
| with gr.Row(): | |
| image_input = gr.Image(type="pil", label="Upload Image") | |
| model_dropdown = gr.Dropdown( | |
| choices=MODEL_LIST, | |
| value=MODEL_LIST[0] if MODEL_LIST else None, | |
| label="Select Upscaler Model" | |
| ) | |
| upscale_btn = gr.Button("✨ Upscale Image") | |
| output_image = gr.Image(label="Upscaled Image") | |
| upscale_btn.click( | |
| fn=upscale_image, | |
| inputs=[image_input, model_dropdown], | |
| outputs=output_image | |
| ) | |
| # ----------------------------- | |
| # LAUNCH | |
| # ----------------------------- | |
| if __name__ == "__main__": | |
| app.launch() |