freealise commited on
Commit
e5c1b37
·
verified ·
1 Parent(s): ec0d6ef

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -14
app.py CHANGED
@@ -140,21 +140,24 @@ def remove_bg(fl):
140
  frame = cv2.imread(fl).astype(np.uint8)
141
 
142
  b = 5
143
- #subtract background (get scene with shadow) and correct hue against light
144
  bg = cv2.medianBlur(frame, 255)
 
 
 
 
 
 
 
 
 
145
  bg_gray = cv2.cvtColor(cv2.cvtColor(bg, cv2.COLOR_BGR2GRAY), cv2.COLOR_GRAY2BGR)
146
  bg_diff = (bg-bg_gray).astype(np.int16)
147
- frame_ = ((bg.astype(np.int16)-frame.astype(np.int16))+127).astype(np.uint8)
148
  frame = (frame.astype(np.int16)-bg_diff).astype(np.uint8)
149
- frame_ = cv2.bilateralFilter(frame_, b*4, b*8, b*2)
150
 
151
  #remove regions of low saturation (get scene without shadow)
152
- mask = cv2.cvtColor(frame, cv2.COLOR_RGB2HSV)
153
- m = cv2.inRange(mask, np.array([0,0,0]), np.array([180,32,256]))
154
  frame[m>0] = (127,127,127)
155
- frame_ = cv2.medianBlur(frame_, b)
156
- element = cv2.getStructuringElement(cv2.MORPH_RECT, (2*b+1, 2*b+1), (b,b))
157
- frame_ = cv2.erode(cv2.dilate(frame_, element), element)
158
  frame = cv2.medianBlur(frame, b)
159
 
160
 
@@ -164,7 +167,7 @@ def remove_bg(fl):
164
  # define criteria, number of clusters(K) and apply kmeans()
165
  criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 16, 1.0)
166
  K = 3
167
- ret,label,center=cv2.kmeans(m_,K,None,criteria,16,cv2.KMEANS_PP_CENTERS)
168
  # Now convert back into uint8, and make original image
169
  center = np.uint8(center)
170
  res = center[label.flatten()]
@@ -172,15 +175,18 @@ def remove_bg(fl):
172
 
173
 
174
  #remove shadows at edges
175
- cv2.rectangle(frame_,(0,0),(frame_.shape[1]-1,frame_.shape[0]-1),(142,142,142),7)
 
 
176
  mask = cv2.floodFill(frame_, None, (0, 0), 255, 0, 0, (4 | cv2.FLOODFILL_FIXED_RANGE))[2] #(4 | cv2.FLOODFILL_FIXED_RANGE | cv2.FLOODFILL_MASK_ONLY | 255 << 8)
177
  # 255 << 8 tells to fill with the value 255)
178
  mask = mask[1:mask.shape[0]-1, 1:mask.shape[1]-1]
179
- frame_[mask>0] = (125,125,125)
180
- frame_[frame_[:,:,0]>=142] = (255,255,255)
 
 
181
 
182
  cv2.imwrite(fl, frame) #frame_
183
-
184
  return fl
185
 
186
  def logscale(linear):
@@ -292,7 +298,7 @@ with gr.Blocks() as demo:
292
 
293
  gr.Examples(
294
  examples=[[["./examples/0.png", "./examples/1.png", "./examples/2.png", "./examples/3.png", "./examples/4.png"], 1, 0]],
295
- fn=infer,
296
  inputs=[files_input, interpolation_slider, fps_output_slider],
297
  outputs=[video_output, file_output],
298
  cache_examples=True
 
140
  frame = cv2.imread(fl).astype(np.uint8)
141
 
142
  b = 5
143
+ #subtract background (get scene with shadow)
144
  bg = cv2.medianBlur(frame, 255)
145
+
146
+ frame_ = ((bg.astype(np.int16)-frame.astype(np.int16))+127).astype(np.uint8)
147
+ frame_ = cv2.bilateralFilter(frame_, b*4, b*8, b*2)
148
+ frame_ = cv2.medianBlur(frame_, b)
149
+
150
+ element = cv2.getStructuringElement(cv2.MORPH_RECT, (2*b+1, 2*b+1), (b,b))
151
+ frame_ = cv2.erode(cv2.dilate(frame_, element), element)
152
+
153
+ #correct hue against light
154
  bg_gray = cv2.cvtColor(cv2.cvtColor(bg, cv2.COLOR_BGR2GRAY), cv2.COLOR_GRAY2BGR)
155
  bg_diff = (bg-bg_gray).astype(np.int16)
 
156
  frame = (frame.astype(np.int16)-bg_diff).astype(np.uint8)
 
157
 
158
  #remove regions of low saturation (get scene without shadow)
159
+ m = cv2.inRange(cv2.cvtColor(frame, cv2.COLOR_RGB2HSV), np.array([0,0,0]), np.array([180,32,256]))
 
160
  frame[m>0] = (127,127,127)
 
 
 
161
  frame = cv2.medianBlur(frame, b)
162
 
163
 
 
167
  # define criteria, number of clusters(K) and apply kmeans()
168
  criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 16, 1.0)
169
  K = 3
170
+ ret,label,center=cv2.kmeans(m_, K, None, criteria, 16, cv2.KMEANS_PP_CENTERS)
171
  # Now convert back into uint8, and make original image
172
  center = np.uint8(center)
173
  res = center[label.flatten()]
 
175
 
176
 
177
  #remove shadows at edges
178
+ m_ = cv2.inRange(frame_, np.array([128,128,128]), np.array([255,255,255]))
179
+ frame_[m_>0] = (255,255,255)
180
+ cv2.rectangle(frame_,(0,0),(frame_.shape[1]-1,frame_.shape[0]-1),(255,255,255),7)
181
  mask = cv2.floodFill(frame_, None, (0, 0), 255, 0, 0, (4 | cv2.FLOODFILL_FIXED_RANGE))[2] #(4 | cv2.FLOODFILL_FIXED_RANGE | cv2.FLOODFILL_MASK_ONLY | 255 << 8)
182
  # 255 << 8 tells to fill with the value 255)
183
  mask = mask[1:mask.shape[0]-1, 1:mask.shape[1]-1]
184
+ frame_[mask>0] = (127,127,127)
185
+ m_ = cv2.inRange(frame_, np.array([0,0,0]), np.array([127,127,127]))
186
+ frame_[m_>0] = (127,127,127)
187
+
188
 
189
  cv2.imwrite(fl, frame) #frame_
 
190
  return fl
191
 
192
  def logscale(linear):
 
298
 
299
  gr.Examples(
300
  examples=[[["./examples/0.png", "./examples/1.png", "./examples/2.png", "./examples/3.png", "./examples/4.png"], 1, 0]],
301
+ fn=loadf,
302
  inputs=[files_input, interpolation_slider, fps_output_slider],
303
  outputs=[video_output, file_output],
304
  cache_examples=True