wahaha commited on
Commit
01740ec
1 Parent(s): 86527b0
Files changed (1) hide show
  1. app.py +30 -106
app.py CHANGED
@@ -6,82 +6,45 @@ import sys
6
  sys.path.insert(0, 'U-2-Net')
7
 
8
  from skimage import io, transform
9
- import torch
10
- import torchvision
11
- from torch.autograd import Variable
12
- import torch.nn as nn
13
- import torch.nn.functional as F
14
- from torch.utils.data import Dataset, DataLoader
15
- from torchvision import transforms#, utils
16
- # import torch.optim as optim
17
 
18
  import numpy as np
19
  from PIL import Image
20
- import glob
21
 
22
- from data_loader import RescaleT
23
- from data_loader import ToTensor
24
- from data_loader import ToTensorLab
25
- from data_loader import SalObjDataset
26
-
27
- from model import U2NET # full size version 173.6 MB
28
- from model import U2NETP # small version u2net 4.7 MB
29
-
30
- import huggingface_hub
31
  from utils.face_seg import FaceSeg
32
  import cv2
33
 
34
- # normalize the predicted SOD probability map
35
- def normPRED(d):
36
- ma = torch.max(d)
37
- mi = torch.min(d)
38
-
39
- dn = (d-mi)/(ma-mi)
40
-
41
- return dn
42
- def save_output(image_name,pred,d_dir):
43
- predict = pred
44
- predict = predict.squeeze()
45
- predict_np = predict.cpu().data.numpy()
46
-
47
- im = Image.fromarray(predict_np*255).convert('RGB')
48
- img_name = image_name.split(os.sep)[-1]
49
- image = io.imread(image_name)
50
- imo = im.resize((image.shape[1],image.shape[0]),resample=Image.BILINEAR)
51
-
52
- pb_np = np.array(imo)
53
-
54
- aaa = img_name.split(".")
55
- bbb = aaa[0:-1]
56
- imidx = bbb[0]
57
- for i in range(1,len(bbb)):
58
- imidx = imidx + "." + bbb[i]
59
-
60
- imo.save(d_dir+'/'+imidx+'.png')
61
- return d_dir+'/'+imidx+'.png'
62
 
63
  segment = FaceSeg()
64
 
65
- # --------- 1. get image path and name ---------
66
- model_name='u2net_portrait'#u2netp
67
-
68
- image_dir = 'portrait_im'
69
- prediction_dir = 'portrait_results'
70
- if(not os.path.exists(prediction_dir)):
71
- os.mkdir(prediction_dir)
72
-
73
- model_dir = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'U-2-Net/saved_models/u2net_portrait/u2net_portrait.pth')
74
-
75
 
76
- # --------- 3. model define ---------
77
-
78
- print("...load U2NET---173.6 MB")
79
- net = U2NET(3,1)
80
-
81
- net.load_state_dict(torch.load(model_dir, map_location='cpu'))
82
- # if torch.cuda.is_available():
83
- # net.cuda()
84
- net.eval()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
 
86
 
87
  def process(im):
@@ -98,48 +61,9 @@ def process(im):
98
  foreground = image * matte + np.full(image.shape, 255) * (1 - matte)
99
  cv2.imwrite(im.name, foreground)
100
 
101
- img_name_list = [im.name]
102
- print("Number of images: ", len(img_name_list))
103
- # --------- 2. dataloader ---------
104
- # 1. dataloader
105
- test_salobj_dataset = SalObjDataset(img_name_list=img_name_list,
106
- lbl_name_list=[],
107
- transform=transforms.Compose([RescaleT(512),
108
- ToTensorLab(flag=0)])
109
- )
110
- test_salobj_dataloader = DataLoader(test_salobj_dataset,
111
- batch_size=1,
112
- shuffle=False,
113
- num_workers=1)
114
-
115
- results = []
116
- # --------- 4. inference for each image ---------
117
- for i_test, data_test in enumerate(test_salobj_dataloader):
118
-
119
- print("inferencing:", img_name_list[i_test].split(os.sep)[-1])
120
-
121
- inputs_test = data_test['image']
122
- inputs_test = inputs_test.type(torch.FloatTensor)
123
-
124
- # if torch.cuda.is_available():
125
- # inputs_test = Variable(inputs_test.cuda())
126
- # else:
127
- inputs_test = Variable(inputs_test)
128
-
129
- d1, d2, d3, d4, d5, d6, d7 = net(inputs_test)
130
-
131
- # normalization
132
- pred = 1.0 - d1[:, 0, :, :]
133
- pred = normPRED(pred)
134
-
135
- # save results to test_results folder
136
- results.append(save_output(img_name_list[i_test], pred, prediction_dir))
137
-
138
- del d1, d2, d3, d4, d5, d6, d7
139
-
140
- print(results)
141
 
142
- return Image.open(results[0])
143
 
144
  title = "U-2-Net"
145
  description = "Gradio demo for U-2-Net, https://github.com/xuebinqin/U-2-Net"
 
6
  sys.path.insert(0, 'U-2-Net')
7
 
8
  from skimage import io, transform
 
 
 
 
 
 
 
 
9
 
10
  import numpy as np
11
  from PIL import Image
 
12
 
 
 
 
 
 
 
 
 
 
13
  from utils.face_seg import FaceSeg
14
  import cv2
15
 
16
+ import requests
17
+ import base64
18
+ from io import BytesIO
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
 
20
  segment = FaceSeg()
21
 
 
 
 
 
 
 
 
 
 
 
22
 
23
+ def profuai(im_path, out_path):
24
+ r = requests.post(
25
+ 'http://nebula.cs.ualberta.ca/predict',
26
+ files={
27
+ 'file': open(im_path, 'rb'),
28
+ },
29
+ headers={'Host': 'nebula.cs.ualberta.ca', 'Origin': 'http://nebula.cs.ualberta.ca','Referer':'http://nebula.cs.ualberta.ca/',
30
+ 'X-Requested-With':'XMLHttpRequest',
31
+ 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:51.0) Gecko/20100101 Firefox/51.0'}
32
+
33
+ )
34
+ #print(r)
35
+ if (r.status_code == 200):
36
+ data = r.text
37
+ #data:image/png;base64,
38
+ a = data[len("data:image/png;base64,"):]
39
+ missing_padding = 4 - len(a) % 4
40
+ if missing_padding:
41
+ a += '=' * missing_padding
42
+
43
+ img = Image.open(BytesIO(base64.urlsafe_b64decode(a)))
44
+ # print(a)
45
+ img.save(out_path, quality=80)
46
+ else:
47
+ raise Exception('error 1001')
48
 
49
 
50
  def process(im):
 
61
  foreground = image * matte + np.full(image.shape, 255) * (1 - matte)
62
  cv2.imwrite(im.name, foreground)
63
 
64
+ profuai(im.name, im.name)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
 
66
+ return Image.open(im.name)
67
 
68
  title = "U-2-Net"
69
  description = "Gradio demo for U-2-Net, https://github.com/xuebinqin/U-2-Net"