Skip to content

Pontos

AI-powered ship detection system using Sentinel-2 satellite imagery and YOLO11s


Overview

Pontos is a production-ready AI-powered ship detection system that combines Sentinel-2 satellite imagery with YOLO11s deep learning to automatically identify and geolocate naval vessels worldwide.

Named after Pontos (Πόντος), the primordial Greek god of the sea. Just as Pontos embodied the vast ocean connecting all lands, this project monitors global maritime activity from space, watching the seas from the heavens.

  • Satellite Integration


    Direct Sentinel-2 L1C imagery download via Sentinel Hub API with cloud coverage filtering

  • AI-Powered Detection


    YOLO11s model optimized for marine vessel detection with GPU acceleration support

  • Geospatial Accuracy


    Precise pixel-to-coordinate transformation using PyProj with GeoJSON export

  • Production-Ready


    97% test coverage, CI/CD pipeline, Docker support with ROCm/CUDA acceleration


Architecture

flowchart TB
    subgraph Input
        CLI[CLI / Python API]
    end

    subgraph Core["Core Pipeline"]
        SENT[SentinelDataSource]
        DET[VesselDetector]
        GEO[GeoExporter]
    end

    subgraph External
        API[Sentinel Hub API]
        YOLO[YOLO11s Model]
    end

    subgraph Output
        JSON[GeoJSON]
    end

    CLI --> SENT
    CLI --> DET
    SENT --> API
    DET --> YOLO
    SENT --> GEO
    DET --> GEO
    GEO --> JSON

Core Components

Module Description
pontos.cli Click-based command-line interface
pontos.config Configuration management with environment variable support
pontos.detector YOLO11s wrapper for ship detection
pontos.sentinel Sentinel Hub API client for satellite data
pontos.geo Geospatial coordinate transformation and GeoJSON generation

Quick Example

from pontos import SentinelDataSource, VesselDetector, GeoExporter

# 1. Download satellite imagery
sentinel = SentinelDataSource()
scene_path = sentinel.get_scene(
    bbox=(5.85, 43.08, 6.05, 43.18),  # Toulon, France
    time_range=("2026-01-01", "2026-01-31")
)

# 2. Detect vessels
detector = VesselDetector()
detections = detector.detect(scene_path)

# 3. Export to GeoJSON
GeoExporter.detections_to_geojson(
    detections=detections,
    bbox=(5.85, 43.08, 6.05, 43.18),
    image_size=(1024, 1024),
    output_path="vessels.geojson"
)

Features

  • Real-Time Ship Detection - YOLO11s model optimized for marine vessels
  • Satellite Integration - Direct Sentinel-2 L1C imagery download
  • GPU Acceleration - Automatic GPU/CPU fallback with ROCm and CUDA support
  • Geospatial Accuracy - Precise pixel-to-coordinate transformation
  • Production-Ready - 97% test coverage, CI/CD pipeline
  • Command Line Interface - Single-command operation for quick scans
  • Extensible API - Python package with modular components
  • Cloud Coverage Filtering - Configurable threshold for image quality
  • Docker Support - Multi-stage builds with GPU acceleration

Validation

The system has been validated on the Toulon French naval base, successfully detecting 10+ vessels with:

  • 97% test coverage
  • GPU/CPU automatic fallback
  • Precise geolocation accuracy

Next Steps