Python编写一个验证码图片数据标注GUI程序附源码

本文主要介绍如何使用Python编写一个验证码图片数据标注GUI程序,并提供源码。

1. 程序简介

该程序基于Python-Tkinter模块开发,用于标注验证码图片的各个字符。通过该程序,用户可以打开待标注的验证码图片文件,并使用鼠标框选每个字符并标注其所属类别。标注完成后,程序将自动保存标注后的图片,并生成标注结果文件。

2. 开发环境

本示例程序的开发环境如下:

  • Python 3.6.5
  • Tkinter 8.6

3. 程序实现

代码实现及注释如下:

import tkinter as tk
from tkinter import ttk
from tkinter import filedialog
from PIL import Image, ImageTk

class App:
    def __init__(self, master):
        self.master = master
        self.master.title("验证码标注工具")

        # 初始化变量
        self.filePath = ""
        self.labels = []

        # 定义GUI布局
        self.createLayout()

    def createLayout(self):
        # 选择文件按钮
        self.selectButton = ttk.Button(self.master, text="选择文件", command=self.selectFile)
        self.selectButton.grid(row=0, column=0, padx=10, pady=10, sticky="w")

        # 文件路径显示标签
        self.filePathLabel = ttk.Label(self.master, text="文件路径:")
        self.filePathLabel.grid(row=1, column=0, padx=10, pady=10, sticky="w")
        self.filePathValueLabel = ttk.Label(self.master, text=self.filePath)
        self.filePathValueLabel.grid(row=1, column=1, padx=10, pady=10, sticky="w")

        # 图片显示区域
        self.imageCanvas = tk.Canvas(self.master, width=300, height=150)
        self.imageCanvas.grid(row=2, column=0, columnspan=2, padx=10, pady=10)

        # 标签选择下拉框
        self.labelCombo = ttk.Combobox(self.master, state="readonly")
        self.labelCombo.grid(row=3, column=0, padx=10, pady=10)
        self.labelCombo["values"] = ("数字", "字母")

        # 添加标签按钮
        self.addButton = ttk.Button(self.master, text="添加标签", command=self.addLabel)
        self.addButton.grid(row=3, column=1, padx=10, pady=10, sticky="e")

        # 已选择标签列表框
        self.labelListBox = tk.Listbox(self.master, height=5)
        self.labelListBox.grid(row=4, column=0, columnspan=2, padx=10, pady=10)

        # 确定按钮
        self.submitButton = ttk.Button(self.master, text="确定", command=self.submit)
        self.submitButton.grid(row=5, column=1, padx=10, pady=10, sticky="e")

    def selectFile(self):
        # 打开文件选择对话框
        self.filePath = filedialog.askopenfilename()
        self.filePathValueLabel.config(text=self.filePath)

        # 清除标签列表
        self.labelListBox.delete(0, tk.END)

        # 加载图片
        self.img = Image.open(self.filePath)
        self.photoImg = ImageTk.PhotoImage(self.img)
        self.imageCanvas.create_image(150, 75, image=self.photoImg)

    def addLabel(self):
        # 获取下拉框选择的标签值
        label = self.labelCombo.get()

        # 添加到标签列表框中
        if label:
            self.labels.append(label)
            self.labelListBox.insert(tk.END, label)

    def submit(self):
        # 获取标注结果字符串
        resultStr = ""
        for i in range(self.labelListBox.size()):
            resultStr += self.labels[i]

        # 替换原图片文件名中的".jpg"为"_result.jpg",生成标注结果图片的文件名
        resultFilePath = self.filePath.replace(".jpg", "_result.jpg")

        # 保存标注结果图片
        self.img.save(resultFilePath)

        # 生成标注结果文件
        resultFile = open(self.filePath.replace(".jpg", ".txt"), "w")
        resultFile.write(resultStr)
        resultFile.close()

        # 提示标注完成
        tk.messagebox.showinfo("提示", "标注完成!")

# 创建主窗口
root = tk.Tk()
app = App(root)
root.mainloop()

4. 示例说明

示例1:标注一个数字验证码图片

  1. 运行程序。
  2. 点击“选择文件”按钮,打开文件选择对话框,选择一个数字验证码图片文件。
  3. 点击“数字”下拉框,选择“数字”标签。
  4. 点击“添加标签”按钮,将“数字”标签添加到已选择标签列表框中。
  5. 点击“确定”按钮,程序将自动保存标注结果图片和标注结果文件。
  6. 完成标注后,程序将弹出提示框,提示标注完成。

