aymenhmaidiwastaken/cosmicwatch

GitHub: aymenhmaidiwastaken/cosmicwatch

CosmicWatch 是一个AI驱动的太空与地球监测平台,利用NASA数据和机器学习分析威胁如小行星撞击和野火,帮助科研和环保部门进行决策。

Stars: 12 | Forks: 0

CosmicWatch Logo

CosmicWatch

实时地球与太空监测平台
一个由 AI 驱动的智能仪表板,结合了 NASA 卫星数据、机器学习和交互式可视化。

Python 3.11+ Dash 4.0 FastAPI scikit-learn NASA Open Data MIT License

CosmicWatch 是一个全栈数据智能平台,它摄取、处理并可视化来自多个 NASA 来源的实时数据。它利用**机器学习流水线**对系外行星进行分类、评估小行星风险、检测轨迹异常、预测野火活动,并通过交互式暗色主题仪表板生成统一威胁报告。

CosmicWatch Home

## 目录 - [功能](#features) - [屏幕截图](#screenshots) - [架构](#architecture) - [AI 与机器学习流水线](#ai--machine-learning-pipeline) - [数据源](#data-sources) - [技术栈](#tech-stack) - [入门指南](#getting-started) - [使用方法](#usage) - [项目结构](#project-structure) - [API 参考](#api-reference) - [贡献指南](#contributing) - [许可证](#license) ## 功能 ### 行星探索器 分析来自 NASA 系外行星档案库的 **5,000 多颗已确认系外行星**。AI 流水线为每颗行星计算地球相似性指数 (ESI),运行 KMeans 聚类来分组相似的世界,并使用 DBSCAN 标记异常 —— 帮助您发现哪些遥远行星最像地球。 - 对所有已知系外行星进行向量化 ESI 计算 - 基于机器学习的宜居性分类 (KMeans + DBSCAN) - 交互式赫罗图、ESI 散点图、3D 聚类可视化 - 行星与地球的雷达对比图 - 按宜居性类别、发现方法、温度和 ESI 范围筛选 ### 小行星追踪器 使用 JPL 的近地天体接近和哨兵风险 API 监测**近地天体**。每颗小行星都会根据接近程度、大小、速度和撞击概率计算出一个综合风险评分,并使用 Isolation Forest 模型标记偏离预期轨道模式的轨迹异常。 - 综合风险评分:`0.35 × 接近程度 + 0.30 × 大小 + 0.20 × 速度 + 0.15 × 概率` - 基于轨迹特征的 Isolation Forest 异常检测 - 近地天体接近的 3D 轨道可视化 - 风险热图 (距离 vs. 速度)、时间线和分布图 - 带有完整轨道参数的对象详细检查器 ### 野火追踪器 使用 NASA FIRMS 卫星数据跟踪全球 **49,000 多个活跃火点**。该流水线对火灾强度进行分类,按区域映射检测点,并运行 ARIMA 时间序列预测来预测未来 7 天的野火活动 —— 使用 CUSUM 变点检测来标记野火行为的突然变化。 - 实时卫星火点检测图 (MODIS/VIIRS) - 带有 95% 置信区间的 ARIMA(2,1,2) 预测 - 用于趋势转变的 CUSUM 变点检测 - 基于火辐射功率的强度分类 (非常低 → 极端) - 按区域、置信度、火辐射功率 (FRP)、日期范围、昼夜和强度筛选 ### 空间报告 一个统一的威胁评估,同时运行所有三个模块,关联跨领域的发现,并生成一份包含威胁评分、跨模块关联和优先级警报的情报简报。 - 一键生成涵盖所有模块的报告 - 带有彩色条形图的分模块威胁评分 - 跨模块时间关联分析 - 带有严重性徽标的优先警报源 - 统一的威胁等级分类 (低 → 严重) ## 屏幕截图 ### 行星探索器 — 系外行星宜居性分析

Planet Explorer

### 小行星追踪器 — 近地天体风险雷达

Asteroid Tracker

### 野火追踪器 — 全球火灾监测

Wildfire Tracker

### 空间报告 — 统一威胁评估

Space Report

