def camera_capture(file_name):
    cap = cv2.VideoCapture(0)
    width = int(cap.get(
        cv2.CAP_PROP_FRAME_WIDTH))  # get video frames width and height
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    fps = 30.0
    size = (width, height)

    #Define the codec and create VideoWriter object
    fourcc = cv2.FOURCC(*'XVID')
    out = cv2.VideoWriter("%s.avi" % file_name, fourcc, fps, size)
    while (cap.isOpened()):
        #Capture frame by frame
        ret, frame = cap.read()
        if ret != True:
            break
        out.write(frame)

        #Display the resulting frame
        cv2.imshow('frame', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    out.release()
    try:
        os.remove("%s.mp4" % file_name)
    except:
        pass
    os.rename("%s.avi" % file_name, "%s.mp4" % file_name)
    cv2.destroyAllWindows()
def make_video_from_frames(out_vid_path, frames):
    if frames[0] is not None:
        h, w = frames[0].shape[:2]
        fourcc = cv2.FOURCC('m', 'p', '4', 'v')
        out = cv2.VideoWriter(out_vid_path,fourcc, 20.0, (w, h), True)
        print("Start Making File Video:%s " % out_vid_path)
        print("%d Frames to Compress"%len(frames))
        progress = progressbar.ProgressBar(widgets=[progressbar.Bar('=', '[', ']'), ' ',progressbar.Percentage(), ' ',progressbar.ETA()])
        for i in progress(range(0,len(frames))):
            out.write(frames[i])
        out.release()
        print("Finished Making File Video:%s " % out_vid_path)
Esempio n. 3
0
def download_and_process_video(save_path, row):
    video_id = row['VideoID']
    video_path = row['video_path']
    full_path = os.path.join(save_path, video_path)
    if os.path.exists(full_path):
        return

    start = row['Start']
    end = row['End']

    print("Downloading", "http://youtube.com/watch?v=" + video_id)

    if os.path.exists('tmp.mp4'):
        os.system('rm -f tmp.*')
    subprocess.run(
        "youtube-dl \'https://www.youtube.com/watch?v=" + video_id +
        "' -f \'best[height=360]\' --output 'videos/%(id)s.%(ext)s'",
        stdout=subprocess.PIPE)
    return
    #    try: # 다운로드 포기
    #       youtube = YouTube("http://youtube.com/watch?v="+video_id).stream.filter(subtype='mp4',res='360p').first().download(filename="tmp.mp4")
    #  except Exception as e:
    #     print(e)
    #    return
    #ydl_opts = {'outtmpl': 'tmp.%(ext)s','format': 'best[height=360]','postprocessors': [{
    #      'key': 'FFmpegVideoConvertor',
    #     'preferedformat': 'mp4',  # one of avi, flv, mkv,mp4, ogg, webm
    #        '--strict':'2'
    # }]}
    #with YoutubeDL(ydl_opts) as ydl:
    #   ydl.download(["http://youtube.com/watch?v="+video_id])

    cap = cv2.VideoCapture('tmp.mp4')
    fps = cap.get(cv2.CAP_PROP_FPS)
    fourcc = int(cap.get(cv2.FOURCC(*'XVID')))
    w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

    out = cv2.VideoWriter(full_path, fourcc, fps, (w, h))

    start_frame = int(fps * start)
    end_frame = int(fps * end)

    frame_count = 0
    while frame_count < end_frame:
        ret, frame = cap.read()
        frame_count += 1

        if frame_count >= start_frame:
            out.write(frame)

    cap.release()
    out.release()
Esempio n. 4
0
    def save(self,
             file_name,
             to32=True,
             order='F',
             imagej=False,
             bigtiff=True,
             excitation_lambda=488.0,
             compress=0,
             q_max=99.75,
             q_min=1,
             var_name_hdf5='mov',
             sess_desc='some_description',
             identifier='some identifier',
             imaging_plane_description='some imaging plane description',
             emission_lambda=520.0,
             indicator='OGB-1',
             location='brain',
             starting_time=0.,
             experimenter='Dr Who',
             lab_name=None,
             institution=None,
             experiment_description='Experiment Description',
             session_id='Session ID'):
        """
        Save the timeseries in single precision. Supported formats include
        TIFF, NPZ, AVI, MAT, HDF5/H5, MMAP, and NWB

        Args:
            file_name: str
                name of file. Possible formats are tif, avi, npz, mmap and hdf5

            to32: Bool
                whether to transform to 32 bits

            order: 'F' or 'C'
                C or Fortran order

            var_name_hdf5: str
                Name of hdf5 file subdirectory

            q_max, q_min: float in [0, 100]
                percentile for maximum/minimum clipping value if saving as avi
                (If set to None, no automatic scaling to the dynamic range [0, 255] is performed)

        Raises:
            Exception 'Extension Unknown'

        """
        name, extension = os.path.splitext(file_name)[:2]
        extension = extension.lower()
        logging.debug("Parsing extension " + str(extension))

        if extension in ['.tif', '.tiff', '.btf']:
            with tifffile.TiffWriter(file_name, bigtiff=bigtiff,
                                     imagej=imagej) as tif:
                for i in range(self.shape[0]):
                    if i % 200 == 0:
                        logging.debug(str(i) + ' frames saved')

                    curfr = self[i].copy()
                    if to32 and not ('float32' in str(self.dtype)):
                        curfr = curfr.astype(np.float32)
                    tif.save(curfr, compress=compress)
        elif extension == '.npz':
            if to32 and not ('float32' in str(self.dtype)):
                input_arr = self.astype(np.float32)
            else:
                input_arr = np.array(self)

            np.savez(file_name,
                     input_arr=input_arr,
                     start_time=self.start_time,
                     fr=self.fr,
                     meta_data=self.meta_data,
                     file_name=self.file_name)
        elif extension == '.avi':
            codec = None
            try:
                codec = cv2.FOURCC('I', 'Y', 'U', 'V')
            except AttributeError:
                codec = cv2.VideoWriter_fourcc(*'IYUV')
            if q_max is None or q_min is None:
                data = self.astype(np.uint8)
            else:
                if q_max < 100:
                    maxmov = np.nanpercentile(self[::max(1,
                                                         len(self) // 100)],
                                              q_max)
                else:
                    maxmov = np.nanmax(self)
                if q_min > 0:
                    minmov = np.nanpercentile(self[::max(1,
                                                         len(self) // 100)],
                                              q_min)
                else:
                    minmov = np.nanmin(self)
                data = 255 * (self - minmov) / (maxmov - minmov)
                np.clip(data, 0, 255, data)
                data = data.astype(np.uint8)

            y, x = data[0].shape
            vw = cv2.VideoWriter(file_name,
                                 codec,
                                 self.fr, (x, y),
                                 isColor=True)
            for d in data:
                vw.write(cv2.cvtColor(d, cv2.COLOR_GRAY2BGR))
            vw.release()

        elif extension == '.mat':
            if self.file_name[0] is not None:
                f_name = self.file_name
            else:
                f_name = ''

            if to32 and not ('float32' in str(self.dtype)):
                input_arr = self.astype(np.float32)
            else:
                input_arr = np.array(self)

            if self.meta_data[0] is None:
                savemat(
                    file_name, {
                        'input_arr': np.rollaxis(input_arr, axis=0, start=3),
                        'start_time': self.start_time,
                        'fr': self.fr,
                        'meta_data': [],
                        'file_name': f_name
                    })
            else:
                savemat(
                    file_name, {
                        'input_arr': np.rollaxis(input_arr, axis=0, start=3),
                        'start_time': self.start_time,
                        'fr': self.fr,
                        'meta_data': self.meta_data,
                        'file_name': f_name
                    })

        elif extension in ('.hdf5', '.h5'):
            with h5py.File(file_name, "w") as f:
                if to32 and not ('float32' in str(self.dtype)):
                    input_arr = self.astype(np.float32)
                else:
                    input_arr = np.array(self)

                dset = f.create_dataset(var_name_hdf5, data=input_arr)
                dset.attrs["fr"] = self.fr
                dset.attrs["start_time"] = self.start_time
                try:
                    dset.attrs["file_name"] = [
                        a.encode('utf8') for a in self.file_name
                    ]
                except:
                    logging.warning('No file saved')
                if self.meta_data[0] is not None:
                    logging.debug("Metadata for saved file: " +
                                  str(self.meta_data))
                    dset.attrs["meta_data"] = cpk.dumps(self.meta_data)
        elif extension == '.mmap':
            base_name = name

            T = self.shape[0]
            dims = self.shape[1:]
            if to32 and not ('float32' in str(self.dtype)):
                input_arr = self.astype(np.float32)
            else:
                input_arr = np.array(self)

            input_arr = np.transpose(input_arr,
                                     list(range(1,
                                                len(dims) + 1)) + [0])
            input_arr = np.reshape(input_arr, (np.prod(dims), T), order='F')

            fname_tot = memmap_frames_filename(base_name, dims, T, order)
            fname_tot = os.path.join(os.path.split(file_name)[0], fname_tot)
            big_mov = np.memmap(fname_tot,
                                mode='w+',
                                dtype=np.float32,
                                shape=(np.uint64(np.prod(dims)), np.uint64(T)),
                                order=order)

            big_mov[:] = np.asarray(input_arr, dtype=np.float32)
            big_mov.flush()
            del big_mov, input_arr
            return fname_tot
        elif extension == '.nwb':
            if to32 and not ('float32' in str(self.dtype)):
                input_arr = self.astype(np.float32)
            else:
                input_arr = np.array(self)
            # Create NWB file
            nwbfile = NWBFile(sess_desc,
                              identifier,
                              datetime.now(tzlocal()),
                              experimenter=experimenter,
                              lab=lab_name,
                              institution=institution,
                              experiment_description=experiment_description,
                              session_id=session_id)
            # Get the device
            device = Device('imaging_device')
            nwbfile.add_device(device)
            # OpticalChannel
            optical_channel = OpticalChannel('OpticalChannel',
                                             'main optical channel',
                                             emission_lambda=emission_lambda)
            imaging_plane = nwbfile.create_imaging_plane(
                name='ImagingPlane',
                optical_channel=optical_channel,
                description=imaging_plane_description,
                device=device,
                excitation_lambda=excitation_lambda,
                imaging_rate=self.fr,
                indicator=indicator,
                location=location)
            # Images
            image_series = TwoPhotonSeries(name=var_name_hdf5,
                                           dimension=self.shape[1:],
                                           data=input_arr,
                                           imaging_plane=imaging_plane,
                                           starting_frame=[0],
                                           starting_time=starting_time,
                                           rate=self.fr)

            nwbfile.add_acquisition(image_series)

            with NWBHDF5IO(file_name, 'w') as io:
                io.write(nwbfile)

            return file_name

        else:
            logging.error("Extension " + str(extension) + " unknown")
            raise Exception('Extension Unknown')
Esempio n. 5
0
    def save(self, file_name, to32=True, order='F'):
        """
        Save the timeseries in various formats

        parameters:
        ----------
        file_name: str
            name of file. Possible formats are tif, avi, npz and hdf5

        to32: Bool
            whether to transform to 32 bits

                order: 'F' or 'C'
                        C or Fortran order

        Raise:
        -----
        raise Exception('Extension Unknown')

        """
        name, extension = os.path.splitext(file_name)[:2]
        print(extension)

        if extension == '.tif':  # load avi file
            try:

                from tifffile import imsave
                print('tifffile package not found, using skimage instead for imsave')

            except:

                from skimage.external.tifffile import imsave
            if to32:
                np.clip(self, np.percentile(self, 1),
                        np.percentile(self, 99.99999), self)
                minn, maxx = np.min(self), np.max(self)
                data = 65536 * (self - minn) / (maxx - minn)
                data = data.astype(np.int32)
                imsave(file_name, self.astype(np.float32))
            else:
                imsave(file_name, self)

        elif extension == '.npz':
            np.savez(file_name, input_arr=self, start_time=self.start_time,
                     fr=self.fr, meta_data=self.meta_data, file_name=self.file_name)

        elif extension == '.avi':
            codec = None
            try:
                codec = cv2.FOURCC('I', 'Y', 'U', 'V')
            except AttributeError:
                codec = cv2.VideoWriter_fourcc(*'IYUV')
            np.clip(self, np.percentile(self, 1),
                    np.percentile(self, 99), self)
            minn, maxx = np.min(self), np.max(self)
            data = 255 * (self - minn) / (maxx - minn)
            data = data.astype(np.uint8)
            y, x = data[0].shape
            vw = cv2.VideoWriter(file_name, codec, self.fr,
                                 (x, y), isColor=True)
            for d in data:
                vw.write(cv2.cvtColor(d, cv2.COLOR_GRAY2BGR))
            vw.release()

        elif extension == '.mat':
            if self.file_name[0] is not None:
                f_name = self.file_name
            else:
                f_name = ''
            if self.meta_data[0] is None:
                savemat(file_name, {'input_arr': np.rollaxis(
                    self, axis=0, start=3), 'start_time': self.start_time, 'fr': self.fr, 'meta_data': [], 'file_name': f_name})
            else:
                savemat(file_name, {'input_arr': np.rollaxis(
                    self, axis=0, start=3), 'start_time': self.start_time, 'fr': self.fr, 'meta_data': self.meta_data, 'file_name': f_name})

        elif extension == '.hdf5':
            with h5py.File(file_name, "w") as f:
                dset = f.create_dataset("mov", data=np.asarray(self))
                dset.attrs["fr"] = self.fr
                dset.attrs["start_time"] = self.start_time
                try:
                    dset.attrs["file_name"] = [
                        a.encode('utf8') for a in self.file_name]
                except:
                    print('No file name saved')
                if self.meta_data[0] is not None:
                    print(self.meta_data)
                    dset.attrs["meta_data"] = cpk.dumps(self.meta_data)

        elif extension == '.mmap':
            base_name = name

            T = self.shape[0]
            dims = self.shape[1:]
            Yr = np.transpose(self, list(range(1, len(dims) + 1)) + [0])
            Yr = np.reshape(Yr, (np.prod(dims), T), order='F')

            fname_tot = base_name + '_d1_' + str(dims[0]) + '_d2_' + str(dims[1]) + '_d3_' + str(
                1 if len(dims) == 2 else dims[2]) + '_order_' + str(order) + '_frames_' + str(T) + '_.mmap'
            fname_tot = os.path.join(os.path.split(file_name)[0], fname_tot)
            big_mov = np.memmap(fname_tot, mode='w+', dtype=np.float32,
                                shape=(np.prod(dims), T), order=order)

            big_mov[:] = np.asarray(Yr, dtype=np.float32)
            big_mov.flush()
            del big_mov
            return fname_tot

        else:
            print(extension)
            raise Exception('Extension Unknown')
Esempio n. 6
0
    def save(self, file_name, to32=True, order='F',imagej=False, bigtiff=True, software='CaImAn', compress=0):
        """
        Save the timeseries in various formats

        Args:
            file_name: str
                name of file. Possible formats are tif, avi, npz, mmap and hdf5

            to32: Bool
                whether to transform to 32 bits

            order: 'F' or 'C'
                C or Fortran order

        Raises:
            Exception 'Extension Unknown'

        """
        name, extension = os.path.splitext(file_name)[:2]
        extension = extension.lower()
        logging.debug("Parsing extension " + str(extension))

        if extension == '.tif':  # load avi file

            with tifffile.TiffWriter(file_name, bigtiff=bigtiff, imagej=imagej) as tif:


                for i in range(self.shape[0]):
                    if i % 200 == 0:
                        logging.debug(str(i) + ' frames saved')

                    curfr = self[i].copy()
                    if to32 and not('float32' in str(self.dtype)):
                         curfr = curfr.astype(np.float32)

                    tif.save(curfr, compress=compress)



        elif extension == '.npz':
            if to32 and not('float32' in str(self.dtype)):
                input_arr = self.astype(np.float32)
            else:
                input_arr = np.array(self)

            np.savez(file_name, input_arr=input_arr, start_time=self.start_time,
                     fr=self.fr, meta_data=self.meta_data, file_name=self.file_name)

        elif extension == '.avi':
            codec = None
            try:
                codec = cv2.FOURCC('I', 'Y', 'U', 'V')
            except AttributeError:
                codec = cv2.VideoWriter_fourcc(*'IYUV')
            np.clip(self, np.percentile(self, 1),
                    np.percentile(self, 99), self)
            minn, maxx = np.min(self), np.max(self)
            data = 255 * (self - minn) / (maxx - minn)
            data = data.astype(np.uint8)
            y, x = data[0].shape
            vw = cv2.VideoWriter(file_name, codec, self.fr,
                                 (x, y), isColor=True)
            for d in data:
                vw.write(cv2.cvtColor(d, cv2.COLOR_GRAY2BGR))
            vw.release()

        elif extension == '.mat':
            if self.file_name[0] is not None:
                f_name = self.file_name
            else:
                f_name = ''

            if to32 and not('float32' in str(self.dtype)):
                input_arr = self.astype(np.float32)
            else:
                input_arr = np.array(self)

            if self.meta_data[0] is None:
                savemat(file_name, {'input_arr': np.rollaxis(
                    input_arr, axis=0, start=3), 'start_time': self.start_time, 'fr': self.fr, 'meta_data': [], 'file_name': f_name})
            else:
                savemat(file_name, {'input_arr': np.rollaxis(
                    input_arr, axis=0, start=3), 'start_time': self.start_time, 'fr': self.fr, 'meta_data': self.meta_data, 'file_name': f_name})

        elif extension in ('.hdf5', '.h5'):
            with h5py.File(file_name, "w") as f:
                if to32 and not('float32' in str(self.dtype)):
                    input_arr = self.astype(np.float32)
                else:
                    input_arr = np.array(self)

                dset = f.create_dataset("mov", data=input_arr)
                dset.attrs["fr"] = self.fr
                dset.attrs["start_time"] = self.start_time
                try:
                    dset.attrs["file_name"] = [
                        a.encode('utf8') for a in self.file_name]
                except:
                    logging.warning('No file saved')
                if self.meta_data[0] is not None:
                    logging.debug("Metadata for saved file: " + str(self.meta_data))
                    dset.attrs["meta_data"] = cpk.dumps(self.meta_data)

        elif extension == '.mmap':
            base_name = name

            T = self.shape[0]
            dims = self.shape[1:]
            if to32 and not('float32' in str(self.dtype)):
                input_arr = self.astype(np.float32)
            else:
                input_arr = np.array(self)

            input_arr = np.transpose(input_arr, list(range(1, len(dims) + 1)) + [0])
            input_arr = np.reshape(input_arr, (np.prod(dims), T), order='F')

            fname_tot = base_name + '_d1_' + str(dims[0]) + '_d2_' + str(dims[1]) + '_d3_' + str(
                1 if len(dims) == 2 else dims[2]) + '_order_' + str(order) + '_frames_' + str(T) + '_.mmap'
            fname_tot = os.path.join(os.path.split(file_name)[0], fname_tot)
            big_mov = np.memmap(fname_tot, mode='w+', dtype=np.float32,
                                shape=(np.uint64(np.prod(dims)), np.uint64(T)), order=order)

            big_mov[:] = np.asarray(input_arr, dtype=np.float32)
            big_mov.flush()
            del big_mov, input_arr
            return fname_tot

        else:
            logging.error("Extension " + str(extension) + " unknown")
            raise Exception('Extension Unknown')
Esempio n. 7
0
input_dir = sys.argv[1]
output_dir = sys.argv[2]

if output_dir.endswith('/'):
    output_dir = output_dir[:-1]

i = 0
total = 0
for root, dirs, files in os.walk(input_dir):
    videos = filter(lambda x: x.lower().endswith('.avi') or x.lower().endswith('.mp4'), files)
    total += len( videos)

if cv2.__version__[0] == '2':
    fourcc = cv2.cv.CV_FOURCC(*'HFYU')  # Huffman lossless
else:
    fourcc = cv2.FOURCC(*'HFYU')

for root, dirs, files in os.walk(input_dir):
    videos = filter(lambda x: x.lower().endswith('.avi') or x.lower().endswith('.mp4'), files)
    if len(videos) > 0:
        videos = sorted(videos)
        for j, video in enumerate(videos): 
            in_file = join(root, video)
            out_file = join(root.replace(input_dir, output_dir, 1), video)
            out_dir = os.path.dirname(out_file)
            print "(%d/%d) Generating to %s" % (i+j+1, total, out_file)
            if not os.path.exists(out_dir):
                os.makedirs(out_dir)

            threshold = MSE_THRESHOLD
            while True:
    wid = int(img.shape[1]) #3
    hei = int(img.shape[0]) #4
    total_size = len(input_files)
else:
    try:
        param_input = int(param_input)
        cap = cv2.VideoCapture(param_input)
    except ValueError:
        cap = cv2.VideoCapture(param_input)
        int(cap.get(cv2.CAP_PROP_FPS))
        pass
    wid = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) #3
    hei = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) #4

if args.output and not args.folders:
    fourcc = cv2.FOURCC(*'MPEG')
    wrt = cv2.VideoWriter(param_output,fourcc,fps,(wid,hei))

if args.delay:
    delay=100

output = np.zeros(shape=(hei,wid), dtype=np.uint8)
thresh = np.zeros(shape=(hei,wid,3), dtype=np.float32)

cf1 = np.zeros(shape=(hei,wid), dtype=np.uint8)
cf2 = np.zeros(shape=(hei,wid), dtype=np.uint8)
cf3 = np.zeros(shape=(hei,wid), dtype=np.uint8)

f1 = np.zeros(shape=(hei,wid), dtype=np.uint8)
f2 = np.zeros(shape=(hei,wid), dtype=np.uint8)
f3 = np.zeros(shape=(hei,wid), dtype=np.uint8)