Skip to content

Mindful-AI-Assistants/3-project-ai-ml-yolo-helipoint-detector

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

208 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation




🧠 AI/ML Project 2 · Computer Vision · Helipoint Detector

Automated Helipad Detection Using YOLO and Satellite Imagery of SΓ£o Paulo, Brazil


Satellite Imagery   ✦   Urban Analytics   ✦   Object Detection   ✦   YOLO (v8 / v11)   ✦   Geospatial Intelligence



✨ Teaching YOLO to spot the city's most exclusive landing spots. ✨

Finding hidden H’s in the concrete jungle

One rooftop at a time. 🚁⚑️




Sponsor Mindful AI Assistants






Institution: Pontifical Catholic University of SΓ£o Paulo (PUC‑SP) β€” FACEI
Course: BSc in Humanistic AI & Data Science β€” 5th semester β€” 2026
Subject: Machine Learning / Computer Vision β€” YOLO
Project: P2 β€” Object Detection in Satellite Images with YOLO

Professor: ✨ Rooney Ribeiro Albuquerque Coelho
Authors:





Streamlit Repository Helipoint Detector

React Presentation Slides and Overview Data Analysis Report and PDF









Warning

⚠️ Projects may be publicly shared when permitted.
The focus is on applied, hands-on learning with real datasets in AI governance and security contexts.
All sensitive content remains protected in private repositories when required.



Tip

This repository is part of the flagship ecosystem:

🧠 AI & Machine Learning β€” Main Hub

Explore the complete collection of projects, notebooks, research materials, analyses, and interactive applications available in the central repository:

πŸ”— AI & Machine Learning β€” Hub

Related Project in this Series

πŸ”— AI/ML Project 1 Β· Computer Vision Β· EMNIST Vision Intelligence

A deep learning system for handwritten character recognition using PyTorch and Streamlit.

✨ Part of the Humanistic AI & Machine Learning Series

From handwriting to rooftops β€” simplicity was never in the roadmap. ⚑️



Important

This repository documents an end-to-end academic project in Computer Vision for automatic detection of helipads on rooftops using satellite images of the city of SΓ£o Paulo.
The focus goes beyond model training: it emphasizes dataset construction, annotation governance, reproducibility, and evaluation on unseen neighborhoods, in line with the briefing of Project 2 in the Machine Learning course.





The Helipoint Detector project implements a full Object Detection pipeline to identify helipads on rooftops in the city of SΓ£o Paulo, using high-resolution aerial and orbital imagery and models from the YOLOv8/YOLOv11 family.

The repository covers the entire lifecycle of an applied AI system in computer vision: programmatic image collection, geospatial automation, dataset creation and curation, annotation, preprocessing, training, quantitative and qualitative evaluation, inference on unseen neighborhoods and, optionally, an application layer for demo purposes.

The repository was designed to present the complete lifecycle of an AI application in a documented and academically transparent form, making it useful for professors, beginner practitioners, and students learning object detection with real urban imagery.

Rather than relying on a ready-made benchmark, the project emphasizes the construction of an original dataset, reproducible experimentation, and inference on unseen regions.



The main objective is to build an end-to-end system capable of detecting helipads on rooftops in the city of SΓ£o Paulo, following all model lifecycle stages defined in the briefing:

- programmatic acquisition of satellite data
- visual curation and tile filtering
- annotation with well-defined bounding boxes
- preprocessing and augmentations
- training and monitoring in Colab
- quantitative evaluation and qualitative error analysis
- inference on an entire neighborhood not used during training

From an educational perspective, the work was also designed to help students understand how a real AI pipeline is built, validated, and communicated. The project therefore integrates data collection, annotation, preprocessing, model training, evaluation, and simple deployment in one coherent workflow.

Methodologically, the project reinforces that model performance is directly tied to data quality, annotation consistency and geographical diversity, rather than small tweaks to the architecture.



