def test_run(image_path): ''' Test run for images ''' s = Sequence(image_path, check_exif=False) file_list = s.get_file_list(image_path) num_image = len(file_list) t1 = datetime.datetime.strptime('2000_09_03_12_00_00', '%Y_%m_%d_%H_%M_%S') t2 = datetime.datetime.strptime('2000_09_03_12_30_00', '%Y_%m_%d_%H_%M_%S') p1 = point(0.5, 0.5, 0.2, t1, num_image-2) p2 = point(0.55, 0.55, 0.0, t2, 0) inter_points = interpolate_with_anchors([p1, p2], angle_offset=-90.0) save_path = os.path.join(image_path, 'processed') lib.io.mkdir_p(save_path) assert(len(inter_points)==len(file_list)) for f, p in zip(file_list, inter_points): meta = ExifEdit(f) meta.add_lat_lon(p[1], p[2]) meta.add_altitude(p[3]) meta.add_date_time_original(p[0]) meta.add_orientation(1) meta.add_direction(p[4]) meta.write()
def add_exif_using_timestamp(filename, time, points, offset_time=0, offset_bearing=0): ''' Find lat, lon and bearing of filename and write to EXIF. ''' metadata = ExifEdit(filename) # subtract offset in s beween gpx time and exif time t = time - datetime.timedelta(seconds=offset_time) try: lat, lon, bearing, elevation = interpolate_lat_lon(points, t) corrected_bearing = (bearing + offset_bearing) % 360 metadata.add_lat_lon(lat, lon) metadata.add_direction(corrected_bearing) if elevation is not None: metadata.add_altitude(elevation) metadata.write() print( "Added geodata to: {} time {} lat {} lon {} alt {} bearing {}" .format(filename, time, lat, lon, elevation, exiv_bearing)) except ValueError, e: print("Skipping {0}: {1}".format(filename, e))
def add_altitude_general(test_obj, filename): test_altitude = 15.5 test_altitude_precision = 100 empty_exifedit = ExifEdit(filename) empty_exifedit.add_altitude(test_altitude, test_altitude_precision) empty_exifedit.write(EMPTY_EXIF_FILE_TEST) exif_data = load_exif() test_obj.assertEqual( (test_altitude * test_altitude_precision, test_altitude_precision), exif_data[EXIF_PRIMARY_TAGS_DICT['GPSInfo']][ EXIF_GPS_TAGS_DICT['GPSAltitude']])
def write_metadata(image_lists): """ Write the exif metadata in the jpeg file :param image_lists : A list in list of New_Picture_infos namedtuple """ for image_list in image_lists: for image in image_list: # metadata = pyexiv2.ImageMetadata(image.path) metadata = ExifEdit(image.path) # metadata.read() metadata.add_date_time_original(image.New_DateTimeOriginal) # metadata.add_subsec_time_original(image.New_SubSecTimeOriginal) metadata.add_lat_lon(image.Latitude, image.Longitude) metadata.add_direction(image.ImgDirection) if image.Ele is not None: metadata.add_altitude(image.Ele) metadata.write() print('Writing new timestamp to ', image.path)
def test_add_time_original_to_existing_exif(self): test_altitude = 15.5 test_altitude_precision = 100 empty_exifedit = ExifEdit(EMPTY_EXIF_FILE_TEST) empty_exifedit.add_altitude(test_altitude, test_altitude_precision) empty_exifedit.write(EMPTY_EXIF_FILE_TEST) test_datetime = datetime.datetime(2016, 9, 30, 8, 29, 26, 249000) not_empty_exifedit = ExifEdit(EMPTY_EXIF_FILE_TEST) not_empty_exifedit.add_date_time_original(test_datetime) not_empty_exifedit.write(EMPTY_EXIF_FILE_TEST) exif_data = load_exif() self.assertEqual( (test_altitude * test_altitude_precision, test_altitude_precision), exif_data[EXIF_PRIMARY_TAGS_DICT['GPSInfo']][ EXIF_GPS_TAGS_DICT['GPSAltitude']])
num_exif_error += 1 continue if capture_time == 0: # Use upload time + 12:00:00 instead upload_time = p["upload_date"] + " 12:00:00" capture_time = datetime.datetime.strptime( upload_time, "%d %B %Y %H:%M:%S") print( "Image {} missing time stamp. Using update date instead.". format(photo_file)) num_missing_date += 1 exifedit = ExifEdit(photo_file) exifedit.add_lat_lon(p["latitude"], p["longitude"]) exifedit.add_altitude(p.get("altitude", 0)) exifedit.add_date_time_original(capture_time) exifedit.write() valid_files.append(photo_file) # Sequence Cut s = sequence.Sequence(image_path, skip_subfolders=True) sequences = s.split(move_files=False, cutoff_distance=100) sequence_ids = {} for s in sequences: sequence_uuid = str(uuid.uuid4()) for im in s: sequence_ids[im] = sequence_uuid # Get authentication info email, upload_token, secret_hash, upload_url = uploader.get_full_authentication_info(
except Exception as e: print "Datetime error '{}' for image {}. Skipping".format(e, photo_file) shutil.move(photo_file, os.path.join(failed_folder, os.path.basename(photo_file))) num_exif_error += 1 continue if capture_time == 0: # Use upload time + 12:00:00 instead upload_time = p["upload_date"] + " 12:00:00" capture_time = datetime.datetime.strptime(upload_time, "%d %B %Y %H:%M:%S") print("Image {} missing time stamp. Using update date instead.".format(photo_file)) num_missing_date += 1 exifedit = ExifEdit(photo_file) exifedit.add_lat_lon(p["latitude"], p["longitude"]) exifedit.add_altitude(p.get("altitude", 0)) exifedit.add_date_time_original(capture_time) exifedit.write() valid_files.append(photo_file) # Sequence Cut s = sequence.Sequence(image_path, skip_subfolders=True) sequences = s.split(move_files=False, cutoff_distance=100) sequence_ids = {} for s in sequences: sequence_uuid = str(uuid.uuid4()) for im in s: sequence_ids[im] = sequence_uuid # Get authentication info email, upload_token, secret_hash, upload_url = uploader.get_full_authentication_info(email=args.email)