jjsos_JJdetection/check_and_clean_images_使用教程.md

356 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 📋 图片标注检查工具使用教程
## 工具简介
`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): 初始版本
- 支持检查图片和标注文件
- 支持预览和删除模式
- 支持强制删除模式
---
**提示:** 使用前建议先备份数据,删除操作不可恢复!