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)
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('"', ""))
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')
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)