Image Annotation QC

v1.0.7

Image Annotation Quality Control Tool - Automatically detect quality issues in bounding box and polygon segmentation annotations, generate visual reports. Su...

0· 358· 8 versions· 1 current· 1 all-time· Updated 8h ago· MIT-0
byMingo_318@mingo-318

Install

openclaw skills install image-annotation-qc

Image Annotation QC Tool

Automatically detect quality issues in image annotations and generate detailed reports with visualization.

Features

  • Multi-format Support: COCO / YOLO / VOC / LabelMe
  • Auto-detection: Automatically identify format without specification
  • Scene-specific QC: general / road / industrial / security
  • Auto-save Reports: Save to qc_report/ directory automatically
  • Visualization: Generate images with error annotations (red boxes)
  • Multi-format Reports: TXT / JSON / Excel

Quick Start

# Basic usage (auto-detect format)
python3 scripts/qc_tool.py -i <image_dir> -a <annotation_dir>

# Specify format
python3 scripts/qc_tool.py -i ./images -a ./annotations -f labelme

# Industrial inspection scenario
python3 scripts/qc_tool.py -i ./images -a ./annotations -d industrial

# Sample 100 images
python3 scripts/qc_tool.py -i ./images -a ./annotations -s 100

# Specify output directory
python3 scripts/qc_tool.py -i ./images -a ./annotations -o ./my_report

# Generate Excel report
python3 scripts/qc_tool.py -i ./images -a ./annotations --formats txt json xlsx

Parameters

ParameterShortDescriptionDefault
--image-dir-iImage directory(required)
--annotation-aAnnotation file or directory(required)
--format-fAnnotation formatauto
--domain-dApplication scenariogeneral
--sample-sSample sizeall
--output-oOutput directory./qc_report
--formats-Report formatstxt json
--no-visual-Disable visualizationfalse

Scenarios

  • general: General purpose
  • road: Autonomous driving (small objects, occlusions)
  • industrial: Industrial inspection (micro-defects)
  • security: Security monitoring

Output Example

╔══════════════════════════════════════════╗
║           Image Annotation QC              ║
╠══════════════════════════════════════════╣
║  Images: 1000   Annotations: 4523         ║
║  Errors: 127    Quality Score: 85.5       ║
║  Accuracy: 97.2%                          ║
╚══════════════════════════════════════════╝

Output Files

After QC completes, the following files are generated in the annotation directory:

annotations/
├── qc_report/
│   ├── qc_report.txt      # Text report
│   ├── qc_report.json     # JSON detailed report
│   ├── qc_report.xlsx     # Excel report (optional)
│   └── visual/            # Visualization images
│       ├── frame_001_qc.png
│       └── frame_002_qc.png

Error Types

ErrorDescriptionWeight
MissingObvious targets not labeled1.0
WrongAnnotation region doesn't match target0.8
OffsetBox edge deviates >10px0.5
Too LargeBox significantly larger than target0.3
Too SmallBox doesn't fully contain target0.5
DuplicateSame object annotated multiple times0.5
Label ErrorWrong class label0.8

Quality Score

Score = 100 × (annotations - errors×weight) / annotations

Grading:
- 90+: Excellent
- 80-89: Good
- 70-79: Pass
- <70: Fail

Installation

pip install Pillow openpyxl

As Module

from qc_tool import AnnotationQC

qc = AnnotationQC('images/', 'annotations/', format='labelme')
data = qc.load_annotations()
result = qc.check_annotations(data)
qc.generate_report(result, formats=['txt', 'json'])
qc.visualize_errors(result)
print(f"Quality Score: {result.quality_score}")

Version tags

latestvk971a6g3t72prhc02rdkrcf1e182ah8m

Runtime requirements

🔍 Clawdis
Binspython3