Spaces:
Running
on
Zero
Running
on
Zero
sindhuhegde
commited on
Commit
•
b015d09
1
Parent(s):
c4c6512
Update app
Browse files
app.py
CHANGED
@@ -72,7 +72,6 @@ def bb_intersection_over_union(boxA, boxB):
|
|
72 |
return iou
|
73 |
|
74 |
def track_shot(scenefaces):
|
75 |
-
print("Tracking video...")
|
76 |
iouThres = 0.5 # Minimum IOU between consecutive face detections
|
77 |
tracks = []
|
78 |
|
@@ -128,7 +127,6 @@ def read_video(o, start_idx):
|
|
128 |
return video_stream
|
129 |
|
130 |
def crop_video(avi_dir, tmp_dir, track, cropfile, tight_scale=1):
|
131 |
-
print("Cropping video...")
|
132 |
fourcc = cv2.VideoWriter_fourcc(*'XVID')
|
133 |
vOut = cv2.VideoWriter(cropfile + '.avi', fourcc, frame_rate, (480, 270))
|
134 |
|
@@ -239,7 +237,6 @@ def inference_video(avi_dir, work_dir, padding=0):
|
|
239 |
return dets
|
240 |
|
241 |
def scene_detect(avi_dir, work_dir):
|
242 |
-
print("Detecting scenes in the video...")
|
243 |
video_manager = VideoManager([os.path.join(avi_dir, 'video.avi')])
|
244 |
stats_manager = StatsManager()
|
245 |
scene_manager = SceneManager(stats_manager)
|
@@ -300,38 +297,55 @@ def process_video_asd(file, sd_root, work_root, data_root, avi_dir, tmp_dir, wor
|
|
300 |
command = ("ffmpeg -hide_banner -loglevel panic -y -i %s -qscale:v 2 -async 1 -r 25 %s" % (videofile,
|
301 |
os.path.join(avi_dir,
|
302 |
'video.avi')))
|
303 |
-
|
304 |
-
if
|
305 |
-
|
|
|
306 |
|
307 |
command = ("ffmpeg -hide_banner -loglevel panic -y -i %s -ac 1 -vn -acodec pcm_s16le -ar 16000 %s" % (os.path.join(avi_dir,
|
308 |
'video.avi'),
|
309 |
os.path.join(avi_dir,
|
310 |
'audio.wav')))
|
311 |
-
|
312 |
-
if
|
313 |
-
|
|
|
314 |
|
315 |
-
|
|
|
|
|
|
|
|
|
316 |
|
|
|
317 |
try:
|
318 |
scene = scene_detect(avi_dir, work_dir)
|
319 |
-
except
|
320 |
-
|
321 |
-
|
322 |
|
|
|
323 |
allscenes = []
|
324 |
-
|
325 |
-
|
326 |
-
|
|
|
|
|
|
|
|
|
327 |
|
|
|
328 |
alltracks = []
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
|
|
|
|
|
|
|
|
335 |
|
336 |
savepath = os.path.join(work_dir, 'tracks.pckl')
|
337 |
|
@@ -344,6 +358,9 @@ def process_video_asd(file, sd_root, work_root, data_root, avi_dir, tmp_dir, wor
|
|
344 |
copytree(crop_dir, sd_dest_folder)
|
345 |
copytree(work_dir, work_dest_folder)
|
346 |
|
|
|
|
|
|
|
347 |
@spaces.GPU(duration=140)
|
348 |
def preprocess_video(path, result_folder, apply_preprocess, padding=20):
|
349 |
|
@@ -1205,14 +1222,13 @@ def preprocess_asd(video_path, result_folder_input):
|
|
1205 |
crop_dir = os.path.join(data_dir, 'pycrop')
|
1206 |
frames_dir = os.path.join(data_dir, 'pyframes')
|
1207 |
|
1208 |
-
process_video_asd(file, sd_root, work_root, data_root, avi_dir, tmp_dir, work_dir, crop_dir, frames_dir)
|
1209 |
-
|
1210 |
print("Pre-processing the input video...")
|
1211 |
-
status =
|
1212 |
-
|
1213 |
-
|
1214 |
-
return
|
1215 |
-
|
|
|
1216 |
return "success"
|
1217 |
|
1218 |
def process_video_syncoffset(video_path, num_avg_frames, apply_preprocess):
|
|
|
72 |
return iou
|
73 |
|
74 |
def track_shot(scenefaces):
|
|
|
75 |
iouThres = 0.5 # Minimum IOU between consecutive face detections
|
76 |
tracks = []
|
77 |
|
|
|
127 |
return video_stream
|
128 |
|
129 |
def crop_video(avi_dir, tmp_dir, track, cropfile, tight_scale=1):
|
|
|
130 |
fourcc = cv2.VideoWriter_fourcc(*'XVID')
|
131 |
vOut = cv2.VideoWriter(cropfile + '.avi', fourcc, frame_rate, (480, 270))
|
132 |
|
|
|
237 |
return dets
|
238 |
|
239 |
def scene_detect(avi_dir, work_dir):
|
|
|
240 |
video_manager = VideoManager([os.path.join(avi_dir, 'video.avi')])
|
241 |
stats_manager = StatsManager()
|
242 |
scene_manager = SceneManager(stats_manager)
|
|
|
297 |
command = ("ffmpeg -hide_banner -loglevel panic -y -i %s -qscale:v 2 -async 1 -r 25 %s" % (videofile,
|
298 |
os.path.join(avi_dir,
|
299 |
'video.avi')))
|
300 |
+
status = subprocess.call(command, shell=True, stdout=None)
|
301 |
+
if status != 0:
|
302 |
+
msg = "Error in pre-processing the video, please check the input video and try again"
|
303 |
+
return msg
|
304 |
|
305 |
command = ("ffmpeg -hide_banner -loglevel panic -y -i %s -ac 1 -vn -acodec pcm_s16le -ar 16000 %s" % (os.path.join(avi_dir,
|
306 |
'video.avi'),
|
307 |
os.path.join(avi_dir,
|
308 |
'audio.wav')))
|
309 |
+
status = subprocess.call(command, shell=True, stdout=None)
|
310 |
+
if status != 0:
|
311 |
+
msg = "Error in pre-processing the video, please check the input video and try again"
|
312 |
+
return msg
|
313 |
|
314 |
+
try:
|
315 |
+
faces = inference_video(avi_dir, work_dir)
|
316 |
+
except:
|
317 |
+
msg = "Error in pre-processing the video, please check the input video and try again"
|
318 |
+
return msg
|
319 |
|
320 |
+
print("Detecting scenes in the video...")
|
321 |
try:
|
322 |
scene = scene_detect(avi_dir, work_dir)
|
323 |
+
except:
|
324 |
+
msg = "Error in detecting the scenes in the video, please check the input video and try again"
|
325 |
+
return msg
|
326 |
|
327 |
+
print("Tracking video...")
|
328 |
allscenes = []
|
329 |
+
try:
|
330 |
+
for shot in scene:
|
331 |
+
if shot[1].frame_num - shot[0].frame_num >= min_track:
|
332 |
+
allscenes.append(track_shot(faces[shot[0].frame_num:shot[1].frame_num]))
|
333 |
+
except:
|
334 |
+
msg = "Error in pre-processing the video, please check the input video and try again"
|
335 |
+
return msg
|
336 |
|
337 |
+
print("Cropping video...")
|
338 |
alltracks = []
|
339 |
+
try:
|
340 |
+
for sc_num in range(len(allscenes)):
|
341 |
+
vidtracks = []
|
342 |
+
for ii, track in enumerate(allscenes[sc_num]):
|
343 |
+
os.makedirs(os.path.join(crop_dir, 'scene_'+str(sc_num)), exist_ok=True)
|
344 |
+
vidtracks.append(crop_video(avi_dir, tmp_dir, track, os.path.join(crop_dir, 'scene_'+str(sc_num), '%05d' % ii)))
|
345 |
+
alltracks.append(vidtracks)
|
346 |
+
except:
|
347 |
+
msg = "Error in pre-processing the video, please check the input video and try again"
|
348 |
+
return msg
|
349 |
|
350 |
savepath = os.path.join(work_dir, 'tracks.pckl')
|
351 |
|
|
|
358 |
copytree(crop_dir, sd_dest_folder)
|
359 |
copytree(work_dir, work_dest_folder)
|
360 |
|
361 |
+
return "success"
|
362 |
+
|
363 |
+
|
364 |
@spaces.GPU(duration=140)
|
365 |
def preprocess_video(path, result_folder, apply_preprocess, padding=20):
|
366 |
|
|
|
1222 |
crop_dir = os.path.join(data_dir, 'pycrop')
|
1223 |
frames_dir = os.path.join(data_dir, 'pyframes')
|
1224 |
|
|
|
|
|
1225 |
print("Pre-processing the input video...")
|
1226 |
+
status = process_video_asd(file, sd_root, work_root, data_root, avi_dir, tmp_dir, work_dir, crop_dir, frames_dir)
|
1227 |
+
|
1228 |
+
if status != "success":
|
1229 |
+
return status
|
1230 |
+
print("Successfully pre-processed the video")
|
1231 |
+
|
1232 |
return "success"
|
1233 |
|
1234 |
def process_video_syncoffset(video_path, num_avg_frames, apply_preprocess):
|