CivArchive
    ← All articles
    Published July 9, 2023by pymess508

    Faster Tagging GUI Script

    783 views2 reactions0 comments on CivitAI9 collected
    data prep

    Sometimes you want to tag the pictures one by one, because your data set is a mixture of several distinct types. For example, I get 3000 minecraft skins from somewhere, and now I want to catergorize them by their eye color. Here I got a script from GPT.

    import os
    import shutil
    from PIL import ImageTk, Image
    import tkinter as tk
    from tkinter import messagebox
    
    class ImageClassifier:
        def __init__(self, master, img_dir, categories):
            self.master = master
            self.img_dir = img_dir
            self.categories = categories
            self.images = os.listdir(img_dir)
            self.image_index = 0
    
            self.setup_ui()
    
        def setup_ui(self):
            self.image_label = tk.Label(self.master)
            self.image_label.pack()
    
            for category in self.categories:
                button = tk.Button(self.master, text=category, command=lambda cat=category: self.classify_image(cat))
                button.pack(side=tk.LEFT)
    
            self.load_image()
    
        def load_image(self):
            while self.image_index < len(self.images):
                img_path = os.path.join(self.img_dir, self.images[self.image_index])
                if os.path.isfile(img_path):
                    img = Image.open(img_path)
                    img = img.resize((512, 512), Image.NEAREST) # adjust image size
                    img = ImageTk.PhotoImage(img)
                    self.image_label.configure(image=img)
                    self.image_label.image = img
                    break
                else:
                    self.image_index += 1
            else:
                messagebox.showinfo("Info", "No more images to classify")
    
    
        def classify_image(self, category):
            src = os.path.join(self.img_dir, self.images[self.image_index])
            dest_dir = os.path.join(self.img_dir, category)
            os.makedirs(dest_dir, exist_ok=True)
            dest = os.path.join(dest_dir, self.images[self.image_index])
    
            shutil.move(src, dest)
            self.image_index += 1
            self.load_image()
    
    
    if __name__ == "__main__":
        root = tk.Tk()
        app = ImageClassifier(root, "input", 
                              ["red", "blue", "orange", "yellow", "green", "cyan", "purple", "pink", "grey", "black", "white", "brown", "other"])
        root.mainloop()
    

    Feel free to use it. Paste it into a file named sorter.py then python sorter.py, and you are ready to go.

    Place the data into a folder called "input" and place this script alongside the "input" folder.

    You may change the catergories by editing the "app = ImageClassifier" part. It is strongly recommended that you remain an "other" alongside your other options.

    Whenever you click a button, that picture will be thrown into the corresponding sub folder like "input/red". If it does not exist, it will automatically create it.