def test_append_single(): imgs = [image.Image(fle) for fle in file_list()] cap = capture.Capture(imgs[0]) assert len(cap.images) == 1 for img in imgs[1:]: cap.append_image(img) assert len(cap.images) == 5
def test_append_single(panel_rededge_file_list): imgs = [image.Image(fle) for fle in panel_rededge_file_list] cap = capture.Capture(imgs[0]) assert len(cap.images) == 1 for img in imgs[1:]: cap.append_image(img) assert len(cap.images) == 5
def from_directory(cls, directory, progress_callback=None, exiftool_path=None): """ Create and ImageSet recursively from the files in a directory """ cls.basedir = directory matches = [] for root, dirnames, filenames in os.walk(directory): for filename in fnmatch.filter(filenames, '*.tif'): matches.append(os.path.join(root, filename)) images = [] if exiftool_path is None and os.environ.get( 'exiftoolpath') is not None: exiftool_path = os.path.normpath(os.environ.get('exiftoolpath')) with exiftool.ExifTool(exiftool_path) as exift: for i, path in enumerate(matches): images.append(image.Image(path, exiftool_obj=exift)) if progress_callback is not None: progress_callback(float(i) / float(len(matches))) # create a dictionary to index the images so we can sort them # into captures # { # "capture_id": [img1, img2, ...] # } captures_index = {} for img in images: c = captures_index.get(img.capture_id) if c is not None: c.append(img) else: captures_index[img.capture_id] = [img] captures = [] for cap_imgs in captures_index: imgs = captures_index[cap_imgs] newcap = capture.Capture(imgs) captures.append(newcap) if progress_callback is not None: progress_callback(1.0) return cls(captures)
def from_directory(cls, directory, progress_callback=None): """ Create and ImageSet recursively from the files in a directory """ cls.basedir = directory matches = [] for root, dirnames, filenames in os.walk(directory): for filename in fnmatch.filter(filenames, '*.tif'): matches.append(os.path.join(root, filename)) pool = multiprocessing.Pool(processes=multiprocessing.cpu_count()) images = [] for i,img in enumerate(pool.imap_unordered(image_from_file, matches)): images.append(img) if progress_callback is not None: progress_callback(float(i)/float(len(matches))) pool.close() pool.join() # create a dictionary to index the images so we can sort them # into captures # { # "capture_id": [img1, img2, ...] # } captures_index = {} for img in images: c = captures_index.get(img.capture_id) if c is not None: c.append(img) else: captures_index[img.capture_id] = [img] captures = [] for cap_imgs in captures_index: imgs = captures_index[cap_imgs] newcap = capture.Capture(imgs) captures.append(newcap) if progress_callback is not None: progress_callback(1.0) return cls(captures)
def panel_altum_capture(panel_altum_file_list): imgs = [image.Image(fle) for fle in panel_altum_file_list] return capture.Capture(imgs)
def test_append_list(): imgs = [image.Image(fle) for fle in file_list()] cap = capture.Capture(imgs[0]) assert len(cap.images) == 1 cap.append_images(imgs[1:]) assert len(cap.images) == 5
def test_from_images(): imgs = [image.Image(fle) for fle in file_list()] cap = capture.Capture(imgs) assert cap is not None assert len(cap.images) == len(file_list())
def test_from_images(panel_rededge_file_list): imgs = [image.Image(fle) for fle in panel_rededge_file_list] cap = capture.Capture(imgs) assert cap is not None assert len(cap.images) == len(panel_rededge_file_list)
def test_altum_images(non_panel_altum_file_list): imgs = [image.Image(fle) for fle in non_panel_altum_file_list] cap = capture.Capture(imgs) assert cap is not None assert len(cap.images) == len(non_panel_altum_file_list)
def from_directory(cls, directory, progress_callback=None, use_tqdm=False, exiftool_path=None): """ Create an ImageSet recursively from the files in a directory. :param directory: str system file path :param progress_callback: function to report progress to :param use_tqdm: boolean True to use tqdm progress bar :param exiftool_path: str system file path to exiftool location :return: ImageSet instance """ # progress_callback deprecation warning if progress_callback is not None: warnings.warn(message='The progress_callback parameter will be deprecated in favor of use_tqdm', category=PendingDeprecationWarning) # ensure exiftoolpath is found per MicaSense setup instructions if exiftool_path is None and os.environ.get('exiftoolpath') is not None: exiftool_path = os.path.normpath(os.environ.get('exiftoolpath')) cls.basedir = directory matches = [] for root, _, filenames in os.walk(directory): [matches.append(os.path.join(root, filename)) for filename in fnmatch.filter(filenames, '*.tif')] images = [] with exiftool.ExifTool(exiftool_path) as exift: if use_tqdm: # to use tqdm progress bar instead of progress_callback kwargs = { 'total': len(matches), 'unit': ' Files', 'unit_scale': False, 'leave': True } for path in tqdm(iterable=matches, desc='Loading ImageSet', **kwargs): images.append(image.Image(path, exiftool_obj=exift)) else: print('Loading ImageSet from: {}'.format(directory)) for i, path in enumerate(matches): images.append(image.Image(path, exiftool_obj=exift)) if progress_callback is not None: progress_callback(float(i) / float(len(matches))) # create a dictionary to index the images so we can sort them into captures # { # "capture_id": [img1, img2, ...] # } captures_index = {} for img in images: c = captures_index.get(img.capture_id) if c is not None: c.append(img) else: captures_index[img.capture_id] = [img] captures = [] for cap_imgs in captures_index: imgs = captures_index[cap_imgs] newcap = capture.Capture(imgs) captures.append(newcap) if progress_callback is not None: progress_callback(1.0) return cls(captures)