356 lines
7.6 KiB
Markdown
356 lines
7.6 KiB
Markdown
# 📋 图片标注检查工具使用教程
|
||
|
||
## 工具简介
|
||
|
||
`check_and_clean_images.py` 是一个用于检查和清理数据集的工具,可以:
|
||
- ✅ 检查图片文件是否有对应的标注文件
|
||
- ✅ 找出没有标注的图片
|
||
- ✅ 删除没有标注的图片文件
|
||
- ✅ 确保数据集完整性
|
||
|
||
---
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 基本用法
|
||
|
||
#### 1. 预览模式(推荐先运行)
|
||
|
||
检查哪些图片没有标注,但**不删除**文件:
|
||
|
||
```bash
|
||
python check_and_clean_images.py
|
||
```
|
||
|
||
**输出示例:**
|
||
```
|
||
============================================================
|
||
检查没有标注的图片
|
||
============================================================
|
||
图片目录: datasets/handleImage/train
|
||
标注目录: datasets/handleImage/label
|
||
|
||
找到 1330 个图片文件
|
||
找到 1223 个标注文件
|
||
------------------------------------------------------------
|
||
发现 107 个没有标注的图片:
|
||
------------------------------------------------------------
|
||
订单1806953_51_7111322.jpg
|
||
订单1805323_51_7096066.jpg
|
||
...
|
||
------------------------------------------------------------
|
||
|
||
[预览模式] 未实际删除文件
|
||
要删除这些文件,请运行: python check_and_clean_images.py --delete
|
||
```
|
||
|
||
#### 2. 删除模式(需要确认)
|
||
|
||
删除没有标注的图片,但会要求确认:
|
||
|
||
```bash
|
||
python check_and_clean_images.py --delete
|
||
```
|
||
|
||
**交互提示:**
|
||
```
|
||
⚠ 警告: 将删除没有标注的图片文件!确认继续?(yes/no):
|
||
```
|
||
|
||
输入 `yes` 确认删除,输入 `no` 取消操作。
|
||
|
||
#### 3. 直接删除模式(不确认)
|
||
|
||
直接删除,不需要确认(适合脚本自动化):
|
||
|
||
```bash
|
||
python check_and_clean_images.py --delete --force
|
||
```
|
||
|
||
---
|
||
|
||
## 📖 详细说明
|
||
|
||
### 命令参数
|
||
|
||
| 参数 | 简写 | 说明 | 示例 |
|
||
|------|------|------|------|
|
||
| `--delete` | `-d` | 启用删除模式 | `--delete` |
|
||
| `--force` | `-f` | 跳过确认,直接删除 | `--force` |
|
||
| `--help` | `-h` | 显示帮助信息 | `--help` |
|
||
|
||
### 默认路径
|
||
|
||
工具默认检查以下路径:
|
||
- **图片目录**: `datasets/handleImage/train`
|
||
- **标注目录**: `datasets/handleImage/label`
|
||
|
||
### 支持的图片格式
|
||
|
||
工具会自动识别以下图片格式:
|
||
- `.jpg` / `.JPG`
|
||
- `.jpeg` / `.JPEG`
|
||
- `.png` / `.PNG`
|
||
- `.bmp`
|
||
- `.tiff` / `.tif`
|
||
|
||
### 标注文件格式
|
||
|
||
工具查找 `.txt` 格式的标注文件。
|
||
|
||
---
|
||
|
||
## 📝 使用场景
|
||
|
||
### 场景 1: 检查数据集完整性
|
||
|
||
在训练前检查数据集是否完整:
|
||
|
||
```bash
|
||
# 1. 先预览检查
|
||
python check_and_clean_images.py
|
||
|
||
# 2. 如果有问题,查看具体文件
|
||
# 3. 确认后删除
|
||
python check_and_clean_images.py --delete
|
||
```
|
||
|
||
### 场景 2: 清理导入的数据
|
||
|
||
从CVAT或其他工具导入数据后,清理不完整的文件:
|
||
|
||
```bash
|
||
# 直接删除没有标注的图片
|
||
python check_and_clean_images.py --delete --force
|
||
```
|
||
|
||
### 场景 3: 批量处理多个数据集
|
||
|
||
修改脚本中的路径,处理不同数据集:
|
||
|
||
```python
|
||
# 修改 check_and_clean_images.py 中的路径
|
||
train_dir = "datasets/你的数据集/train"
|
||
label_dir = "datasets/你的数据集/labels"
|
||
```
|
||
|
||
---
|
||
|
||
## ⚠️ 注意事项
|
||
|
||
### 1. 备份数据
|
||
|
||
**重要:** 删除操作不可恢复!建议在删除前备份数据:
|
||
|
||
```bash
|
||
# 备份整个数据集
|
||
cp -r datasets/handleImage datasets/handleImage_backup
|
||
```
|
||
|
||
### 2. 文件名匹配规则
|
||
|
||
工具通过**文件名(不含扩展名)**匹配图片和标注:
|
||
|
||
- ✅ 匹配:`image001.jpg` ↔ `image001.txt`
|
||
- ✅ 匹配:`订单1804264_51_7086683.jpg` ↔ `订单1804264_51_7086683.txt`
|
||
- ❌ 不匹配:`image001.jpg` ↔ `image_001.txt`(下划线不同)
|
||
- ❌ 不匹配:`image001.jpg` ↔ `image002.txt`(数字不同)
|
||
|
||
### 3. 空标注文件
|
||
|
||
如果标注文件存在但为空,工具**不会删除**对应的图片。如果需要处理空标注文件,需要额外检查。
|
||
|
||
### 4. 目录结构要求
|
||
|
||
确保目录结构正确:
|
||
```
|
||
datasets/handleImage/
|
||
├── train/ # 图片目录
|
||
│ ├── image1.jpg
|
||
│ ├── image2.jpg
|
||
│ └── ...
|
||
└── label/ # 标注目录
|
||
├── image1.txt
|
||
├── image2.txt
|
||
└── ...
|
||
```
|
||
|
||
---
|
||
|
||
## 🔍 输出说明
|
||
|
||
### 预览模式输出
|
||
|
||
```
|
||
找到 1330 个图片文件 # 图片总数
|
||
找到 1223 个标注文件 # 标注总数
|
||
发现 107 个没有标注的图片 # 需要删除的数量
|
||
```
|
||
|
||
### 删除模式输出
|
||
|
||
```
|
||
删除完成:
|
||
成功删除: 107 个文件 # 成功删除的数量
|
||
删除失败: 0 个文件 # 删除失败的数量(如果有)
|
||
```
|
||
|
||
### 完成状态输出
|
||
|
||
```
|
||
✓ 所有图片都有对应的标注文件!
|
||
```
|
||
|
||
---
|
||
|
||
## 💡 使用技巧
|
||
|
||
### 技巧 1: 先预览再删除
|
||
|
||
**推荐流程:**
|
||
```bash
|
||
# 步骤1: 预览检查
|
||
python check_and_clean_images.py
|
||
|
||
# 步骤2: 查看结果,确认要删除的文件
|
||
# 步骤3: 确认后删除
|
||
python check_and_clean_images.py --delete
|
||
```
|
||
|
||
### 技巧 2: 批量处理多个数据集
|
||
|
||
创建一个批处理脚本:
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
# process_datasets.sh
|
||
|
||
datasets=("handleImage" "仪表盘" "检测仪")
|
||
|
||
for dataset in "${datasets[@]}"; do
|
||
echo "处理数据集: $dataset"
|
||
# 修改脚本中的路径或使用参数
|
||
python check_and_clean_images.py
|
||
done
|
||
```
|
||
|
||
### 技巧 3: 检查反向问题
|
||
|
||
如果需要检查**有标注但没有图片**的情况,可以修改脚本或创建新工具。
|
||
|
||
---
|
||
|
||
## 🐛 常见问题
|
||
|
||
### Q1: 提示"目录不存在"
|
||
|
||
**错误信息:**
|
||
```
|
||
错误: 图片目录不存在: datasets/handleImage/train
|
||
```
|
||
|
||
**解决方法:**
|
||
1. 检查路径是否正确
|
||
2. 确认目录是否存在
|
||
3. 修改脚本中的默认路径
|
||
|
||
### Q2: 删除后想恢复文件
|
||
|
||
**解决方法:**
|
||
- 如果之前有备份,从备份恢复
|
||
- 如果没有备份,文件无法恢复(删除操作不可逆)
|
||
|
||
### Q3: 文件名不匹配
|
||
|
||
**问题:** 图片和标注文件名不完全一致
|
||
|
||
**解决方法:**
|
||
- 检查文件名格式
|
||
- 确保文件名(不含扩展名)完全一致
|
||
- 可以使用重命名工具统一文件名格式
|
||
|
||
### Q4: 在非交互式环境运行
|
||
|
||
**问题:** 使用 `--delete` 时提示需要输入
|
||
|
||
**解决方法:**
|
||
使用 `--force` 参数跳过确认:
|
||
```bash
|
||
python check_and_clean_images.py --delete --force
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 实际案例
|
||
|
||
### 案例 1: 清理 handleImage 数据集
|
||
|
||
```bash
|
||
# 1. 检查数据集
|
||
$ python check_and_clean_images.py
|
||
|
||
找到 1330 个图片文件
|
||
找到 1223 个标注文件
|
||
发现 107 个没有标注的图片
|
||
|
||
# 2. 确认后删除
|
||
$ python check_and_clean_images.py --delete
|
||
⚠ 警告: 将删除没有标注的图片文件!确认继续?(yes/no): yes
|
||
|
||
删除完成:
|
||
成功删除: 107 个文件
|
||
|
||
# 3. 再次验证
|
||
$ python check_and_clean_images.py
|
||
|
||
找到 1223 个图片文件
|
||
找到 1223 个标注文件
|
||
✓ 所有图片都有对应的标注文件!
|
||
```
|
||
|
||
### 案例 2: 处理其他数据集
|
||
|
||
修改脚本中的路径:
|
||
|
||
```python
|
||
# 在 check_and_clean_images.py 的 main() 函数中修改
|
||
train_dir = "datasets/仪表盘/train/images"
|
||
label_dir = "datasets/仪表盘/train/labels"
|
||
```
|
||
|
||
然后运行:
|
||
```bash
|
||
python check_and_clean_images.py
|
||
```
|
||
|
||
---
|
||
|
||
## 🔗 相关工具
|
||
|
||
- `verify_seg_labels.py` - 验证分割标注格式
|
||
- `check_label_format.py` - 检查标注格式类型
|
||
- `convert_bbox_to_seg.py` - 转换标注格式
|
||
|
||
---
|
||
|
||
## 📞 需要帮助?
|
||
|
||
如果遇到问题:
|
||
1. 查看本文档的"常见问题"部分
|
||
2. 运行 `python check_and_clean_images.py --help` 查看帮助
|
||
3. 检查数据集目录结构是否正确
|
||
|
||
---
|
||
|
||
## 📝 更新日志
|
||
|
||
- **v1.0** (2024): 初始版本
|
||
- 支持检查图片和标注文件
|
||
- 支持预览和删除模式
|
||
- 支持强制删除模式
|
||
|
||
---
|
||
|
||
**提示:** 使用前建议先备份数据,删除操作不可恢复!
|
||
|