### 加载体验与深色/浅色主题

Loading Screen

## 架构 ``` ┌──────────────────────────────────────────────────────────┐ │ CosmicWatch Platform │ ├──────────┬──────────┬──────────┬─────────────────────────┤ │ Dash │ FastAPI │ Rich CLI │ Scheduled Jobs │ │ Dashboard│ REST API │ Terminal │ (APScheduler) │ ├──────────┴──────────┴──────────┴─────────────────────────┤ │ Correlation Engine & Threat Matrix │ ├──────────────────────────────────────────────────────────┤ │ Planet Explorer │ Asteroid Tracker │ Wildfire Tracker│ │ ───────────── │ ──────────────── │ ────────────── │ │ ESI Computation │ Risk Scoring │ ARIMA Forecast │ │ KMeans Clusters │ Isolation Forest │ CUSUM Detect │ │ DBSCAN Anomaly │ Orbital Mechanics │ Geospatial Map │ ├──────────────────────────────────────────────────────────┤ │ ML Ensemble │ Feature Store │ Pipelines │ ├──────────────────────────────────────────────────────────┤ │ Data Layer: httpx Downloader │ SQLite Cache │ Store │ ├──────────────────────────────────────────────────────────┤ │ NASA Exoplanet │ JPL CNEOS/Sentry │ NASA FIRMS │ │ Archive (TAP) │ (Close Approach) │ (MODIS/VIIRS) │ └──────────────────────────────────────────────────────────┘ ``` ### 基于插件的模块系统 每个数据模块(系外行星、近地天体、野火)都是自包含的,拥有自己的 ETL 流水线、机器学习模型和可视化。模块通过插件注册表自我注册,通过异步事件总线通信,并输入统一关联引擎。 ### ETL 流水线设计 每个模块遵循 4 阶段流水线:**提取 → 验证 → 转换 → 加载** 1. **提取** — 从 NASA API 下载原始数据(带有进度跟踪的 httpx) 2. **验证** — 移除空值、去重、强制范围检查、类型转换 3. **转换** — 计算衍生特征、运行机器学习模型、分类结果 4. **加载** — 将处理后的 DataFrame 缓存在内存中 + 持久化到磁盘 ## AI 与机器学习流水线 CosmicWatch 在其数据处理流水线中广泛使用 AI 和机器学习 —— 这不是事后添加,而是将原始 NASA 数据转化为可行见解的核心智能层。 ### 数据清洗与预处理 原始 NASA 数据集很混乱:缺失值、单位不一致、重复项和异常值噪声。该流水线自动处理这些: - **缺失值插补** — 数值特征(半径、质量、温度)的中位数填充,以保持分布形状而不引入偏差 - **类型强制转换** — 将混合类型列自动转换为数值类型并进行错误处理 - **重复移除** — 按主键(行星名称、小行星编号)去重,保留规范条目 - **范围验证** — 物理约束检查(纬度 ±90°、经度 ±180°、正半径/质量) - **异常值过滤** — 基于 DBSCAN 的异常检测在下游分析之前移除物理上不可能的值 - **特征工程** — 从原始数据计算的衍生列:由质量/半径得出的体密度、逃逸速度、宜居带边界、火灾强度类别 ### 地球相似性指数 (ESI) — 向量化计算 ESI 在 0-1 的尺度上量化系外行星与地球的相似程度。该公式使用 NumPy 向量化操作**同时计算所有 5,000 多颗行星**: ``` ESI = ∏ (1 - |x_i - x_earth| / (x_i + x_earth)) ^ (w_i / n) ``` | 参数 | 地球值 | 权重 | |---|---|---| | 半径 | 1.0 R⊕ | 0.57 | | 体密度 | 5.51 g/cm³ | 1.07 | | 逃逸速度 | 11.186 km/s | 0.70 | | 表面温度 | 288 K | 5.58 | 当无法直接获得时,密度和逃逸速度是根据**可观测属性**(质量、半径)估算的 —— 使得即使对于数据不完整的行星也能计算 ESI。 ### 无监督分类 (KMeans + DBSCAN) ``` Raw Features → StandardScaler → KMeans(k=6) → Cluster Labels ↓ DBSCAN(eps=1.5) → Anomaly Flags ``` - **KMeans (k=6)** 根据半径、质量、温度、轨道周期和恒星属性将行星分组为自然类别 - **DBSCAN** 识别不适合任何聚类的离群行星 —— 这些被标记为潜在有趣的异常,值得调查 - 在聚类之前,特征使用 `StandardScaler` 进行标准化,以防止尺度主导 ### 小行星风险评分 每个近地天体都会获得一个综合风险评分: ``` Risk = 0.35 × Proximity + 0.30 × Size + 0.20 × Velocity + 0.15 × Impact Probability ``` 各分量经过最小-最大归一化到 [0, 1]。风险等级:**严重** (≥0.75)、**高** (≥0.50)、**中等** (≥0.25)、**低** (<0.25)。 ### Isolation Forest 异常检测 ``` Trajectory Features → StandardScaler → IsolationForest(n=100, contamination=5%) ↓ Anomaly Score [-1, 1] ``` 检测具有异常轨迹特征(意外的距离-速度组合、异常的轨道参数)的小行星,这些可能需要更密切的观测。使用 100 个估计器和 5% 的预期污染率。 ### ARIMA 时间序列预测 ``` Daily Fire Counts → ARIMA(2,1,2) → 7-Day Forecast + 95% CI ↓ CUSUM Changepoint Detection → Trend Shift Alerts ``` - **ARIMA(2,1,2)** 模型基于每日火灾计数时间序列进行训练 - 生成带有置信区间的 7 天预测 - **CUSUM**(累积和控制图)检测火灾活动中的突然转变 —— 有助于在野火危机升级之前识别它们 ### 集成分类器 ``` Features → StandardScaler → VotingClassifier(soft) → Prediction ├── RandomForest(100 trees) ├── GradientBoosting(100 estimators) └── LogisticRegression ``` 软投票结合了来自三个不同模型的概率估计,提供了比任何单一算法更稳健的预测。 ## 数据源 所有数据来自官方 NASA 开放数据 API —— 对于批量下载方法**无需 API 密钥**: | 来源 | API | 数据 | |---|---|---| | [NASA 系外行星档案库](https://exoplanetarchive.ipac.caltech.edu/) | TAP 同步服务 | 5,000 多颗已确认系外行星,包含行星和恒星属性 | | [JPL CNEOS](https://cneos.jpl.nasa.gov/) | 接近 API | 0.05 AU 内的近地天体接近事件 | | [JPL Sentry](https://cneos.jpl.nasa.gov/sentry/) | 哨兵风险 API | 对潜在危险小行星的撞击概率评估 | | [NASA FIRMS](https://firms.modaps.eosdis.nasa.gov/) | 活跃火点数据 | 来自 MODIS 和 VIIRS 卫星的全球火点检测 | 数据下载一次并本地缓存。调度器可以每 6 小时自动刷新数据集。 ## 技术栈 | 层级 | 技术 | |---|---| | **前端** | Plotly Dash 4, Plotly.js, Dash Bootstrap Components | | **API** | FastAPI, Uvicorn, Pydantic | | **ML/AI** | scikit-learn (KMeans, DBSCAN, IsolationForest, RandomForest, GradientBoosting, VotingClassifier) | | **预测** | statsmodels (ARIMA), CUSUM 变点检测 | | **数据** | pandas, NumPy, httpx, SQLAlchemy, SQLite | | **CLI** | Typer, Rich (表格、进度条、面板) | | **配置** | Pydantic Settings, PyYAML, structlog | | **调度** | APScheduler (6 小时数据刷新, 24 小时报告生成) | | **可视化** | Plotly (散点图、3D、热图、雷达图), Folium (地理地图) | ## 入门指南 ### 前置条件 - Python 3.11 或更高版本 - pip 或 uv 包管理器 ### 安装 ``` # 克隆仓库 git clone https://github.com/aymenhmaidiwastaken/cosmicwatch.git cd cosmicwatch # 安装依赖 pip install -e ".[dev]" # 下载所有 NASA 数据集 cosmicwatch download all ``` ### 快速启动 ``` # 启动仪表板 cosmicwatch serve # 在浏览器中打开 # 仪表板: http://localhost:8050/dashboard/ # API: http://localhost:8000/docs ``` ## 使用方法 ### 仪表板 启动服务器后导航至 `http://localhost:8050/dashboard/`。首页显示所有四个模块 —— 点击任意卡片进行探索。 ### CLI 命令 ``` # 下载数据集 cosmicwatch download all # Download all datasets cosmicwatch download exoplanet # Download exoplanet data only cosmicwatch download neo # Download NEO data only cosmicwatch download wildfire # Download wildfire data only # 运行分析 cosmicwatch exoplanet classify # Run exoplanet classification pipeline cosmicwatch neo scan # Run NEO risk assessment cosmicwatch wildfire monitor # Run wildfire monitoring # 生成报告 cosmicwatch report cosmic-weather # Generate unified Space Report # 启动服务 cosmicwatch serve # Start API + Dashboard # 检查状态 cosmicwatch status # Show data availability and system status ``` ### Makefile ``` make install # Install package make dev # Install with dev dependencies make test # Run test suite make lint # Check code quality make format # Format code make download # Download all datasets make serve # Start services make clean # Remove all data and cache ``` ### REST API FastAPI 服务器为每个模块暴露端点: ``` GET /api/v1/exoplanet/summary # Exoplanet analysis summary GET /api/v1/neo/summary # NEO risk assessment GET /api/v1/wildfire/summary # Wildfire monitoring data GET /api/v1/correlation/report # Unified Space Report GET /api/v1/health # Health check ``` 完整的交互式文档位于 `http://localhost:8000/docs`。 ## 项目结构 ``` cosmicwatch/ ├── pyproject.toml # Package config & dependencies ├── Makefile # Development commands ├── config/ │ ├── default.yaml # App configuration │ └── regions.yaml # Geographic region definitions ├── data/ # Downloaded datasets (gitignored) │ ├── raw/ # Original NASA data files │ ├── processed/ # Cleaned & transformed data │ └── cache.sqlite # Query cache ├── src/nasa_sentinel/ │ ├── app.py # Application factory │ ├── core/ # Config, logging, registry, events │ ├── data/ # Downloader, cache, ETL pipeline base │ ├── modules/ │ │ ├── exoplanet/ # ESI computation, KMeans, DBSCAN │ │ ├── neo/ # Risk scoring, Isolation Forest │ │ └── wildfire/ # ARIMA forecast, CUSUM, geospatial │ ├── correlation/ # Cross-module analysis, threat matrix │ ├── ml/ # Ensemble classifier, feature store │ ├── api/ # FastAPI routers & middleware │ ├── dashboard/ # Plotly Dash layouts & callbacks │ ├── cli/ # Typer CLI commands │ ├── reports/ # Jinja2 report templates │ └── scheduler/ # APScheduler jobs & alerts ├── tests/ # pytest test suite └── screenshots/ # Dashboard screenshots ``` ## 贡献指南 欢迎贡献!请先开一个 issue 来讨论您想更改的内容。 1. Fork 仓库 2. 创建您的功能分支 (`git checkout -b feature/amazing-feature`) 3. 运行测试套件 (`make test`) 4. 提交您的更改 (`git commit -m '添加一项惊人的功能'`) 5. 推送到分支 (`git push origin feature/amazing-feature`) 6. 打开一个 Pull Request ## 许可证 本项目根据 MIT 许可证授权 —— 详情请参阅 [LICENSE](LICENSE) 文件。

@aymenhmaidiwastaken 构建

标签:AI驱动, Apex, AV绕过, Dash, FastAPI, NASA数据, Python, scikit-learn, 交互式仪表板, 人工智能, 卫星数据, 地球监测, 天文观测, 太空监控, 威胁报告, 异常检测, 无后门, 时间序列分析, 机器学习, 环境监测, 用户模式Hook绕过, 系外行星, 聚类分析, 行星科学, 近地小行星, 逆向工具, 野火监测, 预测分析