Exemplo n.º 1
0
def __main__():
    in_dir = '/home/timlinux/Pictures'
    out_dir = '/home/timlinux/PhotosSorted/'

    if not os.path.exists(out_dir):
        os.makedirs(out_dir)

    matches = []
    for root, dirnames, filenames in os.walk(in_dir):
        for filename in fnmatch.filter(filenames, '*.jpg'):
            matches.append(os.path.join(root, filename))
        for filename in fnmatch.filter(filenames, '*.jpeg'):
            matches.append(os.path.join(root, filename))
        for filename in fnmatch.filter(filenames, '*.JPG'):
            matches.append(os.path.join(root, filename))
        for filename in fnmatch.filter(filenames, '*.JPEG'):
            matches.append(os.path.join(root, filename))

            #for filename in fnmatch.filter(filenames, '*.png'):
            #    matches.append(os.path.join(root, filename))
            #for filename in fnmatch.filter(filenames, '*.PNG'):
            #    matches.append(os.path.join(root, filename))

    image_count = 0
    for filename in matches:
        image_count += 1
        editor = ExifEditor(filename)
        image_date = str(editor.getModificationDateTime())
        date_part, time_part = image_date.split(' ')
        year, month, day = date_part.split('-')
        hours, minutes, seconds = time_part.split(':')
        #print '%s : %s' % (image_date, filename)
        path = os.path.abspath(os.path.join(
            out_dir, year, month, day
        ))
        try:
            os.makedirs(path)
        except OSError:
            pass
        new_filename = '-'.join([
            year, month, day, hours, minutes, seconds, str(image_count)])
        new_filename += '.jpg'
        new_path = os.path.join(out_dir, path, new_filename)
        print 'mv %s %s' % (filename, new_path)
        shutil.move(filename, new_path)

    print '%s photos sorted' % image_count

    files = []
    for root, dirnames, filenames in os.walk(out_dir):
        for filename in fnmatch.filter(filenames, '*.jpg'):
            files.append(os.path.join(root, filename))

    duplicates = find_duplicates(files)
    for key, value in duplicates:
        # get rid of one filename from the list
        #  so at least one copy is not deleted
        value.pop()
        for filename in value:
            os.remove(filename)
Exemplo n.º 2
0
 def test_set_camera_data(self):
     camera = CAMERAS["fisheye2"]
     manipulate_exif(FILE, camera, quiet=True)
     ee = ExifEditor(FILE)
     for key in camera:
         if isinstance(camera[key], int):
             self.assertEqual(int(ee.getTag(key)), camera[key])
         else:
             self.assertEqual(ee.getTag(key), camera[key].replace('"', ""))
Exemplo n.º 3
0
def manipulate_exif(path, camera):
    ee = ExifEditor(path)
    success = True
    for key in camera:
        try:
            ee.setTag(key, camera[key])
        except:
            success = False
    if success:
        sys.stdout.write('.')
    else:
        sys.stdout.write('F')
Exemplo n.º 4
0
def TakePicture(img, cam):
    print(
        'Before saving picture, let me attempt to upload quite a few files in cache.'
    )
    for i in range(10):
        AttemptUpload()

    if len(globa.batch) == 0:
        print('not taking picture as batch is empty')
        return 0

    # audio_level = AudioLevelPi()

    print('Saving picture.')
    res = cam.resolution
    filename = 'cache/' + socket.gethostname(
    ) + '-' + globa.batch + '_' + time.strftime("%Y_%m_%d-%H_%M.jpg")
    print(filename)
    cv2.imwrite(filename, img,
                [int(cv2.IMWRITE_JPEG_QUALITY), 100])  # up to 100, default 95
    # cv2.imwrite(filename + '.png', img)
    ticks = time.time()
    globa.last_picture_filename = filename.replace('cache/', globa.group + '/')
    SaveLastPictureTicks(ticks, globa.last_picture_filename)
    # add EXIF keywords
    exif = ExifEditor(filename)
    keywords = [
        GitHash(), 'batch=' + globa.batch,
        'batch_start=' + str(int(globa.batch_start)), 'started=' +
        globa.time_process_started_string, 'shutter=' + str(cam.shutter_speed),
        'drc_str=' + str(cam.drc_strength), 'bright=' + str(cam.brightness),
        'iso=' + str(cam.iso), 'exp_comp=' + str(cam.exposure_compensation),
        'contrast=' + str(cam.contrast), 'meter=' + str(cam.meter_mode),
        'sharp=' + str(cam.sharpness), 'satur=' + str(cam.saturation),
        'exp_mode=' + str(cam.exposure_mode), 'awb_mode=' + str(cam.awb_mode),
        'awb_gains[r]=' + str(float(cam.awb_gains[0])), 'awb_gains[b]=' +
        str(float(cam.awb_gains[1])), 'exp=' + str(cam.exposure_speed),
        'analog_gain=' + str(float(cam.analog_gain)), 'digital_gain=' +
        str(float(cam.digital_gain)), 'zoom=' + str(cam.zoom[3])
    ]
    print(keywords)
    exif.addKeywords(keywords)
    # print('getKeywords', exif.getKeywords())
    print(('getTag Keywords', exif.getTag("Keywords")))
    AttemptUpload(
    )  # after taking the picture, immediately attempt to upload it
    # gc.collect()
    return ticks
 def writeKeywords(self, image, keyword_list):
     editor = ExifEditor(image)
     editor.setKeywords(keyword_list)