--- title: ProjectX emoji: πŸ—οΈ colorFrom: red colorTo: gray sdk: docker pinned: false --- # πŸ—οΈ Illegal Construction Detector > **AI-powered satellite/aerial image analysis for detecting buildings in restricted zones using semantic segmentation.** [![Python](https://img.shields.io/badge/Python-3.8%2B-blue?logo=python)](https://www.python.org/) [![PyTorch](https://img.shields.io/badge/PyTorch-2.x-EE4C2C?logo=pytorch)](https://pytorch.org/) [![Flask](https://img.shields.io/badge/Flask-API-black?logo=flask)](https://flask.palletsprojects.com/) [![License](https://img.shields.io/badge/License-See%20LICENSE-green)](#license) --- ## πŸ“Œ Overview This project uses a deep learning segmentation model to automatically identify buildings in aerial or satellite imagery and flag those that fall within user-defined restricted/zoning areas. It is designed for urban planning, land administration, and regulatory compliance workflows. **Key capabilities:** - Semantic segmentation of buildings from high-resolution aerial images - Patch-based inference for large images of arbitrary size - Zoning mask overlay to classify buildings as **legal** or **illegal** - REST API backend (Flask) with base64 image response for easy frontend integration - Visual overlay output highlighting illegal structures in red and legal structures in green --- ## 🧠 Model Architecture | Component | Detail | |---|---| | Architecture | U-Net | | Encoder | EfficientNet-B3 (ImageNet pretrained) | | Loss Function | Dice Loss (binary) | | Optimizer | Adam (lr = 1e-4) | | LR Scheduler | ReduceLROnPlateau (patience=3, factor=0.5) | | Input | RGB patches of 256 Γ— 256 px | | Output | Binary segmentation mask (building / non-building) | The model was trained on the [Massachusetts Buildings Dataset](https://www.kaggle.com/datasets/balraj98/massachusetts-buildings-dataset) for 30 epochs with augmentations including horizontal/vertical flips, random 90Β° rotation, and brightness/contrast jitter. --- ## πŸ—‚οΈ Repository Structure ``` β”œβ”€β”€ app.py # Flask API server β”œβ”€β”€ best_model.pth # Trained model weights β”œβ”€β”€ requirements.txt # Python dependencies β”œβ”€β”€ sourcecode.ipynb # Model training notebook (Kaggle) β”œβ”€β”€ inference_script.ipynb # Standalone inference & visualization notebook β”œβ”€β”€ static/ β”‚ └── index.html # Frontend UI (served by Flask) └── README.md ``` --- ## βš™οΈ Installation ### Prerequisites - Python 3.8+ - CUDA-compatible GPU *(optional but recommended)* ### Steps ```bash # 1. Clone the repository git clone https://github.com/your-username/illegal-construction-detector.git cd illegal-construction-detector # 2. Create and activate a virtual environment python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate # 3. Install dependencies pip install -r requirements.txt # 4. Place the model weights in the project root # Ensure best_model.pth is present (download from Releases or train your own) ``` --- ## πŸš€ Usage ### Option 1 β€” Flask Web API ```bash python app.py ``` The server starts at `http://localhost:5000`. Navigate there in your browser to use the UI, or send requests directly: ```bash curl -X POST http://localhost:5000/predict \ -F "image=@/path/to/aerial_image.png" ``` **Response JSON:** ```json { "verdict": "ILLEGAL CONSTRUCTION DETECTED", "illegal_count": 3, "legal_count": 12, "total_count": 15, "illegal_percent": 8.42, "device": "cuda", "original": "", "mask": "", "overlay": "" } ``` ### Option 2 β€” Jupyter Notebook Inference Open `inference_script.ipynb` and update the following variables: ```python MODEL_PATH = "best_model.pth" # path to weights IMAGE_PATH = "test_image.png" # path to your aerial image ``` Run all cells to generate the building mask, zoning overlay, and illegal building highlights. --- ## πŸ—ΊοΈ Zoning Configuration By default, the right half of any image is treated as a restricted zone. To customise this, modify the `create_zoning_mask` function in `app.py` or the inference notebook: ```python def create_zoning_mask(shape): h, w = shape zoning = np.zeros((h, w), dtype=np.uint8) # Example: mark a rectangular region as restricted zoning[100:400, 200:600] = 1 return zoning ``` Any building whose pixels overlap with the restricted zone (`zoning == 1`) is classified as **illegal**. --- ## πŸ‹οΈ Training The full training pipeline is available in `sourcecode.ipynb`, designed to run on Kaggle with GPU acceleration. **Dataset:** [Massachusetts Buildings Dataset](https://www.kaggle.com/datasets/balraj98/massachusetts-buildings-dataset) **Training configuration:** ```python PATCH_SIZE = 256 BATCH_SIZE = 8 EPOCHS = 30 LEARNING_RATE = 1e-4 ``` **Augmentations:** Horizontal flip, vertical flip, random 90Β° rotation, brightness/contrast jitter **Metrics tracked:** Dice Loss Β· IoU Score To retrain, update `BASE_PATH` in the notebook to your dataset location and run all cells. The best-performing checkpoint (highest IoU) is saved as `best_model.pth`. --- ## πŸ“Š Results | Metric | Value | |---|---| | Validation IoU | Tracked per epoch | | Inference mode | Patch-based (256Γ—256), supports arbitrary image sizes | | Supported formats | PNG, JPG, TIFF | --- ## πŸ”§ Dependencies ``` flask torch torchvision segmentation-models-pytorch albumentations opencv-python pillow numpy ``` Install all with: ```bash pip install -r requirements.txt ``` > **Note for Windows users:** If you encounter a `fbgemm.dll` error when importing PyTorch, ensure you have the [Microsoft Visual C++ Redistributable](https://aka.ms/vs/17/release/vc_redist.x64.exe) installed. --- ## 🀝 Contributing Contributions are welcome. Please open an issue first to discuss proposed changes, then submit a pull request. 1. Fork the repository 2. Create a feature branch (`git checkout -b feature/your-feature`) 3. Commit your changes (`git commit -m 'Add your feature'`) 4. Push and open a Pull Request --- ## πŸ“„ License See the [LICENSE](LICENSE) file for details. --- ## πŸ™ Acknowledgements - [Massachusetts Buildings Dataset](https://www.kaggle.com/datasets/balraj98/massachusetts-buildings-dataset) by Balraj Ashwath - [segmentation-models-pytorch](https://github.com/qubvel/segmentation_models.pytorch) by Pavel Iakubovskii - [Albumentations](https://albumentations.ai/) augmentation library