Guest User

vote-rating

a guest
Dec 24th, 2022
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.62 KB | None | 0 0
  1. import os
  2. import sys
  3. import matplotlib.pyplot as plt
  4.  
  5. def create_folder(folder_name):
  6.     if not os.path.exists(folder_name):
  7.         os.makedirs(folder_name)
  8.  
  9. def move_to_folder(photos, folder_name):
  10.     create_folder(folder_name)
  11.     for photo in photos:
  12.         src = os.path.join(os.getcwd(), photo)
  13.         dest = os.path.join(os.getcwd(), folder_name, photo)
  14.         if os.path.exists(src):
  15.             os.rename(src, dest)
  16.  
  17. def run_match(photos):
  18.     pairs = create_pairs(photos)
  19.     better = []
  20.     worse = []
  21.     for pair in pairs:
  22.         b, w = compare_photos(pair)
  23.         better.append(b)
  24.         worse.append(w)
  25.     return better, worse
  26.  
  27. def run_tournament(folder_name):
  28.     os.chdir(folder_name)
  29.     photos = collect_photos()
  30.    
  31.     best, good, worst = [], [], photos
  32.    
  33.     print('All')
  34.     better, worse = run_match(worst)
  35.     good.extend(better)
  36.     worst = worse
  37.     print('Worst')
  38.     better, worse = run_match(worst)
  39.     good.extend(better)
  40.     worst = worse
  41.     print('Good')
  42.     better, worse = run_match(good)
  43.     best.extend(better)
  44.     good = worse
  45.    
  46.     move_to_folder(best, "best")
  47.     move_to_folder(good, "good")
  48.     move_to_folder(worst, "worst")
  49.  
  50. def compare_photos(pair):
  51.     better = select_better(pair)
  52.     return (pair[better-1], pair[2-better])
  53.  
  54. def collect_photos():
  55.     return [f for f in os.listdir(os.getcwd()) if f.endswith((".jpg", ".png"))]
  56.  
  57. def create_pairs(photos):
  58.     pairs = [photos[i:i+2] for i in range(0, len(photos), 2)]
  59.     if len(photos) % 2 != 0:
  60.         pairs[-1].append(photos[-1])
  61.     return pairs
  62.  
  63.  
  64. def select_better(pair):
  65.     selected_image = 0
  66.     fig, axs = plt.subplots(1, 2)
  67.     axs[0].imshow(plt.imread(pair[0]))
  68.     axs[1].imshow(plt.imread(pair[1]))
  69.  
  70.     def on_key_press(event):
  71.         nonlocal selected_image
  72.         if event.key == 'left':
  73.             selected_image = 1
  74.             plt.close()
  75.         elif event.key == 'right':
  76.             selected_image = 2
  77.             plt.close()
  78.         return selected_image
  79.  
  80.     fig.subplots_adjust(left=0.1, right=.75, bottom=0.25, top=.95)
  81.     fig.canvas.mpl_connect('key_press_event', on_key_press)
  82.     try:
  83.      fig.canvas.manager.window.state('zoomed')
  84.     except:
  85.      plt.get_current_fig_manager().window.showMaximized()
  86.     plt.show()
  87.     return selected_image
  88.  
  89.  
  90.  
  91. folder_name = '.'
  92. if len(sys.argv) > 1:
  93.     if os.path.isdir(folder_name):
  94.         folder_name = sys.argv[1]
  95.     else:
  96.         print(f"{folder_name} is not a valid folder")
  97. else:
  98.     folder_name = input("Enter the name of the folder containing the photos: ")
  99.  
  100. run_tournament(folder_name)
  101.  
Add Comment
Please, Sign In to add comment