Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import sys
- import matplotlib.pyplot as plt
- def create_folder(folder_name):
- if not os.path.exists(folder_name):
- os.makedirs(folder_name)
- def move_to_folder(photos, folder_name):
- create_folder(folder_name)
- for photo in photos:
- src = os.path.join(os.getcwd(), photo)
- dest = os.path.join(os.getcwd(), folder_name, photo)
- if os.path.exists(src):
- os.rename(src, dest)
- def run_match(photos):
- pairs = create_pairs(photos)
- better = []
- worse = []
- for pair in pairs:
- b, w = compare_photos(pair)
- better.append(b)
- worse.append(w)
- return better, worse
- def run_tournament(folder_name):
- os.chdir(folder_name)
- photos = collect_photos()
- best, good, worst = [], [], photos
- print('All')
- better, worse = run_match(worst)
- good.extend(better)
- worst = worse
- print('Worst')
- better, worse = run_match(worst)
- good.extend(better)
- worst = worse
- print('Good')
- better, worse = run_match(good)
- best.extend(better)
- good = worse
- move_to_folder(best, "best")
- move_to_folder(good, "good")
- move_to_folder(worst, "worst")
- def compare_photos(pair):
- better = select_better(pair)
- return (pair[better-1], pair[2-better])
- def collect_photos():
- return [f for f in os.listdir(os.getcwd()) if f.endswith((".jpg", ".png"))]
- def create_pairs(photos):
- pairs = [photos[i:i+2] for i in range(0, len(photos), 2)]
- if len(photos) % 2 != 0:
- pairs[-1].append(photos[-1])
- return pairs
- def select_better(pair):
- selected_image = 0
- fig, axs = plt.subplots(1, 2)
- axs[0].imshow(plt.imread(pair[0]))
- axs[1].imshow(plt.imread(pair[1]))
- def on_key_press(event):
- nonlocal selected_image
- if event.key == 'left':
- selected_image = 1
- plt.close()
- elif event.key == 'right':
- selected_image = 2
- plt.close()
- return selected_image
- fig.subplots_adjust(left=0.1, right=.75, bottom=0.25, top=.95)
- fig.canvas.mpl_connect('key_press_event', on_key_press)
- try:
- fig.canvas.manager.window.state('zoomed')
- except:
- plt.get_current_fig_manager().window.showMaximized()
- plt.show()
- return selected_image
- folder_name = '.'
- if len(sys.argv) > 1:
- if os.path.isdir(folder_name):
- folder_name = sys.argv[1]
- else:
- print(f"{folder_name} is not a valid folder")
- else:
- folder_name = input("Enter the name of the folder containing the photos: ")
- run_tournament(folder_name)
Add Comment
Please, Sign In to add comment