图片分类标注工具python

图片分类标注工具

  1. 运行代码:将代码保存到 Python 文件中并运行。
  2. 选择文件夹:运行时会弹出对话框,选择要分类的图片文件夹。
  3. 标注分类:程序会逐张显示图片,你可以在下方输入框中
  4. 输入类别标签,并点击“Next”按钮记录标签。
  5. 查看上张:可以使用“Previous”按钮查看上一张图片。
  6. 保存结果:关闭程序时会自动将所有标签保存到 labels.txt 文件中。
import os
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk

class ImageLabeler:
    def __init__(self, root, image_folder):
        self.root = root
        self.root.title("Image Classifier")
        self.image_folder = image_folder
        self.image_files = [f for f in os.listdir(image_folder) if f.endswith(('.png', '.jpg', '.jpeg'))]
        self.current_image_index = 0
        self.labels = []
        self.photo = None

        # 创建界面组件
        self.image_label = tk.Label(root)
        self.image_label.pack()

        self.label_entry = tk.Entry(root)
        self.label_entry.pack()

        self.next_button = tk.Button(root, text="Next", command=self.next_image)
        self.next_button.pack()

        self.prev_button = tk.Button(root, text="Previous", command=self.prev_image)
        self.prev_button.pack()

        # 展示第一张图片
        self.show_image()

    def show_image(self):
        if self.current_image_index < len(self.image_files):
            image_path = os.path.join(self.image_folder, self.image_files[self.current_image_index])
            print(f"Loading image: {image_path}")  # Debug info
            try:
                image = Image.open(image_path)
                image.thumbnail((400, 400))  # 缩放图片
                self.photo = ImageTk.PhotoImage(image)  # 保存对图像的引用
                self.image_label.config(image=self.photo)
                self.image_label.image = self.photo  # 绑定图像到 Label
            except Exception as e:
                print(f"Error loading image {image_path}: {e}")
                self.next_image()  # 尝试加载下一张图片
        else:
            self.save_labels()  # 如果没有更多图片则保存标签
            self.root.quit()  # 退出

    def next_image(self):
        label = self.label_entry.get()
        if label:
            self.labels.append((self.image_files[self.current_image_index], label))
            print(f"{self.image_files[self.current_image_index]}: {label}")  # 打印格式
            self.label_entry.delete(0, tk.END)
            self.current_image_index += 1
            self.show_image()
        else:
            print("Please enter a label.")

    def prev_image(self):
        if self.current_image_index > 0:
            self.current_image_index -= 1
            self.label_entry.delete(0, tk.END)
            self.show_image()

    def save_labels(self):
        with open("labels.txt", "w") as f:
            for filename, label in self.labels:
                f.write(f"{filename}: {label}\n")
        print("Labels saved to labels.txt")  # 提示用户标签已保存

if __name__ == "__main__":
    root = tk.Tk()
    image_folder = filedialog.askdirectory(title="Select Image Folder")
    if image_folder:
        app = ImageLabeler(root, image_folder)
        root.protocol("WM_DELETE_WINDOW", app.save_labels)  # 确保在关闭时保存标签
        root.mainloop()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值