Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -20,6 +20,8 @@ from depth_anything.dpt import DepthAnything
|
|
20 |
from depth_anything.util.transform import Resize, NormalizeImage, PrepareForNet
|
21 |
from moviepy.editor import *
|
22 |
|
|
|
|
|
23 |
frame_selected = 0
|
24 |
frames = []
|
25 |
depths = []
|
@@ -173,6 +175,7 @@ def make_video(video_path, outdir='./vis_video_depth', encoder='vits'):
|
|
173 |
# out.release()
|
174 |
cv2.destroyAllWindows()
|
175 |
|
|
|
176 |
global frame_selected
|
177 |
global depths
|
178 |
global frames
|
@@ -182,12 +185,15 @@ def make_video(video_path, outdir='./vis_video_depth', encoder='vits'):
|
|
182 |
if depth_color.shape[0] == 2048: #height
|
183 |
masks[len(masks)-1] = './gradient_large.png'
|
184 |
depth_frames[len(masks)-1] = './gradient_large.png'
|
|
|
185 |
elif depth_color.shape[0] == 1024:
|
186 |
masks[len(masks)-1] = './gradient.png'
|
187 |
depth_frames[len(masks)-1] = './gradient.png'
|
|
|
188 |
else:
|
189 |
masks[len(masks)-1] = './gradient_small.png'
|
190 |
depth_frames[len(masks)-1] = './gradient_small.png'
|
|
|
191 |
|
192 |
return final_vid, final_zip, frames, masks[frame_selected] #output_path
|
193 |
|
@@ -347,56 +353,60 @@ def switch_rows(v):
|
|
347 |
print(frames[0])
|
348 |
return frames
|
349 |
|
350 |
-
def draw_mask(f,
|
|
|
351 |
global frame_selected
|
352 |
global masks
|
|
|
353 |
|
354 |
points = json.loads(v)
|
355 |
pts = np.array(points, np.int32)
|
356 |
pts = pts.reshape((-1,1,2))
|
357 |
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
gradient = cv2.imread(f[1]).astype(np.uint8)
|
362 |
-
else:
|
363 |
-
gradient = cv2.imread(f[2]).astype(np.uint8)
|
364 |
-
|
365 |
-
if len(d["layers"]) == 1:
|
366 |
-
d["layers"].append(np.zeros_like(d["layers"][0]))
|
367 |
-
else:
|
368 |
-
d["background"] = cv2.imread(masks[frame_selected]).astype(np.uint8)
|
369 |
|
370 |
-
|
|
|
|
|
|
|
|
|
371 |
|
372 |
-
|
373 |
-
mask = cv2.inRange(diff, -int(c/2), int(c/2))
|
374 |
-
#kernel = np.ones((k,k),np.float32)/(k*k)
|
375 |
-
#mask = cv2.filter2D(mask,-1,kernel)
|
376 |
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
palette = quantiz[color_levels]
|
382 |
|
383 |
-
|
384 |
-
|
385 |
-
|
|
|
|
|
386 |
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
|
395 |
-
|
396 |
-
|
|
|
|
|
|
|
397 |
|
398 |
-
|
399 |
-
|
|
|
|
|
|
|
|
|
|
|
400 |
|
401 |
x = points[len(points)-1][0]
|
402 |
y = points[len(points)-1][1]
|
|
|
20 |
from depth_anything.util.transform import Resize, NormalizeImage, PrepareForNet
|
21 |
from moviepy.editor import *
|
22 |
|
23 |
+
gradient = None
|
24 |
+
params = { fnum:0, l:16, c:3, k:7 }
|
25 |
frame_selected = 0
|
26 |
frames = []
|
27 |
depths = []
|
|
|
175 |
# out.release()
|
176 |
cv2.destroyAllWindows()
|
177 |
|
178 |
+
global gradient
|
179 |
global frame_selected
|
180 |
global depths
|
181 |
global frames
|
|
|
185 |
if depth_color.shape[0] == 2048: #height
|
186 |
masks[len(masks)-1] = './gradient_large.png'
|
187 |
depth_frames[len(masks)-1] = './gradient_large.png'
|
188 |
+
gradient = cv2.imread('./gradient_large.png').astype(np.uint8)
|
189 |
elif depth_color.shape[0] == 1024:
|
190 |
masks[len(masks)-1] = './gradient.png'
|
191 |
depth_frames[len(masks)-1] = './gradient.png'
|
192 |
+
gradient = cv2.imread('./gradient.png').astype(np.uint8)
|
193 |
else:
|
194 |
masks[len(masks)-1] = './gradient_small.png'
|
195 |
depth_frames[len(masks)-1] = './gradient_small.png'
|
196 |
+
gradient = cv2.imread('./gradient_small.png').astype(np.uint8)
|
197 |
|
198 |
return final_vid, final_zip, frames, masks[frame_selected] #output_path
|
199 |
|
|
|
353 |
print(frames[0])
|
354 |
return frames
|
355 |
|
356 |
+
def draw_mask(f, l, c, k, v, d, evt: gr.EventData):
|
357 |
+
global params
|
358 |
global frame_selected
|
359 |
global masks
|
360 |
+
global gradient
|
361 |
|
362 |
points = json.loads(v)
|
363 |
pts = np.array(points, np.int32)
|
364 |
pts = pts.reshape((-1,1,2))
|
365 |
|
366 |
+
scale = 1
|
367 |
+
delta = 0
|
368 |
+
ddepth = cv2.CV_16S
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
369 |
|
370 |
+
if len(d["layers"]) == 1 or params["fnum"] != frame_selected or params["l"] != l or params["c"] != c or params["k"] != k:
|
371 |
+
if len(d["layers"]) == 1:
|
372 |
+
d["layers"].append(np.zeros_like(d["layers"][0]))
|
373 |
+
else:
|
374 |
+
d["background"] = cv2.imread(masks[frame_selected]).astype(np.uint8)
|
375 |
|
376 |
+
bg = cv2.cvtColor(d["background"], cv2.COLOR_RGBA2GRAY)
|
|
|
|
|
|
|
377 |
|
378 |
+
diff = (bg-cv2.cvtColor(gradient, cv2.COLOR_RGBA2GRAY)).astype(np.uint8)
|
379 |
+
mask = cv2.inRange(diff, -int(c/2), int(c/2))
|
380 |
+
#kernel = np.ones((k,k),np.float32)/(k*k)
|
381 |
+
#mask = cv2.filter2D(mask,-1,kernel)
|
|
|
382 |
|
383 |
+
indices = np.arange(0,256) # List of all colors
|
384 |
+
divider = np.linspace(0,255,l+1)[1] # we get a divider
|
385 |
+
quantiz = np.int0(np.linspace(0,255,l)) # we get quantization colors
|
386 |
+
color_levels = np.clip(np.int0(indices/divider),0,l-1) # color levels 0,1,2..
|
387 |
+
palette = quantiz[color_levels]
|
388 |
|
389 |
+
#for i in range(l):
|
390 |
+
# bg[(bg >= i*255/l) & (bg < (i+1)*255/l)] = i*255/(l-1)
|
391 |
+
bg = cv2.convertScaleAbs(palette[bg] + mask).astype(np.uint8) # Converting image back to uint
|
392 |
|
393 |
+
grad_x = cv2.convertScaleAbs(cv2.Sobel(bg, ddepth, 1, 0, ksize=3, scale=scale, delta=delta, borderType=cv2.BORDER_DEFAULT))
|
394 |
+
grad_y = cv2.convertScaleAbs(cv2.Sobel(bg, ddepth, 0, 1, ksize=3, scale=scale, delta=delta, borderType=cv2.BORDER_DEFAULT))
|
395 |
+
grad_z = cv2.convertScaleAbs(cv2.Sobel(bg, ddepth, 1, 1, ksize=3, scale=scale, delta=delta, borderType=cv2.BORDER_DEFAULT))
|
396 |
|
397 |
+
grad = cv2.addWeighted(grad_x, 0.5, grad_y, 0.5, 0)
|
398 |
+
grad = cv2.addWeighted(grad, 0.5, grad_z, 0.5, 0)
|
399 |
+
|
400 |
+
mask = mask + cv2.inRange(grad, 1, 255)
|
401 |
+
bg[mask>0] = 255
|
402 |
|
403 |
+
params["fnum"] = frame_selected
|
404 |
+
params["l"] = l
|
405 |
+
params["c"] = c
|
406 |
+
params["k"] = k
|
407 |
+
else:
|
408 |
+
bg = cv2.cvtColor(d["layers"][0], cv2.COLOR_RGBA2GRAY)
|
409 |
+
mask = cv2.inRange(bg, 255, 255)
|
410 |
|
411 |
x = points[len(points)-1][0]
|
412 |
y = points[len(points)-1][1]
|