Helipads are a compelling educational target because they often present a distinctive top-down geometric pattern while still being difficult enough to create realistic detection challenges.

In urban satellite imagery, helipads may be confused with rooftop structures, sports markings, bright reflective surfaces, or architectural patterns. This makes them ideal for discussing false positives, annotation quality, and model generalization.



The project dataset was built from satellite imagery collected over SΓ£o Paulo, with a focus on neighborhoods relevant to the academic briefing and regions where helipads are more likely to appear.

The geographical scope follows the briefing: city of SΓ£o Paulo, focusing on neighborhoods near the PUC‑SP campus in Perdizes and regions with high helipad density, such as:

- Perdizes, HigienΓ³polis, Pacaembu and SumarΓ©
- Paulista Avenue, Itaim Bibi and Pinheiros
- Faria Lima, Berrini, Vila OlΓ­mpia and Brooklin
- other relevant urban areas such as Morumbi and adjacent regions



  • ESRI World Imagery (XYZ tiles) β€” main source, with sub-meter resolution and programmatic HTTP access
  • Google Earth Web β€” complementary source, used only for punctual captures of specific targets, not for bulk collection
  • GeoSampa β€” mentioned as an alternative high-resolution source, possible extra beyond the base scope

Images are stored as .jpg or .png, as required by the project.

Whenever imagery or derived mosaics are reproduced, the required attribution is:
Source: Esri, Maxar, Earthstar Geographics, and the GIS User Community.



The work was developed in the context of Project 2 β€” Object Detection in Satellite Images with YOLO, whose briefing requires each group to:

- choose a single target class
- build an original dataset , without using pre-made sets
- use ESRI World Imagery (XYZ tiles) as the main image source
- perform programmatic collection, annotation, training, evaluation and inference on an unseen neighborhood
- deliver an annotated dataset, notebooks, model weights, report and presentation

The central pedagogical message is that around 80% of the effort in AI is in the data, not in the architecture. The YOLO model is practically the same for all groups; the real differentiator comes from dataset quality, manual curation and annotation consistency.



Manually identifying helipads in dense urban environments is a slow, subjective and hard-to-scale task. On high-resolution imagery, rooftops with circular patterns, HVAC equipment, sport markings, shadows, reflections and urban geometry can visually resemble the characteristic helipad β€œH”.

This project addresses that challenge with an Object Detection pipeline that turns raw geospatial imagery into structured visual intelligence, reducing manual effort and enabling:

- faster, more systematic helipad localization
- assessment of the model’s generalization ability across different neighborhoods
- study of error patterns in real urban contexts
- organized and reproducible data, image and evidence handling



Beyond the minimum briefing requirements, the group developed an extra geospatial automation resource to speed up helipad discovery before the annotation stage.





Instead of relying solely on manual inspection in maps, the system:

1. queries a public aviation website with airport and helipad records
2. automates navigation and scraping with Selenium
3. extracts geographic coordinates and metadata for each helipad
4. converts these coordinates into geographic bounding boxes
5. uses these boxes as input to download ESRI satellite tiles
6. generates mosaics ready for triage, annotation and upload to Roboflow


Warning

This resource drastically reduces target search time and strengthens construction of a broader, traceable dataset useful for future training cycles.



The solution can be viewed as an architecture with seven main blocks:

  1. Helipad discovery β€” automation on an aviation website to locate records with coordinates
  2. Geographic extraction β€” conversion and normalization of coordinates to usable decimal format
  3. Geographic perimeter generation β€” creation of bounding boxes around each point
  4. Visual acquisition β€” download of ESRI World Imagery satellite tiles based on these boxes
  5. Visual triage β€” manual selection of crops with clear helipad presence
  6. Annotation and versioning β€” use of Roboflow for labeling, preprocessing, splits and augmentations
  7. Training, evaluation and inference β€” YOLO training in Colab, performance measurement and generalization tests on unseen neighborhoods



