Update app.py
Browse files
app.py
CHANGED
@@ -1,12 +1,14 @@
|
|
1 |
import os
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
os.system('wget "https://public-vigen-video.oss-cn-shanghai.aliyuncs.com/robin/models/
|
6 |
-
os.system('wget "https://public-vigen-video.oss-cn-shanghai.aliyuncs.com/robin/models/
|
7 |
-
os.system('wget "https://public-vigen-video.oss-cn-shanghai.aliyuncs.com/robin/models/GPEN-
|
8 |
-
|
9 |
-
os.system(
|
|
|
|
|
10 |
|
11 |
import gradio as gr
|
12 |
|
@@ -17,65 +19,10 @@ import gradio as gr
|
|
17 |
import os
|
18 |
import cv2
|
19 |
import glob
|
20 |
-
import time
|
21 |
-
import math
|
22 |
-
import argparse
|
23 |
-
import numpy as np
|
24 |
-
from PIL import Image, ImageDraw
|
25 |
-
import __init_paths
|
26 |
from face_enhancement import FaceEnhancement
|
27 |
from face_colorization import FaceColorization
|
28 |
from face_inpainting import FaceInpainting
|
29 |
-
|
30 |
-
def brush_stroke_mask(img, color=(255,255,255)):
|
31 |
-
min_num_vertex = 8
|
32 |
-
max_num_vertex = 28
|
33 |
-
mean_angle = 2*math.pi / 5
|
34 |
-
angle_range = 2*math.pi / 15
|
35 |
-
min_width = 12
|
36 |
-
max_width = 80
|
37 |
-
def generate_mask(H, W, img=None):
|
38 |
-
average_radius = math.sqrt(H*H+W*W) / 8
|
39 |
-
mask = Image.new('RGB', (W, H), 0)
|
40 |
-
if img is not None: mask = img #Image.fromarray(img)
|
41 |
-
|
42 |
-
for _ in range(np.random.randint(1, 4)):
|
43 |
-
num_vertex = np.random.randint(min_num_vertex, max_num_vertex)
|
44 |
-
angle_min = mean_angle - np.random.uniform(0, angle_range)
|
45 |
-
angle_max = mean_angle + np.random.uniform(0, angle_range)
|
46 |
-
angles = []
|
47 |
-
vertex = []
|
48 |
-
for i in range(num_vertex):
|
49 |
-
if i % 2 == 0:
|
50 |
-
angles.append(2*math.pi - np.random.uniform(angle_min, angle_max))
|
51 |
-
else:
|
52 |
-
angles.append(np.random.uniform(angle_min, angle_max))
|
53 |
-
|
54 |
-
h, w = mask.size
|
55 |
-
vertex.append((int(np.random.randint(0, w)), int(np.random.randint(0, h))))
|
56 |
-
for i in range(num_vertex):
|
57 |
-
r = np.clip(
|
58 |
-
np.random.normal(loc=average_radius, scale=average_radius//2),
|
59 |
-
0, 2*average_radius)
|
60 |
-
new_x = np.clip(vertex[-1][0] + r * math.cos(angles[i]), 0, w)
|
61 |
-
new_y = np.clip(vertex[-1][1] + r * math.sin(angles[i]), 0, h)
|
62 |
-
vertex.append((int(new_x), int(new_y)))
|
63 |
-
|
64 |
-
draw = ImageDraw.Draw(mask)
|
65 |
-
width = int(np.random.uniform(min_width, max_width))
|
66 |
-
draw.line(vertex, fill=color, width=width)
|
67 |
-
for v in vertex:
|
68 |
-
draw.ellipse((v[0] - width//2,
|
69 |
-
v[1] - width//2,
|
70 |
-
v[0] + width//2,
|
71 |
-
v[1] + width//2),
|
72 |
-
fill=color)
|
73 |
-
|
74 |
-
return mask
|
75 |
|
76 |
-
width, height = img.size
|
77 |
-
mask = generate_mask(height, width, img)
|
78 |
-
return mask
|
79 |
|
80 |
def inference(file, mode):
|
81 |
|
@@ -101,7 +48,6 @@ def inference(file, mode):
|
|
101 |
elif mode == "inpainting":
|
102 |
model = {'name':'GPEN-Inpainting-1024', 'size':1024}
|
103 |
faceinpainter = FaceInpainting(size=model['size'], model=model['name'], channel_multiplier=2, device='cpu')
|
104 |
-
im = np.asarray(brush_stroke_mask(Image.fromarray(im)))
|
105 |
inpaint = faceinpainter.process(im)
|
106 |
|
107 |
cv2.imwrite(os.path.join("output.png"), inpaint)
|
@@ -140,4 +86,4 @@ gr.Interface(
|
|
140 |
['selfie.png', 'selfie']
|
141 |
],
|
142 |
enable_queue=True
|
143 |
-
|
|
|
1 |
import os
|
2 |
+
import glob
|
3 |
+
|
4 |
+
if len(glob.glob('weights/*.pth')) != 6:
|
5 |
+
os.system('wget -q "https://public-vigen-video.oss-cn-shanghai.aliyuncs.com/robin/models/RetinaFace-R50.pth?OSSAccessKeyId=LTAI4G6bfnyW4TA4wFUXTYBe&Expires=1961116085&Signature=GlUNW6%2B8FxvxWmE9jKIZYOOciKQ%3D" -O weights/RetinaFace-R50.pth')
|
6 |
+
os.system('wget -q "https://public-vigen-video.oss-cn-shanghai.aliyuncs.com/robin/models/GPEN-BFR-512.pth?OSSAccessKeyId=LTAI4G6bfnyW4TA4wFUXTYBe&Expires=1961116208&Signature=hBgvVvKVSNGeXqT8glG%2Bd2t2OKc%3D" -O weights/GPEN-512.pth')
|
7 |
+
os.system('wget -q "https://public-vigen-video.oss-cn-shanghai.aliyuncs.com/robin/models/GPEN-Colorization-1024.pth?OSSAccessKeyId=LTAI4G6bfnyW4TA4wFUXTYBe&Expires=1961116315&Signature=9tPavW2h%2F1LhIKiXj73sTQoWqcc%3D" -O weights/GPEN-1024-Color.pth ')
|
8 |
+
os.system('wget -q "https://public-vigen-video.oss-cn-shanghai.aliyuncs.com/robin/models/realesrnet_x2.pth?OSSAccessKeyId=LTAI4G6bfnyW4TA4wFUXTYBe&Expires=1962694780&Signature=lI%2FolhA%2FyigiTRvoDIVbtMIyhjI%3D" -O weights/realesrnet_x2.pth ')
|
9 |
+
os.system('wget -q "https://public-vigen-video.oss-cn-shanghai.aliyuncs.com/robin/models/GPEN-Inpainting-1024.pth?OSSAccessKeyId=LTAI4G6bfnyW4TA4wFUXTYBe&Expires=1961116338&Signature=tvYhdLaLgW7UdcUrApXp2jsek8w%3D" -O weights/GPEN-Inpainting-1024.pth ')
|
10 |
+
jksp = os.environ['GPEN-BFR-2048']
|
11 |
+
os.system(f'wget -q "{jksp}" -O weights/GPEN-BFR-2048.pth')
|
12 |
|
13 |
import gradio as gr
|
14 |
|
|
|
19 |
import os
|
20 |
import cv2
|
21 |
import glob
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
from face_enhancement import FaceEnhancement
|
23 |
from face_colorization import FaceColorization
|
24 |
from face_inpainting import FaceInpainting
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
|
|
|
|
|
|
|
26 |
|
27 |
def inference(file, mode):
|
28 |
|
|
|
48 |
elif mode == "inpainting":
|
49 |
model = {'name':'GPEN-Inpainting-1024', 'size':1024}
|
50 |
faceinpainter = FaceInpainting(size=model['size'], model=model['name'], channel_multiplier=2, device='cpu')
|
|
|
51 |
inpaint = faceinpainter.process(im)
|
52 |
|
53 |
cv2.imwrite(os.path.join("output.png"), inpaint)
|
|
|
86 |
['selfie.png', 'selfie']
|
87 |
],
|
88 |
enable_queue=True
|
89 |
+
).launch()
|