这是一个基于 Python 和 Tkinter 的图片标注查看工具,支持浏览图片及其标注信息,并提供以下功能:
- 图片导航:支持上一张/下一张切换。
- 标注可视化:在图片上绘制标注框和类别 ID。
- 文件管理:将图片移动到指定的目标文件夹(如
ERROR、INACCURATE、SINGLE_LIGHT)。 - 撤销功能:支持撤销最近一次移动操作。
- 文件夹选择:通过图形界面选择源文件夹和目标文件夹路径。
- 加载图片:从指定的源文件夹加载图片及其标注文件(
.txt格式)。 - 标注显示:在标注图中绘制四边形框、中心点以及类别 ID。
- 图片管理:
- 将图片移动到不同的目标文件夹(
ERROR、INACCURATE、SINGLE_LIGHT)。 - 自动按序号重命名移动后的图片和标注文件。
- 将图片移动到不同的目标文件夹(
- 撤销操作:恢复最近一次移动操作,将文件移回原位置。
- 快捷键支持:
←:上一张。→:下一张。D:保留当前图片。E:移动到ERROR文件夹。I:移动到INACCURATE文件夹。S:移动到SINGLE_LIGHT文件夹。Z:撤销最近一次操作。Q:退出程序。
确保你的系统已安装 Python 3.6 或更高版本。可以通过以下命令检查:
python --version如果未安装,请根据操作系统选择合适的安装方式:
- Windows:从 Python 官方网站 下载并安装。
- macOS:使用 Homebrew 安装:
brew install python
- Linux:使用包管理器安装(例如 Ubuntu):
sudo apt update sudo apt install python3 python3-pip
本项目依赖以下 Python 库:
opencv-python-headless:用于图片处理和标注绘制。Pillow:用于图像显示。numpy:用于数值计算。tkinter:用于图形界面(通常随 Python 自带,但某些系统可能需要额外安装)。
运行以下命令安装这些依赖库:
pip install opencv-python-headless pillow numpy- OpenCV:
- 如果你需要 GUI 功能(如摄像头捕获),可以安装完整版的 OpenCV:
pip install opencv-python
- 如果你只需要处理图片而不需要 GUI 功能,推荐使用轻量版(
opencv-python-headless)。
- 如果你需要 GUI 功能(如摄像头捕获),可以安装完整版的 OpenCV:
- Tkinter:
- 在大多数 Linux 发行版中,Tkinter 可能需要单独安装。例如,在 Ubuntu 上运行:
sudo apt install python3-tk
- Windows 和 macOS 通常默认包含 Tkinter。
- 在大多数 Linux 发行版中,Tkinter 可能需要单独安装。例如,在 Ubuntu 上运行:
安装完成后,可以通过以下命令验证依赖库是否正确安装:
python -c "import cv2; import PIL; import numpy; import tkinter"如果没有报错,则说明依赖库安装成功。
源文件夹:包含图片文件(如
.jpg、.png)及其对应的标注文件(.txt)。- 标注文件格式示例:
class_id x1 y1 x2 y2 x3 y3 x4 y4class_id:目标类别 ID。x1, y1, ..., x4, y4:归一化的坐标值(范围为[0, 1]),表示标注框的四个顶点。
- 标注文件格式示例:
目标文件夹:用于存放分类后的图片和标注文件。
如果你在 Windows 上运行程序,可能需要安装以下组件以支持 OpenCV 的正常运行:
- Microsoft Visual C++ Redistributable:
- 下载地址:Microsoft Visual C++ Redistributable
- 安装后重启计算机。
运行以下命令启动程序:
python annotation_viewer.py- 程序启动后会弹出多个文件夹选择对话框:
- 源文件夹:存放原始图片和标注文件的文件夹。
- 目标文件夹:
ERROR:存放错误标注的图片。INACCURATE:存放标注不准确的图片。SINGLE_LIGHT:存放单灯标注的图片。
- 主界面分为两部分:
- 左侧显示原图。
- 右侧显示标注图(包括标注框、中心点和类别 ID)。
- 使用按钮或快捷键进行操作:
- 浏览图片、移动图片、撤销操作等。
假设你的数据目录结构如下:
/home/hero/Datasets_of_Car/
├── TOTAL/
│ ├── image1.jpg
│ ├── image1.txt
│ ├── image2.jpg
│ ├── image2.txt
│ └── ...
├── ERROR/
├── INACCURATE/
└── SINGLE_LIGHT/
- 源文件夹:
/home/hero/Datasets_of_Car/TOTAL - 目标文件夹:
ERROR:/home/hero/Datasets_of_Car/ERRORINACCURATE:/home/hero/Datasets_of_Car/INACCURATESINGLE_LIGHT:/home/hero/Datasets_of_Car/SINGLE_LIGHT
标注文件格式:
- 确保标注文件的格式正确(每行一个目标,格式为
class_id x1 y1 x2 y2 x3 y3 x4 y4)。 - 坐标值应为归一化值(范围为
[0, 1])。
- 确保标注文件的格式正确(每行一个目标,格式为
文件覆盖问题:
- 如果目标文件夹中已有同名文件,程序会自动递增编号以避免覆盖。
性能优化:
- 如果图片数量较多,建议定期清理源文件夹中的已处理文件,以提高加载速度。
- 检查是否安装了所有依赖项(
opencv-python-headless、pillow、numpy)。 - 确保 Python 版本符合要求(3.6 或更高版本)。
- 检查标注文件的格式是否正确。
- 确保标注文件的坐标值为归一化值(范围为
[0, 1])。
- 确保运行环境支持图形界面(如 Windows、macOS 或带有桌面环境的 Linux)。
如果你在使用过程中遇到问题或有改进建议,欢迎提交 Issue 或 Pull Request。我们非常乐意接受你的贡献!
本项目采用 MIT 许可证。