def run(self, args): start = time.time() data = dataset.DataSet(args.dataset) # Load GPS list if present ( these override any GPS read from EXIF metadata ) gps_points = {} if data.gps_points_exist(): gps_points = data.load_gps_points() logger.info( str( gps_points ) ) exif_overrides = {} if data.exif_overrides_exists(): exif_overrides = data.load_exif_overrides() camera_models = {} for image in data.images(): if data.exif_exists(image): logging.info('Loading existing EXIF for {}'.format(image)) d = data.load_exif(image) else: logging.info('Extracting EXIF for {}'.format(image)) d = self._extract_exif(image, gps_points, data) if image in exif_overrides: d.update(exif_overrides[image]) data.save_exif(image, d) if d['camera'] not in camera_models: camera = exif.camera_from_exif_metadata(d, data) camera_models[d['camera']] = camera # Override any camera specified in the camera models overrides file. if data.camera_models_overrides_exists(): overrides = data.load_camera_models_overrides() if "all" in overrides: for key in camera_models: camera_models[key] = copy.copy(overrides["all"]) camera_models[key].id = key else: for key, value in overrides.items(): camera_models[key] = value data.save_camera_models(camera_models) end = time.time() with open(data.profile_log(), 'a') as fout: fout.write('focal_from_exif: {0}\n'.format(end - start))
def sfm_extract_metadata_list_of_images(image_path, node_file_path, opensfm_config): try: ref_image = os.listdir(image_path) for each in ref_image: d = opensfm_interface.extract_metadata_image( image_path + each, opensfm_config) if d['camera'] not in camera_models: camera = exif.camera_from_exif_metadata(d, opensfm_config) camera_models[d['camera']] = camera opensfm_interface.save_exif(node_file_path + 'exif', each, d) opensfm_interface.save_camera_models(node_file_path, camera_models) return True except: return False
def run(self, args): print "extracting metadata" data = dataset.DataSet(args.dataset) if os.path.exists(data.exif_path()): print "exifs already generated, exit\n" return start = time.time() camera_models = {} for image in data.images(): logging.info('Extracting focal lengths for image {}'.format(image)) # EXIF data in Image d = exif.extract_exif_from_file(data.load_image(image)) # Image Height and Image Width if d['width'] <= 0 or not data.config['use_exif_size']: #d['height'], d['width'] = data.image_as_array(image).shape[:2] with Image.open(data.image_files[image]) as im: d['width'], d['height'] = im.size data.save_exif(image, d) if d['camera'] not in camera_models: camera = exif.camera_from_exif_metadata(d, data) camera_models[d['camera']] = camera # Override any camera specified in the camera models overrides file. if data.camera_models_overrides_exists(): overrides = data.load_camera_models_overrides() if "all" in overrides: for key in camera_models: camera_models[key] = copy.copy(overrides["all"]) camera_models[key].id = key else: for key, value in overrides.items(): camera_models[key] = value data.save_camera_models(camera_models) end = time.time() with open(data.profile_log(), 'a') as fout: fout.write('focal_from_exif: {0}\n'.format(end - start)) print "exit\n"
def run(self, args): start = time.time() data = dataset.DataSet(args.dataset) exif_overrides = {} if data.exif_overrides_exists(): exif_overrides = data.load_exif_overrides() camera_models = {} for image in data.images(): logging.info('Extracting focal lengths for image {}'.format(image)) # EXIF data in Image d = exif.extract_exif_from_file(data.load_image(image)) # Image Height and Image Width if d['width'] <= 0 or not data.config['use_exif_size']: d['height'], d['width'] = data.image_as_array(image).shape[:2] d['camera'] = exif.camera_id(d) if image in exif_overrides: d.update(exif_overrides[image]) data.save_exif(image, d) if d['camera'] not in camera_models: camera = exif.camera_from_exif_metadata(d, data) camera_models[d['camera']] = camera # Override any camera specified in the camera models overrides file. if data.camera_models_overrides_exists(): overrides = data.load_camera_models_overrides() if "all" in overrides: for key in camera_models: camera_models[key] = copy.copy(overrides["all"]) camera_models[key].id = key else: for key, value in overrides.items(): camera_models[key] = value data.save_camera_models(camera_models) end = time.time() with open(data.profile_log(), 'a') as fout: fout.write('focal_from_exif: {0}\n'.format(end - start))
def photos_to_metadata(self, photos, rolling_shutter, rolling_shutter_readout, rerun=False): metadata_dir = self.path("exif") if io.dir_exists(metadata_dir) and not rerun: log.ODM_WARNING( "%s already exists, not rerunning photo to metadata" % metadata_dir) return if io.dir_exists(metadata_dir): shutil.rmtree(metadata_dir) os.makedirs(metadata_dir, exist_ok=True) camera_models = {} data = DataSet(self.opensfm_project_path) for p in photos: d = p.to_opensfm_exif(rolling_shutter, rolling_shutter_readout) with open(os.path.join(metadata_dir, "%s.exif" % p.filename), 'w') as f: f.write(json.dumps(d, indent=4)) camera_id = p.camera_id() if camera_id not in camera_models: camera = exif.camera_from_exif_metadata(d, data) camera_models[camera_id] = camera # Override any camera specified in the camera models overrides file. if data.camera_models_overrides_exists(): overrides = data.load_camera_models_overrides() if "all" in overrides: for key in camera_models: camera_models[key] = copy.copy(overrides["all"]) camera_models[key].id = key else: for key, value in overrides.items(): camera_models[key] = value data.save_camera_models(camera_models)
def run_dataset(data): """ Extract metadata from images' EXIF tag. """ start = time.time() exif_overrides = {} if data.exif_overrides_exists(): exif_overrides = data.load_exif_overrides() camera_models = {} for image in data.images(): if data.exif_exists(image): logging.info("Loading existing EXIF for {}".format(image)) d = data.load_exif(image) else: logging.info("Extracting EXIF for {}".format(image)) d = _extract_exif(image, data) if image in exif_overrides: d.update(exif_overrides[image]) data.save_exif(image, d) if d["camera"] not in camera_models: camera = exif.camera_from_exif_metadata(d, data) camera_models[d["camera"]] = camera # Override any camera specified in the camera models overrides file. if data.camera_models_overrides_exists(): overrides = data.load_camera_models_overrides() if "all" in overrides: for key in camera_models: camera_models[key] = copy.copy(overrides["all"]) camera_models[key].id = key else: for key, value in overrides.items(): camera_models[key] = value data.save_camera_models(camera_models) end = time.time() with open(data.profile_log(), "a") as fout: fout.write("extract_metadata: {0}\n".format(end - start))
def run(self, args): start = time.time() data = dataset.DataSet(args.dataset) exif_overrides = {} if data.exif_overrides_exists(): exif_overrides = data.load_exif_overrides() camera_models = {} for image in data.images(): if data.exif_exists(image): logging.info('Loading existing EXIF for {}'.format(image)) d = data.load_exif(image) else: logging.info('Extracting EXIF for {}'.format(image)) d = self._extract_exif(image, data) if image in exif_overrides: d.update(exif_overrides[image]) data.save_exif(image, d) if d['camera'] not in camera_models: camera = exif.camera_from_exif_metadata(d, data) camera_models[d['camera']] = camera # Override any camera specified in the camera models overrides file. if data.camera_models_overrides_exists(): overrides = data.load_camera_models_overrides() if "all" in overrides: for key in camera_models: camera_models[key] = copy.copy(overrides["all"]) camera_models[key].id = key else: for key, value in overrides.items(): camera_models[key] = value data.save_camera_models(camera_models) end = time.time() with open(data.profile_log(), 'a') as fout: fout.write('focal_from_exif: {0}\n'.format(end - start))