当前位置: 首页 > article >正文

图片分类标注工具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.root.quit()  # 如果没有更多图片则退出

    def next_image(self):
        label = self.label_entry.get()
        if label:
            self.labels.append((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")

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()


http://www.kler.cn/a/370161.html

相关文章:

  • Hadoop•搭建完全分布式集群
  • c语言的分支与循环
  • Python 脚本-扫描当前目录和所有子目录并显示它们的大小。
  • 递归练习六(普通练习11-15)
  • Ubuntu cuda-cudnn中断安装如何卸载
  • C语言:位段
  • 团队文档管理有困难?总有一款工具合适你
  • 摸鱼小工具-窗口隐藏透明
  • 集团精益智能工厂数字化建设三年规划方案|70页PPT
  • 【ChatGPT】如何利用情景模拟让ChatGPT做决策分析
  • 基于SSM邮票鉴赏系统的设计
  • linux shell脚本后台运行
  • 面试官:说一下Spring 中的 @Cacheable 缓存注解?
  • 3d Max下载|3ds MAX全版本安装教程网盘资源
  • WEB 统一接口返回和异常处理
  • 先来先服务(FCFS,First-Come, First-Served)调度算法
  • 人工智能:重塑未来生活与工作的变革者
  • python-numpy-笔记1
  • 名词(术语)了解--CSSOM (CSS Object Model)
  • SLAM|1. 相机投影及相机畸变
  • 从理解路由到实现一套Router(路由)
  • 九,Linux基础环境搭建(CentOS7)- 安装Sqoop
  • 【ROS 基础教学系列】机器人仿真运动控制
  • 5款项目管理软件,帮你做好任务管理
  • 自定义Widget插入QListWidget中,大量数据会卡问题
  • unity3D 导入图片与设置