File size: 6,074 Bytes
d761518 468339f dcedef1 8619eb0 d761518 3285669 d761518 4203a70 b3081cb dcedef1 f701299 66f1352 59bf3d5 290831c 05af2db 290831c 05af2db 290831c 05af2db 290831c 05af2db 290831c 05af2db 290831c 05af2db 290831c 05af2db 59bf3d5 05af2db 290831c 0f3fb6f 05af2db 290831c 59bf3d5 f2f13c6 f4a960d f2f13c6 290831c b3081cb 8c2c042 b3081cb 3285669 d761518 3285669 9d7aa3b 3285669 479ad59 3285669 479ad59 3285669 456e3fa 3285669 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
import torch
from PIL import Image
from RealESRGAN import RealESRGAN
import gradio as gr
import os
from random import randint
import shutil
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model2 = RealESRGAN(device, scale=2)
model2.load_weights('weights/RealESRGAN_x2.pth', download=True)
model4 = RealESRGAN(device, scale=4)
model4.load_weights('weights/RealESRGAN_x4.pth', download=True)
model8 = RealESRGAN(device, scale=8)
model8.load_weights('weights/RealESRGAN_x8.pth', download=True)
def inference_image(image, size):
global model2
global model4
global model8
if image is None:
raise gr.Error("Image not uploaded")
width, height = image.size
if width >= 5000 or height >= 5000:
raise gr.Error("The image is too large.")
if torch.cuda.is_available():
torch.cuda.empty_cache()
if size == '2x':
try:
result = model2.predict(image.convert('RGB'))
except torch.cuda.OutOfMemoryError as e:
print(e)
model2 = RealESRGAN(device, scale=2)
model2.load_weights('weights/RealESRGAN_x2.pth', download=False)
result = model2.predict(image.convert('RGB'))
elif size == '4x':
try:
result = model4.predict(image.convert('RGB'))
except torch.cuda.OutOfMemoryError as e:
print(e)
model4 = RealESRGAN(device, scale=4)
model4.load_weights('weights/RealESRGAN_x4.pth', download=False)
result = model2.predict(image.convert('RGB'))
else:
try:
result = model8.predict(image.convert('RGB'))
except torch.cuda.OutOfMemoryError as e:
print(e)
model8 = RealESRGAN(device, scale=8)
model8.load_weights('weights/RealESRGAN_x8.pth', download=False)
result = model2.predict(image.convert('RGB'))
print(f"Image size ({device}): {size} ... OK")
return result
def inference_video(video, size):
_id = randint(1, 10000)
INPUT_DIR = "tmp"
# Check if the directory exists, if so remove it
if os.path.exists(INPUT_DIR):
shutil.rmtree(INPUT_DIR)
else:
# Create the directory, equivalent to 'mkdir -p'
os.makedirs(INPUT_DIR, exist_ok=True)
os.chdir(INPUT_DIR)
upload_folder = 'upload'
result_folder = 'results'
video_folder = 'videos'
video_result_folder = 'results_videos'
video_mp4_result_folder = 'results_mp4_videos'
result_restored_imgs_folder = 'restored_imgs'
if os.path.isdir(upload_folder):
print(upload_folder+" exists")
else:
os.makedirs(upload_folder, exist_ok=True)
if os.path.isdir(video_folder):
print(video_folder+" exists")
else:
os.makedirs(video_folder, exist_ok=True)
if os.path.isdir(video_result_folder):
print(video_result_folder+" exists")
else:
os.makedirs(video_result_folder, exist_ok=True)
if os.path.isdir(video_mp4_result_folder):
print(video_mp4_result_folder+" exists")
else:
os.makedirs(video_mp4_result_folder, exist_ok=True)
if os.path.isdir(result_folder):
print(result_folder+" exists")
else:
os.makedirs(result_folder, exist_ok=True)
os.chdir("results")
if os.path.isdir(result_restored_imgs_folder):
print(result_restored_imgs_folder+" exists")
else:
os.makedirs(result_restored_imgs_folder, exist_ok=True)
os.chdir("..")
if os.path.isdir(video_folder):
shutil.rmtree(video_folder)
os.makedirs(video_folder, exist_ok=True)
os.chdir("..")
try:
# Specify the desired output file path with the custom name and ".mp4" extension
output_file_path = f"/{INPUT_DIR}/videos/input.mp4"
# Save the video input to the specified file path
with open(output_file_path, 'wb') as output_file:
output_file.write(video)
print(f"Video input saved as {output_file_path}")
except Exception as e:
print(f"Error saving video input: {str(e)}")
os.chdir("..")
os.system("python inference_video.py")
return os.path.join(f'/{INPUT_DIR}/results_mp4_videos/', 'input.mp4')
input_image = gr.Image(type='pil', label='Input Image')
input_model_image = gr.Radio(['2x', '4x', '8x'], type="value", value="4x", label="Model Upscale/Enhance Type")
submit_image_button = gr.Button('Submit')
output_image = gr.Image(type="filepath", label="Output Image")
tab_img = gr.Interface(
fn=inference_image,
inputs=[input_image, input_model_image],
outputs=output_image,
title="Real-ESRGAN Pytorch",
description="Gradio UI for Real-ESRGAN Pytorch version. To use it, simply upload your image, or click one of examples and choose the model. Read more at the links below. Please click submit only once <br><p style='text-align: center'><a href='https://arxiv.org/abs/2107.10833'>Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data</a> | <a href='https://github.com/ai-forever/Real-ESRGAN'>Github Repo</a></p>"
)
input_video = gr.Video(label='Input Video')
input_model_video = gr.Radio(['2x', '4x', '8x'], type="value", value="4x", label="Model Upscale/Enhance Type")
submit_video_button = gr.Button('Submit')
output_video = gr.Video(label='Output Video')
tab_vid = gr.Interface(
fn=inference_video,
inputs=[input_video, input_model_video],
outputs=output_video,
title="Real-ESRGAN Pytorch",
description="Gradio UI for Real-ESRGAN Pytorch version. To use it, simply upload your video, or click one of examples and choose the model. Read more at the links below. Please click submit only once <br><p style='text-align: center'><a href='https://arxiv.org/abs/2107.10833'>Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data</a> | <a href='https://github.com/ai-forever/Real-ESRGAN'>Github Repo</a></p>"
)
demo = gr.TabbedInterface([tab_img, tab_vid], ["Image", "Video"])
demo.launch(debug=True, show_error=True) |