# ID Cards Data Augmentation Tool A comprehensive data augmentation tool specifically designed for ID card images, implementing 7 different augmentation techniques to simulate real-world scenarios. ## 🎯 Overview This tool provides data augmentation capabilities for ID card images, implementing various transformation techniques that mimic real-world conditions such as worn-out cards, partial occlusion, different lighting conditions, and more. ## ✨ Features ### 7 Augmentation Techniques 1. **Rotation** - Simulates cards at different angles 2. **Random Cropping** - Simulates partially visible cards 3. **Random Noise** - Simulates worn-out cards 4. **Horizontal Blockage** - Simulates occluded card details 5. **Grayscale Transformation** - Simulates Xerox/scan copies 6. **Blurring** - Simulates blurred but readable cards 7. **Brightness & Contrast** - Simulates different lighting conditions ### Key Features - **Separate Methods**: Each augmentation technique is applied independently - **Quality Preservation**: Maintains image quality with white background preservation - **OpenCV Integration**: Uses OpenCV functions for reliable image processing - **Configurable**: Easy configuration through YAML files - **Progress Tracking**: Real-time progress monitoring - **Batch Processing**: Process multiple images efficiently ## 🚀 Installation ### Prerequisites - Python 3.7+ - OpenCV - NumPy - PyYAML - PIL (Pillow) ### Setup 1. **Clone the repository**: ```bash git clone cd IDcardsGenerator ``` 2. **Install dependencies**: ```bash pip install opencv-python numpy pyyaml pillow ``` 3. **Activate conda environment** (if using GPU): ```bash conda activate gpu ``` ## 📁 Project Structure ``` IDcardsGenerator/ ├── config/ │ └── config.yaml # Main configuration file ├── data/ │ └── IDcards/ │ └── processed/ # Input images directory ├── src/ │ ├── data_augmentation.py # Core augmentation logic │ ├── config_manager.py # Configuration management │ ├── image_processor.py # Image processing utilities │ └── utils.py # Utility functions ├── logs/ # Log files ├── out/ # Output directory └── main.py # Main script ``` ## ⚙️ Configuration ### Main Configuration (`config/config.yaml`) ```yaml # Data augmentation parameters augmentation: # Rotation rotation: enabled: true angles: [30, 60, 120, 150, 180, 210, 240, 300, 330] probability: 1.0 # Random cropping random_cropping: enabled: true ratio_range: [0.7, 1.0] probability: 1.0 # Random noise random_noise: enabled: true mean_range: [0.0, 0.7] variance_range: [0.0, 0.1] probability: 1.0 # Partial blockage partial_blockage: enabled: true num_occlusions_range: [1, 100] coverage_range: [0.0, 0.25] variance_range: [0.0, 0.1] probability: 1.0 # Grayscale transformation grayscale: enabled: true probability: 1.0 # Blurring blurring: enabled: true kernel_ratio_range: [0.0, 0.0084] probability: 1.0 # Brightness and contrast brightness_contrast: enabled: true alpha_range: [0.4, 3.0] beta_range: [1, 100] probability: 1.0 # Processing configuration processing: target_size: [640, 640] num_augmentations: 3 save_format: "jpg" quality: 95 ``` ## 🎮 Usage ### Basic Usage ```bash python main.py --input-dir data/IDcards/processed --output-dir out ``` ### Command Line Options ```bash python main.py [OPTIONS] Options: --config CONFIG Path to configuration file (default: config/config.yaml) --input-dir INPUT_DIR Input directory containing images --output-dir OUTPUT_DIR Output directory for augmented images --num-augmentations N Number of augmented versions per image (default: 3) --target-size SIZE Target size for images (width x height) --preview Preview augmentation on first image only --info Show information about images in input directory --list-presets List available presets and exit --log-level LEVEL Logging level (DEBUG, INFO, WARNING, ERROR) ``` ### Examples 1. **Preview augmentation**: ```bash python main.py --preview --input-dir data/IDcards/processed --output-dir test_output ``` 2. **Show image information**: ```bash python main.py --info --input-dir data/IDcards/processed ``` 3. **Custom number of augmentations**: ```bash python main.py --input-dir data/IDcards/processed --output-dir out --num-augmentations 5 ``` 4. **Custom target size**: ```bash python main.py --input-dir data/IDcards/processed --output-dir out --target-size 512x512 ``` ## 📊 Output ### File Naming Convention The tool creates separate files for each augmentation method: ``` im1_rotation_01.png # Rotation method im1_cropping_01.png # Random cropping method im1_noise_01.png # Random noise method im1_blockage_01.png # Partial blockage method im1_grayscale_01.png # Grayscale method im1_blurring_01.png # Blurring method im1_brightness_contrast_01.png # Brightness/contrast method ``` ### Output Summary After processing, you'll see a summary like: ``` ================================================== AUGMENTATION SUMMARY ================================================== Original images: 106 Augmented images: 2226 Augmentation ratio: 21.00 Successful augmentations: 106 Output directory: out ================================================== ``` ## 🔧 Augmentation Techniques Details ### 1. Rotation - **Purpose**: Simulates cards at different angles - **Angles**: 30°, 60°, 120°, 150°, 180°, 210°, 240°, 300°, 330° - **Method**: OpenCV rotation with white background preservation ### 2. Random Cropping - **Purpose**: Simulates partially visible ID cards - **Ratio Range**: 0.7 to 1.0 (70% to 100% of original size) - **Method**: Random crop with white background preservation ### 3. Random Noise - **Purpose**: Simulates worn-out cards - **Mean Range**: 0.0 to 0.7 - **Variance Range**: 0.0 to 0.1 - **Method**: Gaussian noise addition ### 4. Horizontal Blockage - **Purpose**: Simulates occluded card details - **Lines**: 1 to 100 horizontal lines - **Coverage**: 0% to 25% of image area - **Colors**: Multiple colors to simulate various objects ### 5. Grayscale Transformation - **Purpose**: Simulates Xerox/scan copies - **Method**: OpenCV `cv2.cvtColor()` function - **Output**: 3-channel grayscale image ### 6. Blurring - **Purpose**: Simulates blurred but readable cards - **Kernel Ratio**: 0.0 to 0.0084 - **Method**: OpenCV `cv2.filter2D()` with Gaussian kernel ### 7. Brightness & Contrast - **Purpose**: Simulates different lighting conditions - **Alpha Range**: 0.4 to 3.0 (contrast) - **Beta Range**: 1 to 100 (brightness) - **Method**: OpenCV `cv2.convertScaleAbs()` ## 🛠️ Development ### Adding New Augmentation Methods 1. Add the method to `src/data_augmentation.py` 2. Update configuration in `config/config.yaml` 3. Update default config in `src/config_manager.py` 4. Test with preview mode ### Code Structure - **`main.py`**: Entry point and command-line interface - **`src/data_augmentation.py`**: Core augmentation logic - **`src/config_manager.py`**: Configuration management - **`src/image_processor.py`**: Image processing utilities - **`src/utils.py`**: Utility functions ## 📝 Logging The tool provides comprehensive logging: - **File logging**: `logs/data_augmentation.log` - **Console logging**: Real-time progress updates - **Log levels**: DEBUG, INFO, WARNING, ERROR ## 🤝 Contributing 1. Fork the repository 2. Create a feature branch 3. Make your changes 4. Test thoroughly 5. Submit a pull request ## 📄 License This project is licensed under the MIT License - see the LICENSE file for details. ## 🙏 Acknowledgments - OpenCV for image processing capabilities - NumPy for numerical operations - PyYAML for configuration management ## 📞 Support For issues and questions: 1. Check the logs in `logs/data_augmentation.log` 2. Review the configuration in `config/config.yaml` 3. Test with preview mode first 4. Create an issue with detailed information --- **Note**: This tool is specifically designed for ID card augmentation and may need adjustments for other image types.