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日

相关文章

  • Python qqbot 实现qq机器人的示例代码

    下面是关于使用 Python qqbot 实现 QQ 机器人的详细攻略。 什么是 Python qqbot Python qqbot 是一款使用 Python 语言编写的 QQ 机器人框架。通过 qqbot,我们可以使用 Python 语言开发 QQ 机器人,实现自动回复、提醒等功能。 安装 Python qqbot 在使用 Python qqbot 之前,…

    python 2023年5月23日
    00
  • Python脚本导出为exe程序的方法

    请看下面的详细讲解。 什么是PyInstaller? PyInstaller是一个类似于py2exe、 py2app和 cx_Freeze这样的Python脚本转换工具,可以将Python脚本打包成独立的可执行文件。相对于其他工具,PyInstaller最大的优点就是跨平台支持比较好,不仅能在Windows、Linux等常用操作系统上运行,也能在Mac OS…

    python 2023年5月23日
    00
  • 自己编程中遇到的Python错误和解决方法汇总整理

    当我们在Python编程过程中,可能会遇到各种各样的错误,例如语法错误、逻辑错误、模块导入错误等。这些错误可能会导致程序无法正运行,因此我们需要及时解决这些错误。以下是自己编程中遇到的Python错误和解决方法的汇总整理: 1. TypeError 当我们在Python编程过程中遇到以下的报错: TypeError: unsupported operand …

    python 2023年5月13日
    00
  • 用 Python 模板字符串方法替换字符串

    【问题标题】:Substitute string with Python Template strings method用 Python 模板字符串方法替换字符串 【发布时间】:2023-04-01 02:44:02 【问题描述】: 我想使用模板字符串方法来替换字符串:例如: cfg[‘hdfs_location’]=Template(cfg[‘hdfs_l…

    Python开发 2023年4月8日
    00
  • Python爬虫运用正则表达式的方法和优缺点

    Python爬虫运用正则表达式的方法和优缺点 在Python爬虫中,正则表达式是一种非常重要的工具,可以用于解析HTML、XML等文本数据。本攻略将详细讲Python爬中正则表达式的使用方法,包括正则表达式的基本语法、常用的正则表达式模式、以及何正则表达式解析HTML、XML等文本数据。同时,我们也会探讨正则表达式的优缺点。 正则表达式基本语法 正则表达式是…

    python 2023年5月14日
    00
  • Python requests timeout的设置

    以下是关于Python requests timeout的设置的攻略: Python requests timeout的设置 在进行网络爬虫开发时,经常需要设置请求的超时时间,以避免请求时间过长而导致程序卡死。Python的requests库提供了设置timeout参数的方法,可以轻松实现。以下是Python requests timeout的设置的攻略。 …

    python 2023年5月14日
    00
  • python实现字符串和数字拼接

    Python中字符串和数字都是不同类型的对象,不能直接进行拼接操作,需要进行类型转换。下面是实现字符串和数字拼接的步骤: 步骤1:将数字转换为字符串类型 可以使用str()函数,将数字类型的对象转换为字符串类型。例如,将数字1转换为字符串类型: num = 1 str_num = str(num) print(str_num) 输出:1 步骤2:使用字符串格…

    python 2023年6月5日
    00
  • 学习python处理python编码问题

    学习Python处理Python编码问题的完整攻略如下: 一、理解Python编码问题 在开始Python编码时,我们需要了解以下几个术语: 字符集(Character Set):是指字符集合,也就是所有的字符,比如ASCII、Unicode、UTF-8等。 编码(Encoding):是将字符集的字符编成计算机可读的二进制数据,比如UTF-8、GBK、ISO…

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