%%{
  init: {
    "theme": "dark",
    "themeVariables": {
      "background": "#0b1220",
      "primaryColor": "#000000",
      "primaryTextColor": "#ffffff",
      "primaryBorderColor": "#000000",
      "lineColor": "#14b8a6",
      "secondaryColor": "#000000",
      "secondaryTextColor": "#ffffff",
      "secondaryBorderColor": "#000000",
      "tertiaryColor": "#000000",
      "tertiaryTextColor": "#ffffff",
      "tertiaryBorderColor": "#000000",
      "mainBkg": "#000000",
      "nodeBorder": "#000000",
      "clusterBkg": "#020617",
      "clusterBorder": "#000000",
      "titleColor": "#ffffff",
      "edgeLabelBackground": "#0b1220",
      "fontFamily": "Inter, Segoe UI, Arial, sans-serif"
    }
  }
}%%

flowchart TD

    A["FlightMarket / aviation website"] --> B["Selenium automation<br/>BOTHELIPONTO.py"]
    B --> C["Helipad records + metadata"]
    C --> D["Coordinates CSV<br/>cordenadasheli.csv"]
    D --> E["Coordinate conversion<br/>Transformarcordenadas.py"]
    E --> F["Geographic bounding boxes"]
    F --> G["ESRI World Imagery<br/>XYZ tile download"]
    G --> H["Image mosaics by region<br/>Imagens.ipynb"]
    H --> I["Manual visual triage"]
    I --> J["Selected images with helipads"]
    J --> K["Roboflow upload"]
    K --> L["Bounding box annotation<br/>single class: helipad"]
    L --> M["Preprocessing + augmentations<br/>resize 640x640"]
    M --> N["Dataset split<br/>train / valid / test"]
    N --> O["YOLO export<br/>data.yaml + labels"]
    O --> P["Google Colab training<br/>Ultralytics YOLOv8 / YOLOv11"]
    P --> Q["Runs, weights and metrics<br/>runs/detect/.../best.pt"]
    Q --> R["Quantitative evaluation<br/>mAP, Precision, Recall, confusion matrix"]
    Q --> S["Qualitative analysis<br/>hits, false positives, false negatives"]
    Q --> T["Inference on unseen neighborhood<br/>New Images/"]
    T --> U["Generalization assessment"]
    Q --> V["Optional web app<br/>Site.py"]

    subgraph G1["Geospatial Discovery"]
      A
      B
      C
      D
      E
      F
    end

    subgraph G2["Visual Acquisition"]
      G
      H
      I
      J
    end

    subgraph G3["Dataset Engineering"]
      K
      L
      M
      N
      O
    end

    subgraph G4["Modeling and Validation"]
      P
      Q
      R
      S
      T
      U
      V
    end
Loading

Tip

The pipeline should be understood as a learning architecture as much as a software architecture. It shows how raw geospatial imagery is > > gradually transformed into a validated and demonstrable AI artifact.



The repository structure was organized to reflect pipeline stages, including geographic automation, image generation, training, inference, evaluation and documentation.


Helipoint-Detector/
β”‚
β”œβ”€β”€ .devcontainer/                  # Dev environment configuration
β”œβ”€β”€ AI Training/                    # Trained weights, checkpoints and training artifacts
β”œβ”€β”€ Briefing/                       # Reference materials for Project 2
β”œβ”€β”€ New Images/                     # Unseen images used for inference and generalization tests
β”œβ”€β”€ Preprocessing Data/             # Inputs and intermediate preprocessing outputs
β”œβ”€β”€ runs/detect/                    # YOLO outputs (logs, curves, confusion matrices, weights)
β”‚
β”œβ”€β”€ Analise.ipynb                   # Main notebook for analysis, evaluation and inference
β”œβ”€β”€ Treinamento_YOLO.ipynb          # Notebook focused on YOLO model training
β”œβ”€β”€ Imagens.ipynb                   # Notebook for ESRI tile download and mosaic creation
β”‚
β”œβ”€β”€ BOTHELIPONTO.py                 # Selenium bot for helipad search automation
β”œβ”€β”€ Transformarcordenadas.py        # Coordinate conversion and geographic bounding box generation
β”œβ”€β”€ cordenadasheli.csv              # Consolidated helipad coordinates and metadata
β”œβ”€β”€ Site.py                         # Application script (optional web/interface layer)
β”‚
β”œβ”€β”€ requirements.txt                # Python dependencies
β”œβ”€β”€ packages.txt                    # Additional environment/system dependencies
└── README.md                       # Main documentation

