Esempio n. 1
0
    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")
Esempio n. 2
0
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
Esempio n. 3
0
        #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()
Esempio n. 4
0
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
Esempio n. 5
0
    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")
Esempio n. 6
0
File: detect.py Progetto: n17r4m/mot
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
Esempio n. 7
0
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