Skip to main content

Camera-agnostic fisheye image projection library for ground-based sky observation

Project description

skycam

Camera-agnostic fisheye image projection library for ground-based sky observation

CI Coverage Python 3.12+ Pydantic v2 Typed Ruff uv PyPI License Docs


✨ Features

Feature Description
Numba JIT ~100x faster projection via compiled bilinear interpolation
💾 Coordinate Cache Sub-100ms init after first calibration load
🏛️ Hexagonal Architecture Clean separation of domain, adapters, and config
Pydantic v2 Validated settings with environment variable support
🔬 Scientific Accuracy WGS84 geodesic calculations via GeographicLib

🚀 Installation

uv add skycam

Or with pip:

pip install skycam

📖 Quick Start

from pathlib import Path

from skycam.adapters import JP2CalibrationLoader, load_jp2
from skycam.domain.models import ProjectionSettings
from skycam.domain.projection import ProjectionService

# Load calibration and create projector
loader = JP2CalibrationLoader(Path("calibration"))
calibration = loader.load("visible")
projector = ProjectionService(
    calibration=calibration,
    settings=ProjectionSettings(),
)

# Project fisheye → regular grid
projected = projector.project(load_jp2(Path("input.jp2")))

🏗️ Architecture

flowchart LR
    subgraph Adapters["Adapters"]
        CAL[JP2 Calibration]
        IMG[Image I/O]
    end
    
    subgraph Domain["Domain"]
        PROJ[ProjectionService]
        INTERP[Numba Bilinear]
    end
    
    subgraph Config["Config"]
        SETTINGS[SkycamSettings]
    end
    
    CAL --> PROJ
    IMG --> PROJ
    SETTINGS --> PROJ
    PROJ --> INTERP

⚙️ Configuration

Environment variables (prefix: SKYCAM_):

Variable Default Description
SKYCAM_CALIBRATION_DIR calibration JP2 calibration files directory
SKYCAM_CATEGORY visible Camera category (visible, infrarouge)
SKYCAM_DATA_DIR data Input/output data directory

🛠️ Development

git clone https://github.com/eurocontrol-asu/skycam.git
cd skycam
make install  # uv sync --all-groups
make check    # lint + audit + test

📚 Documentation

eurocontrol-asu.github.io/skycam

🤝 Contributing

See CONTRIBUTING.md for guidelines.

📄 License

EUPL-1.2 — See LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

skycam-0.1.0.tar.gz (18.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

skycam-0.1.0-py3-none-any.whl (19.5 kB view details)

Uploaded Python 3

File details

Details for the file skycam-0.1.0.tar.gz.

File metadata

  • Download URL: skycam-0.1.0.tar.gz
  • Upload date:
  • Size: 18.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for skycam-0.1.0.tar.gz
Algorithm Hash digest
SHA256 4a967da60275b08e1b3ca43fe946f8e252ed9f432ce4670547f110394b767f3a
MD5 9a15cbb4fd547baa3e87eb0382acef0b
BLAKE2b-256 a7bbbe8f63a960f7edb37c7ff30a50d03f173771d1701db9eb56b9f26117913a

See more details on using hashes here.

File details

Details for the file skycam-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: skycam-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 19.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for skycam-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cd519a8d7c9d1a3c88b4112f1bd4626360513fd4a73c7b7c7483c39f314db24a
MD5 65556417d9ddad9e3ca13c6bba205449
BLAKE2b-256 3a2d2bbe862edb2339fa825fa3412aefda253b6324a97226d91c76e1ddfc2301

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page