Tip

This organization facilitates navigation, reproducibility and project evolution, clearly separating collection, preprocessing, training, > inference and application.



Heliponto.rar is the compressed annotated dataset used in the project workflow.

It is not a prebuilt third-party benchmark. Instead, it represents the packaged output of the group’s own dataset-building process: programmatic tile acquisition, manual curation, annotation, export in YOLO-compatible format, and organization for training reuse.

This distinction is academically important because it makes clear that the dataset itself is part of the project deliverable, not an external shortcut.



In this project, Roboflow was used as the annotation and dataset management platform rather than as the origin of the imagery.

Its role was to support image upload, bounding-box labeling, dataset versioning, augmentation, train/validation/test splitting, and export in YOLOv8-compatible format. In practical terms, Roboflow bridges the gap between raw tiles and a training-ready object detection dataset.



The project follows an end-to-end methodology aligned with educational best practices in applied Computer Vision.

  1. Data collection: satellite tiles are collected programmatically from ESRI World Imagery.
  2. Manual curation: irrelevant tiles are discarded to improve dataset quality.
  3. Annotation: helipads are labeled with tight bounding boxes in Roboflow.
  4. Preprocessing: the dataset is standardized and split into training, validation, and test subsets.
  5. Training: a YOLO model is trained in a GPU-enabled environment.
  6. [Evaluation: performance is examined with metrics and qualitative error analysis.
  7. Inference: the trained model is applied to unseen images and new geographic areas.
  8. Application layer: a lightweight interface makes the model easier to demonstrate and inspect.

Important

This methodology highlights a key lesson in AI education: the quality of results is strongly influenced by data engineering and annotation decisions, not only by the network architecture.



The Helipoint Detector technical pipeline can be summarized in 12 steps:

1. Discover helipad records on an aviation website
2. Extract coordinates and location information
3. Save and organize the data in cordenadasheli.csv
4. Convert coordinates into geographic bounding boxes
5. Download ESRI World Imagery satellite tiles
6. Build mosaics per neighborhood or region
7. Manually triage mosaics, keeping only images with helipads
8. Upload selected images to Roboflow
9. Annotate helipads with consistent bounding boxes
10. Generate dataset versions with resize, splits and augmentations, exporting in YOLO format
11. Train YOLO models in Colab, monitoring metrics and train/validation curves
12. Run inference on unseen neighborhoods and analyze results


Tip

This turns a manual, scattered search into a more scalable, traceable and reproducible process.



Programmatic collection follows the XYZ tile pattern of the ESRI World Imagery public service, as recommended in the briefing:

- define zoom by target type - use z = 19 for helipads and other small targets -define bounding boxes per neighborhood (lon_min, lat_min, lon_max, lat_max) - convert bounding boxes to tile indices (z, x, y) via a deg2tile function - download each tile, checking HTTP status and filtering placeholders - organize tiles into folders by neighborhood and zoom


Tip

The Imagens.ipynb notebook generalizes this flow for multiple coordinates and bounding boxes, reading cordenadasheli.csv and producing > mosaics and crops ready for triage.



In some cases, Google Earth Web may be used as a complement:

- only for specific helipad examples - preserving consistent zoom - cropping approximately square areas and resizing to 640Γ—640


Tip

Bulk screenshot collection from Google is not used, in line with usage restrictions and the briefing.



In alignment with the project:

- minimum volume of 200 images with the target object after curation - geographical diversity with at least 3 different neighborhoods in training - holdout of at least 1 fully unseen neighborhood for final generalization testing - manual triage of tiles, discarding crops without helipads


Tip

Curation is not only an operational step; it is also part of the academic evaluation.



Image annotation was carried out with focus on consistency and alignment with course rules.


Roboflow is used as the central platform for:

- uploading selected images - drawing bounding boxes - standardizing labels (a single class: helipad) - resizing to 640Γ—640 - data augmentation and version creation - splitting into train / valid / test - exporting in YOLOv8/YOLOv11 format


Tip

Other tools like CVAT.ai are compatible, but the main flow is structured around Roboflow for simplicity.


- single target class
- tight bounding boxes, without excessive area
- written criteria for partially visible objects, shadows, reflections and ambiguous cases
- annotation work shared across team members, not concentrated in a single person


In Roboflow, the following were configured:

- resize to 640Γ—640
-augmentations such as 90Β° rotations, horizontal/vertical flips and small brightness/contrast changes
- standard splits:


dataset/
β”œβ”€β”€ data.yaml
β”œβ”€β”€ train/
β”‚   β”œβ”€β”€ images/
β”‚   └── labels/
β”œβ”€β”€ valid/
β”‚   β”œβ”€β”€ images/
β”‚   └── labels/
└── test/
    β”œβ”€β”€ images/
    └── labels/

Tip

Each .txt in labels/ contains, per line, normalized coordinates (class_id, x_center, y_center, width, height).



Detector training was done with Ultralytics YOLO on Google Colab with a T4 GPU, following briefing recommendations.


- Python 3.x
- PyTorch
- ultralytics library
- roboflow library for dataset integration
- Jupyter Notebook / Google Colab Free (T4 GPU)


Example snippet used in the notebooks:


!pip install -q ultralytics roboflow

from ultralytics import YOLO

model = YOLO('yolov8n.pt')  # or 'yolo11n.pt'

results = model.train(
    data='data.yaml',
    epochs=30,
    imgsz=640,
    batch=16,
    device=0,
    seed=42,
    project='runs',
    name='exp1'
)

n line with the briefing, at least two experiments were run, varying one hyperparameter at a time (for example, epochs, batch or imgsz) and comparing results.

All relevant hyperparameters are recorded to allow pipeline re-execution, and YOLO automatically saves the best checkpoint to:

runs/detect/exp1/weights/best.pt



Model evaluation is carried out on two complementary fronts: [quantitative metrics](0 and qualitative analysis.


The following are analyzed:

Additionally, curves are inspected for:



In line with the briefing, the project performs visual analysis of:

Always with plausible explanations for each error pattern, relating background texture, β€œH” contrast, viewing angle, image quality and diversity of similar examples in training.

This dual perspective is especially useful in educational settings because it helps beginners understand that model quality is not captured by a single number.



ne of the most important parts of the project is testing whether the model generalizes to regions not seen during training.

The pipeline includes:

  1. generating mosaics for a neighborhood entirely excluded from training
  2. running the YOLO model on all tiles of this mosaic
  3. discussing in the report/notebook at least 5 tiles with hits, false positives and false negatives

Example inference code:

from ultralytics import YOLO

model = YOLO('runs/detect/exp1/weights/best.pt')

results = model.predict(
    source='New Images/',
    save=True,
    conf=0.25
)
















πŸ›ΈΰΉ‹ My Contacts Hub




────────────── βŠΉπŸ”­ΰΉ‹ ──────────────

➣➒➀ Back to Top

Copyright 2026 Mindful-AI-Assistants. Code released under the MIT license.

About

🧠 3- AI / ML - Project 2: End‑to‑end YOLO object detection project for rooftop helipads in SΓ£o Paulo, covering geospatial automation, Roboflow annotation, training, evaluation and a demo web app. 🚁

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

 

Contributors

Languages

  • Jupyter Notebook 99.9%
  • Python 0.1%