aymenhmaidiwastaken/cosmicwatch
GitHub: aymenhmaidiwastaken/cosmicwatch
CosmicWatch 是一个AI驱动的太空与地球监测平台,利用NASA数据和机器学习分析威胁如小行星撞击和野火,帮助科研和环保部门进行决策。
Stars: 12 | Forks: 0
CosmicWatch
实时地球与太空监测平台
一个由 AI 驱动的智能仪表板,结合了 NASA 卫星数据、机器学习和交互式可视化。
CosmicWatch 是一个全栈数据智能平台,它摄取、处理并可视化来自多个 NASA 来源的实时数据。它利用**机器学习流水线**对系外行星进行分类、评估小行星风险、检测轨迹异常、预测野火活动,并通过交互式暗色主题仪表板生成统一威胁报告。
## 目录
- [功能](#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)、日期范围、昼夜和强度筛选
### 空间报告
一个统一的威胁评估,同时运行所有三个模块,关联跨领域的发现,并生成一份包含威胁评分、跨模块关联和优先级警报的情报简报。
- 一键生成涵盖所有模块的报告
- 带有彩色条形图的分模块威胁评分
- 跨模块时间关联分析
- 带有严重性徽标的优先警报源
- 统一的威胁等级分类 (低 → 严重)
## 屏幕截图
### 行星探索器 — 系外行星宜居性分析
### 小行星追踪器 — 近地天体风险雷达
### 野火追踪器 — 全球火灾监测
### 空间报告 — 统一威胁评估
### 加载体验与深色/浅色主题
## 架构
```
┌──────────────────────────────────────────────────────────┐
│ 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绕过, 系外行星, 聚类分析, 行星科学, 近地小行星, 逆向工具, 野火监测, 预测分析