def run(self): # video = Video(self.video_path) if self.verbose: print("Hello, World!") # print("TESTING: FFMPEG options for video sample enabled!!") w, h = 2336, 1729 # -ss 00:00:02.00 -t 00:00:00.50 video_reader = FFmpeg(self.video_path, "", (1729, 2336, 1), " -vf scale={}:{}".format(w, h)) bg_modeler = BG(model="simpleMax", window_size=50, img_shape=(h, w, 1)) fg_modeler = FG(passThrough=True) pipeline = EZ(video_reader, bg_modeler, fg_modeler).items() experiment_dir = os.path.join(config.experiment_dir, str(self.experiment_uuid)) # io.imsave(os.path.join(experiment_dir, "bg.png"), video.extract_background().squeeze()) magic_pixel = 255 magic_pixel_delta = 0.1 segment_number = -1 i = -1 for item in pipeline: i += 1 if self.stopped(): break else: if self.verbose: print("Processing frame", i) # raw_frame = video.frame(i) # frame = video.normal_frame(i) # print("OLD raw frame stats: shape "+str(raw_frame.shape)+", min/max "+str(np.min(raw_frame))+"/"+str(np.max(raw_frame))) # print("OLD frame stats: shape "+str(frame.shape)+", min/max "+str(np.min(frame))+"/"+str(np.max(frame))) raw_frame = item["frame"] / 250. frame = item["fg"] # print("NEW raw frame stats: shape "+str(raw_frame.shape)+", min/max "+str(np.min(raw_frame))+"/"+str(np.max(raw_frame))) # print("NEW frame stats: shape "+str(frame.shape)+", min/max "+str(np.min(frame))+"/"+str(np.max(frame))) if config.use_magic_pixel_segmentation: this_frame_magic_pixel = raw_frame[0, 4, 0] if abs(this_frame_magic_pixel - magic_pixel) > magic_pixel_delta: if self.verbose: print("Segment Boundry Detected:", i) segment_number += 1 segment = (uuid4(), self.experiment_uuid, segment_number) self.db_writer_queue.put(( "execute", """ INSERT INTO Segment (segment, experiment, number) VALUES ($1, $2, $3) """, segment, )) magic_pixel = this_frame_magic_pixel frame_uuid = uuid4() frame_insert = (frame_uuid, self.experiment_uuid, segment[0], i) self.db_writer_queue.put(( "execute", """ INSERT INTO Frame (frame, experiment, segment, number) VALUES ($1, $2, $3, $4) """, frame_insert, )) # frame = frame[:, crop_side:-crop_side] self.frame_bytes_norm.put(frame.tobytes()) self.frame_queue.put((frame_uuid, i, frame)) self.frame_bytes_norm.put(None) for g in range(config.GPUs): self.frame_queue.put(None) if self.verbose: print("VideoFrameGetter Exiting")
async def detect_video(video_file, date, name="Today", notes=""): cpus = multiprocessing.cpu_count() experiment_uuid = uuid4() experiment_day = dateparse(date) experiment_dir = os.path.join(config.experiment_dir, str(experiment_uuid)) experiment = (experiment_uuid, experiment_day, name, "detection", notes) try: print("Creating data directory", experiment_dir) os.mkdir(experiment_dir) scaleby = 1 w, h = int(2336 / scaleby), int(1729 / scaleby) # Reads the source video, outputs frames print("Launching Video Reader") video_reader = FFmpeg( video_file, "", (h, w, 1), "-ss 00:00:02.00 -t 00:00:00.50 -vf scale={}:{}".format(w, h), [], False, FrameData, ) print("Launching Database processor") db_proc = DB_Processor(experiment_uuid, experiment_day, name, notes) print("Launching Entry processor") entry_proc = Entry(experiment_uuid) print("Launching Magic pixel processor") magic_proc = MagicPixel() print("Launching Rescale processor") rescale_proc = Rescaler() # Computes a background for a frame, outputs {"frame": frame, "bg": bg} print("Launching Background Modeler") bg_proc = BG(model="simpleMax", window_size=50, img_shape=(h, w, 1)) # Takes a background and a frame, enhances frame to model foreground print("Launching Foreground Modeler") fg_proc = FG() # Takes a foreground frame, binarizes it print("Launching Binary Mask Processor") mask_proc = Binary("legacyLabeled") print("Launching Properties Processor") prop_proc = Properties() print("Launching Crop Processor") crop_proc = Crop_Processor() # A utility to view video pipeline output raw_player = RawPlayer() bg_player = BGPlayer() fg_player = FGPlayer() mask_player = MaskPlayer() crop_player = CropPlayer() meta_player = MetaPlayer() # A utility to clean up datagram resources cleaner = Cleaner() # Todo # print("Launching Crop Writer") # print("Launching Detection Video Writer") # print("Launching Particle Commmitter") # /todo EZ( video_reader, entry_proc, magic_proc, meta_player, rescale_proc, raw_player, bg_proc, fg_proc, mask_proc, cleaner, ).start().join() except Exception as e: print("Uh oh. Something went wrong") traceback.print_exc() # wq.push(None) if os.path.exists(experiment_dir): print("Removing files from", experiment_dir) shutil.rmtree(experiment_dir) else: pass # dbwriter.commit() # wq.push(None) finally: print("Fin.") return experiment_uuid
#sub_frame = (frame_bg["frame"].astype('float32') - frame_bg["bg"].astype('float32')).clip(0,255).astype('uint8') sub_frame = np.float64(255 - (np.absolute( np.int16(frame_bg["frame"]) - np.int16(frame_bg["bg"])))) sub_frame -= sub_frame.min() sub_frame *= 255.0 / sub_frame.max() self.put(np.uint8(sub_frame)) scaleby = 1 #w, h = int(2336/scaleby), int(1729/scaleby) w, h = int(1920 / scaleby), int(1080 / scaleby) #vid = "../data/source/BU-2015-10-14/T02578.avi" #vid = "../data/experiments/a5f4681c-9e28-4a49-a370-ccadf6d47ef1/raw.mp4" vid = "/home/datasets/mot17/train/MOT17-02-DPM/img1/video.mp4" EZ( FFmpeg(vid, "-ss 0", (h, w, 3), "-vf scale={}:{}".format(w, h)), Seq(As(6, BG, model='splitmedian', window_size=20, img_shape=(h, w, 3))), #Seq(tuple(BG(model='ae', window_size=15, img_shape=(h, w,3), env={"CUDA_VISIBLE_DEVICES":str(i)}) for i in range(4))), BGPlayer(), #Seq(As(2, FrameSubtractor)), Seq(As(2, FrameDivider)), #Seq(As(16, F)), VideoPlayer(), FFmpeg((h, w, 3), [], "../data/ae_bg/b2d.avi", "-c:v libx264 -preset slow -crf 17", "-y"), Stamp()).daemonize().watch().start().join()
async def detect_video(video_file, date, name="", notes=""): cpus = multiprocessing.cpu_count() experiment_uuid = uuid4() experiment_day = dateparse(date) experiment_dir = os.path.join(config.experiment_dir, str(experiment_uuid)) experiment = (experiment_uuid, experiment_day, name, "detection", notes) method = "TrackingPrefix DetectionMpyx" def e_handler(e, tb): print("Exception occured:", e) print(tb) try: # print("Creating data directory", experiment_dir) os.mkdir(experiment_dir) w, h = 2336, 1729 ms_metric_cal = 13.94736842 # Reads the source video, outputs frames # -ss 00:00:02.00 -t 00:00:00.50 video_reader = FFmpeg( video_file, "", (h, w, 1), "-vf scale={}:{}".format(w, h), [], False, FrameData, ) csv_proc = CSVWriter(experiment_uuid, experiment_day, name, method, notes) db_proc = DBProcessor(experiment_uuid, experiment_day, name, method, notes) # Computes a background for a frame, outputs {"frame": frame, "bg": bg} bg_proc = BG(model="simpleMax", window_size=20, img_shape=(h, w, 1)) fines_proc = BG( model="rollingMax", window_size=20, img_shape=(h, w, 1), inputProp="div", saveAs="fines", ) # Utilities for viewing various stages of processing. raw_player = RawPlayer() bg_player = BGPlayer() fg_player = FGPlayer() mask_player = MaskPlayer() crop_player = CropPlayer() meta_player = MetaPlayer() # Number of processes to spawn for particular processors n_prop_procs = 10 n_crop_procs = 4 n_binary = 5 n_crop_writer = 10 n_csv_procs = 10 n_deblur_procs = 20 # Main pipeline EZ( video_reader, Counter(), Entry(experiment_uuid, ms_metric_cal), MagicPixel(), Rescaler(scale=1 / 4), Counter("Rescaled"), bg_proc, FG(saveAs="div"), fines_proc, Counter("fines"), FG("finesDivision", saveAs="fg"), Seq( # As(n_deblur_procs, Deblur), As(n_binary, Binary, "legacyLabeled"), As(n_prop_procs, Properties), As(n_crop_procs, Crop_Processor), As(n_crop_writer, CropWriter, experiment_dir), Counter("crops"), As( n_csv_procs, CSVWriter, experiment_uuid, experiment_day, name, method, notes, ), Counter("csv"), ), db_proc, Counter("db"), Passthrough(), PerformanceMonitor({ "Properties": n_prop_procs, "Crop_Processor": n_crop_procs, "Binary": n_binary, "CropWriter": n_crop_writer, "CSVWriter": n_csv_procs, "Deblur": n_deblur_procs, }), Counter("performance"), # raw_player, # bg_player, # fg_player, # mask_player, # MetaPlayer(), ImageSampleWriter(str(experiment_dir), ["bg", "div", "fg", "raw", "mask", "fines"]), Counter("samplewriter"), Cleaner(), # qsize=10, ).catch(e_handler).start().join() except Exception as e: print("Uh oh. Something went wrong") traceback.print_exc() if os.path.exists(experiment_dir): print("Removing files from", experiment_dir) shutil.rmtree(experiment_dir) else: pass finally: pass # print("Fin.") return experiment_uuid
def run(self): # video = Video(self.video_path) if self.verbose: print("Hello, World!") # print("TESTING: FFMPEG options for video sample enabled!!") w, h = 2336, 1729 # -ss 00:00:02.00 -t 00:00:00.50 video_reader = FFmpeg( self.video_path, "", (1729, 2336, 1), " -ss 00:00:02.00 -t 00:00:00.50 -vf scale={}:{}".format(w, h), ) bg_modeler = BG(model="simpleMax", window_size=50, img_shape=(h, w, 1)) fg_modeler = FG(passThrough=True) pipeline = EZ(video_reader, bg_modeler, fg_modeler).items() experiment_dir = os.path.join(config.experiment_dir, str(self.experiment_uuid)) # io.imsave(os.path.join(experiment_dir, "bg.png"), video.extract_background().squeeze()) magic_pixel = 255 magic_pixel_delta = 0.1 segment_number = -1 i = -1 for item in pipeline: i += 1 if self.stopped(): break else: if self.verbose: print("Processing frame", i) # raw_frame = video.frame(i) # frame = video.normal_frame(i) # print("OLD raw frame stats: shape "+str(raw_frame.shape)+", min/max "+str(np.min(raw_frame))+"/"+str(np.max(raw_frame))) # print("OLD frame stats: shape "+str(frame.shape)+", min/max "+str(np.min(frame))+"/"+str(np.max(frame))) raw_frame = item["frame"] / 250. frame = item["fg"] # print("NEW raw frame stats: shape "+str(raw_frame.shape)+", min/max "+str(np.min(raw_frame))+"/"+str(np.max(raw_frame))) # print("NEW frame stats: shape "+str(frame.shape)+", min/max "+str(np.min(frame))+"/"+str(np.max(frame))) if config.use_magic_pixel_segmentation: this_frame_magic_pixel = raw_frame[0, 4, 0] print("magic:", this_frame_magic_pixel) if abs(this_frame_magic_pixel - magic_pixel) > magic_pixel_delta: if self.verbose: print("Segment Boundry Detected:", i) segment_number += 1 segment = (uuid4(), self.experiment_uuid, segment_number) s = "{}\t{}\t{}\n" with open( "/tmp/{}_segment.csv".format(self.experiment_uuid), "a" ) as f: for g in [segment]: f.write(s.format(g[0], g[1], g[2])) magic_pixel = this_frame_magic_pixel frame_uuid = uuid4() frame_insert = (frame_uuid, self.experiment_uuid, segment[0], i) s = "{}\t{}\t{}\t{}\n" with open("/tmp/{}_frame.csv".format(self.experiment_uuid), "a") as f: for g in [frame_insert]: f.write(s.format(g[0], g[1], g[2], g[3])) # frame = frame[:, crop_side:-crop_side] # import cv2 # cv2.imwrite('/home/mot/tmp/fg_'+str(uuid4())+'.png',frame) self.frame_bytes_norm.put(frame.tobytes()) self.frame_queue.put((frame_uuid, i, frame)) self.frame_bytes_norm.put(None) for g in range(config.GPUs): self.frame_queue.put(None) if self.verbose: print("VideoFrameGetter Exiting")
async def detect_video(video_file, date = "NOW()", name = "Today", notes = ""): # note: "NOW()" may not work. cpus = multiprocessing.cpu_count() experiment_uuid = uuid4() experiment_day = dateparse(date) experiment_dir = os.path.join(config.experiment_dir, str(experiment_uuid)) experiment = (experiment_uuid, experiment_day, name, "detection", notes) try: print("Creating data directory", experiment_dir) os.mkdir(experiment_dir) print("Launching Database Writer") dbwriter = DBWriter() wq = dbwriter.input() dbwriter.start() scaleby = 1 w, h = int(2336/scaleby), int(1729/scaleby) video_reader = FFmpeg(video_file, "", (h, w,3), "-vf scale={}:{}".format(w,h)) raw_compressor = FFmpeg((h, w, 3), "", os.path.join(experiment_dir, "raw.mp4"), "-c:v libx264 -preset slow -crf 17 -movflags +faststart") bg_model = Seq(As(6, BG, model='splitmedian', window_size=20, img_shape=(h, w,3))) EZ( video_reader, {raw_compressor, VideoPlayer()} ).start().watch().join() """ # TODO: EZ(video_reader, {raw_compressor, [segment_detector, bg_model, foreground_extraction, {extraction_compressor, [segmentation_mask, {mask_compressor, [segmentation_properties, get_crops, {crop_writer, [crop_classifier, write_crops] ]}]}]]}}).start().watch().join() """ except Exception as e: print("Uh oh. Something went wrong") traceback.print_exc() dbwriter.rollback() wq.push(None) if os.path.exists(experiment_dir): print("Removing files from", experiment_dir) shutil.rmtree(experiment_dir) else: dbwriter.commit() wq.push(None) finally: print("Fin.") return experiment_uuid
async def detect_video(video_file, date, name="", notes=""): cpus = multiprocessing.cpu_count() experiment_uuid = uuid4() experiment_day = dateparse(date) experiment_dir = os.path.join(config.experiment_dir, str(experiment_uuid)) experiment = (experiment_uuid, experiment_day, name, "detection", notes) method = "detection" try: print("Creating data directory", experiment_dir) os.mkdir(experiment_dir) w, h = 2336, 1729 # Reads the source video, outputs frames # -ss 00:00:02.00 -t 00:00:00.50 print("Launching Video Reader") video_reader = FFmpeg( video_file, "", (h, w, 1), " -vf scale={}:{}".format(w, h), [], False, FrameData, ) print("Launching Database processor") csv_proc = CSVWriter(experiment_uuid, experiment_day, name, method, notes) db_proc = DBProcessor(experiment_uuid, experiment_day, name, method, notes) # Computes a background for a frame, outputs {"frame": frame, "bg": bg} print("Launching Background Modeler") bg_proc = BG(model="simpleMax", window_size=20, img_shape=(h, w, 1)) # Utilities for viewing various stages of processing. raw_player = RawPlayer() bg_player = BGPlayer() fg_player = FGPlayer() mask_player = MaskPlayer() crop_player = CropPlayer() meta_player = MetaPlayer() # A utility to clean up datagram resources cleaner = Cleaner() # Number of processes to spawn for particular processors n_prop_procs = 10 n_crop_procs = 4 n_binary = 5 n_crop_writer = 10 n_csv_procs = 5 # Main pipeline EZ( video_reader, Counter(), Entry(experiment_uuid), MagicPixel(), Rescaler(scale=1 / 1), bg_proc, FG(), Seq( As(n_binary, Binary, "legacyLabeled"), As(n_prop_procs, Properties), As(n_crop_procs, Crop_Processor), As(n_crop_writer, CropWriter, experiment_dir), As( n_csv_procs, CSVWriter, experiment_uuid, experiment_day, name, method, notes, ), ), db_proc, Passthrough(), PerformanceMonitor({ "Properties": n_prop_procs, "Crop_Processor": n_crop_procs, "Binary": n_binary, "CropWriter": n_crop_writer, "CSVWriter": n_csv_procs, }), # raw_player, # bg_player, # fg_player, # mask_player, cleaner, # qsize=10, ).start().join() except Exception as e: print("Uh oh. Something went wrong") traceback.print_exc() if os.path.exists(experiment_dir): print("Removing files from", experiment_dir) shutil.rmtree(experiment_dir) else: pass finally: print("Fin.") return experiment_uuid