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()
예제 #2
0
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))
예제 #3
0
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']])
예제 #4
0
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)
예제 #5
0
    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']])
예제 #6
0
                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)