ohayonguy
commited on
Commit
·
2cd7eda
1
Parent(s):
1fef40b
trying to fix interface
Browse files
app.py
CHANGED
|
@@ -52,12 +52,10 @@ def generate_reconstructions(pmrf_model, x, y, non_noisy_z0, num_flow_steps, dev
|
|
| 52 |
dt = (1.0 / num_flow_steps) * (1.0 - pmrf_model.hparams.eps)
|
| 53 |
x_t_next = source_dist_samples.clone()
|
| 54 |
t_one = torch.ones(x.shape[0], device=device)
|
| 55 |
-
|
| 56 |
-
for i in pbar:
|
| 57 |
num_t = (i / num_flow_steps) * (1.0 - pmrf_model.hparams.eps) + pmrf_model.hparams.eps
|
| 58 |
v_t_next = pmrf_model(x_t=x_t_next, t=t_one * num_t, y=y).to(x_t_next.dtype)
|
| 59 |
x_t_next = x_t_next.clone() + v_t_next * dt
|
| 60 |
-
pbar.set_description(f'Flow step {i}')
|
| 61 |
|
| 62 |
return x_t_next.clip(0, 1).to(torch.float32)
|
| 63 |
|
|
@@ -76,8 +74,9 @@ def enhance_face(img, face_helper, has_aligned, num_flow_steps, only_center_face
|
|
| 76 |
# TODO: even with eye_dist_threshold, it will still introduce wrong detections and restorations.
|
| 77 |
# align and warp each face
|
| 78 |
face_helper.align_warp_face()
|
|
|
|
| 79 |
# face restoration
|
| 80 |
-
for i, cropped_face in enumerate(face_helper.cropped_faces):
|
| 81 |
# prepare data
|
| 82 |
h, w = cropped_face.shape[0], cropped_face.shape[1]
|
| 83 |
cropped_face = cv2.resize(cropped_face, (512, 512), interpolation=cv2.INTER_LINEAR)
|
|
@@ -114,8 +113,7 @@ def enhance_face(img, face_helper, has_aligned, num_flow_steps, only_center_face
|
|
| 114 |
def inference(seed, randomize_seed, img, aligned, scale, num_flow_steps,
|
| 115 |
progress=gr.Progress(track_tqdm=True)):
|
| 116 |
if img is None:
|
| 117 |
-
gr.
|
| 118 |
-
return [None, None, None]
|
| 119 |
if randomize_seed:
|
| 120 |
seed = random.randint(0, MAX_SEED)
|
| 121 |
torch.manual_seed(seed)
|
|
@@ -127,8 +125,7 @@ def inference(seed, randomize_seed, img, aligned, scale, num_flow_steps,
|
|
| 127 |
|
| 128 |
h, w = img.shape[0:2]
|
| 129 |
if h > 4500 or w > 4500:
|
| 130 |
-
|
| 131 |
-
return None, None
|
| 132 |
|
| 133 |
face_helper = FaceRestoreHelper(
|
| 134 |
scale,
|
|
@@ -172,11 +169,9 @@ You may use this demo to enhance the quality of any image which contains faces.
|
|
| 172 |
|
| 173 |
Please refer to our project's page for more details: https://pmrf-ml.github.io/.
|
| 174 |
|
| 175 |
-
---
|
| 176 |
-
|
| 177 |
*Notes* :
|
| 178 |
|
| 179 |
-
1. Our model is designed to restore aligned face images,
|
| 180 |
2. Images that are too large won't work due to memory constraints.
|
| 181 |
|
| 182 |
---
|
|
@@ -201,8 +196,7 @@ If you find our work useful, please help to ⭐ our <a href='https://github.com/
|
|
| 201 |
|
| 202 |
📋 **License**
|
| 203 |
|
| 204 |
-
This project is released under the <a rel="license" href="https://github.com/ohayonguy/PMRF/blob/master/LICENSE">MIT license</a>.
|
| 205 |
-
Redistribution and use for non-commercial purposes should follow this license.
|
| 206 |
|
| 207 |
📧 **Contact**
|
| 208 |
|
|
|
|
| 52 |
dt = (1.0 / num_flow_steps) * (1.0 - pmrf_model.hparams.eps)
|
| 53 |
x_t_next = source_dist_samples.clone()
|
| 54 |
t_one = torch.ones(x.shape[0], device=device)
|
| 55 |
+
for i in tqdm(range(num_flow_steps)):
|
|
|
|
| 56 |
num_t = (i / num_flow_steps) * (1.0 - pmrf_model.hparams.eps) + pmrf_model.hparams.eps
|
| 57 |
v_t_next = pmrf_model(x_t=x_t_next, t=t_one * num_t, y=y).to(x_t_next.dtype)
|
| 58 |
x_t_next = x_t_next.clone() + v_t_next * dt
|
|
|
|
| 59 |
|
| 60 |
return x_t_next.clip(0, 1).to(torch.float32)
|
| 61 |
|
|
|
|
| 74 |
# TODO: even with eye_dist_threshold, it will still introduce wrong detections and restorations.
|
| 75 |
# align and warp each face
|
| 76 |
face_helper.align_warp_face()
|
| 77 |
+
gr.Info(f"Identified {len(face_helper.cropped_faces)} faces in the image. The algorithm will enhance the quality of each face.")
|
| 78 |
# face restoration
|
| 79 |
+
for i, cropped_face in tqdm(enumerate(face_helper.cropped_faces)):
|
| 80 |
# prepare data
|
| 81 |
h, w = cropped_face.shape[0], cropped_face.shape[1]
|
| 82 |
cropped_face = cv2.resize(cropped_face, (512, 512), interpolation=cv2.INTER_LINEAR)
|
|
|
|
| 113 |
def inference(seed, randomize_seed, img, aligned, scale, num_flow_steps,
|
| 114 |
progress=gr.Progress(track_tqdm=True)):
|
| 115 |
if img is None:
|
| 116 |
+
raise gr.Error("Please upload an image before submitting.")
|
|
|
|
| 117 |
if randomize_seed:
|
| 118 |
seed = random.randint(0, MAX_SEED)
|
| 119 |
torch.manual_seed(seed)
|
|
|
|
| 125 |
|
| 126 |
h, w = img.shape[0:2]
|
| 127 |
if h > 4500 or w > 4500:
|
| 128 |
+
raise gr.Error('Image size too large.')
|
|
|
|
| 129 |
|
| 130 |
face_helper = FaceRestoreHelper(
|
| 131 |
scale,
|
|
|
|
| 169 |
|
| 170 |
Please refer to our project's page for more details: https://pmrf-ml.github.io/.
|
| 171 |
|
|
|
|
|
|
|
| 172 |
*Notes* :
|
| 173 |
|
| 174 |
+
1. Our model is designed to restore aligned face images, where there is *only one* face in the image, and the face is centered. Here, however, we incorporate mechanisms that allow restoring the quality of *any* image that contains *any* number of faces. Thus, the resulting quality of such general images is not guaranteed.
|
| 175 |
2. Images that are too large won't work due to memory constraints.
|
| 176 |
|
| 177 |
---
|
|
|
|
| 196 |
|
| 197 |
📋 **License**
|
| 198 |
|
| 199 |
+
This project is released under the <a rel="license" href="https://github.com/ohayonguy/PMRF/blob/master/LICENSE">MIT license</a>.
|
|
|
|
| 200 |
|
| 201 |
📧 **Contact**
|
| 202 |
|