示例2:标注一个字母验证码图片

  1. 运行程序。
  2. 点击“选择文件”按钮,打开文件选择对话框,选择一个字母验证码图片文件。
  3. 点击“字母”下拉框,选择“字母”标签。
  4. 点击“添加标签”按钮,将“字母”标签添加到已选择标签列表框中。
  5. 点击“确定”按钮,程序将自动保存标注结果图片和标注结果文件。
  6. 完成标注后,程序将弹出提示框,提示标注完成。

5. 总结

Python编写一个验证码图片数据标注GUI程序,需要先了解Python-Tkinter模块的基本使用方法。在程序实现过程中,需要结合文件选择、图片加载、标签选择、列表框和保存文件等操作,同时注意GUI布局的合理性和友好性,以实现用户友好的操作界面。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python编写一个验证码图片数据标注GUI程序附源码 - Python技术站

(0)
上一篇 2023年6月13日
下一篇 2023年6月13日

相关文章

  • Requests库实现数据抓取与处理功能

    下面是“Requests库实现数据抓取与处理功能”的完整攻略。 1. 简介 Requests是一个基于Python的第三方网络请求库,它可以轻松地发送HTTP/SMPT/FTP请求,并且提供了直观的API,使得数据获取、处理十分容易。利用Requests库我们可以获取网页、API、图像、视频等各种数据格式,实现数据的抓取与处理。 2. 安装 在使用Reque…

    python 2023年6月3日
    00
  • PyCharm无法调用numpy(报错ModuleNotFoundError:No module named ‘numpy’)

    解决 PyCharm 无法调用 numpy 库的错误,可以参考以下步骤进行操作: 1.检查 numpy 是否已经安装 在 PyCharm 中无法调用 numpy 库通常是因为 numpy 没有被正确安装导致的。如果您之前没有安装 numpy 库,可以通过以下方法进行安装: pip install numpy 如果您已经安装了 numpy 库,可以通过以下命令…

    python 2023年5月13日
    00
  • python笔记_将循环内容在一行输出的方法

    Python笔记:将循环内容在一行输出的方法 在Python中,我们可以通过一些方法将循环内容在一行输出,常用的方法包括使用end参数、使用字符串拼接和使用join方法等。 使用end参数 在Python中,我们可以使用print函数的end参数来控制输出后不换行。 以下示例代码演示了如何使用end参数输出循环内容: for i in range(5): p…

    python 2023年6月5日
    00
  • 解决Python获取字典dict中不存在的值时出错问题

    当我们在Python中尝试获取一个字典中的不存在的值时,程序会报错,这是因为该键没有在字典中定义。以下是如何解决此类问题的完整攻略: 使用get方法获取值 使用get方法可以避免因字典中不存在的键而导致的错误。该方法接收一个键值参数,如果字典中存在该键,它将返回其相应的值,否则返回指定的默认值。例如: my_dict = {‘name’: ‘Tom’, ‘a…

    python 2023年5月13日
    00
  • python datetime中strptime用法详解

    Python datetime中strptime用法详解 在Python中,有一个datetime模块可以处理日期和时间。其中,strptime函数可以帮助我们将字符串转换为datetime格式,适用于将字符串日期转化为datetime格式日期。本篇攻略将介绍Python datetime中的strptime函数的用法以及相关注意事项。 strptime函数…

    python 2023年6月2日
    00
  • python读写Excel表格的实例代码(简单实用)

    以下是详细的讲解。 Python读写Excel表格的实例代码(简单实用) 介绍 Python中,有很多读写Excel表格的第三方库,比如XLRD、XLWT、Openpyxl等。这篇文章将会详细讲解使用Openpyxl读写Excel表格的实例代码。 安装Openpyxl 在使用Openpyxl之前,需要先安装Openpyxl库。可以使用pip进行安装: pip…

    python 2023年5月13日
    00
  • Python中collections模块的基本使用教程

    下面是Python中collections模块的基本使用教程, 1. collections模块简介 collections模块是Python标准库中的一个模块,提供了一系列的容器类,实现了Python中没有的一些特定数据结构,例如:有序字典、命名元组等。使用这些容器类可以大大提高编码的效率,使得代码更加简洁、易读。 2. Counter计数器 Counte…

    python 2023年5月13日
    00
  • python利用datetime模块计算时间差

    使用Python中的datetime模块,可以很方便地计算时间差。下面是使用datetime模块计算时间差的完整攻略: 1. 导入datetime模块 import datetime 2. 创建datetime对象 我们可以使用datetime模块中的datetime类来创建datetime对象。datetime对象包含年、月、日、时、分、秒和微秒,可以用如…

    python 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部