コード例 #1
0
ファイル: extract_metadata.py プロジェクト: onsiteiq/OpenSfM
    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))
コード例 #2
0
ファイル: lib.py プロジェクト: jchen706/walalala
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
コード例 #3
0
    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"
コード例 #4
0
    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))
コード例 #5
0
    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)
コード例 #6
0
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))
コード例 #7
0
ファイル: extract_metadata.py プロジェクト: mapillary/OpenSfM
    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))