agambear25/situational-picture

GitHub: agambear25/situational-picture

一款本地优先、零成本的开源OSINT工具,将冲突数据库、火灾卫星和Sentinel影像等多源公开数据融合为带独立来源置信度评级的统一冲突地图。

Stars: 0 | Forks: 0

# 态势图 ### ▶ [**打开实时演示 →**](https://agambear25.github.io/situational-picture/) *一个真实的、可点击的仪表盘快照——完全在您的浏览器中运行,无需安装。* **一款开源情报 (OSINT) 工具,它将零散的公开报告转化为一幅** **值得信赖的冲突地图——专为完全在笔记本电脑上免费运行而构建。** 它读取免费的公开数据——冲突事件数据库、NASA 火/热卫星以及 Sentinel-1/2 影像——计算出哪些报告描述的是*同一个*真实世界的事件,将它们合并 为一个统一的事件地图,并根据有多少**独立**来源实际观测到该事件来对每个事件进行评级。 想象一个内置事实核查机制的新闻社电讯台:输入大量重叠且嘈杂的报告,输出一幅 去重且带有置信度评级的全貌图。 它是**决策支持,而非目标指引**——这条界限在设计中被强制执行,而不仅仅是口头承诺 (参见[设计上的负责任](#responsible-by-design))。 ## 它的功能 - **连续的战争时间线。** 涵盖从 2022 年 2 月到 2026 年每个月的约 5,500 起事件,数据源自约 22,000 条真实冲突记录以及火灾和卫星数据。拖动滑块, 观察战线的推移。 - **“重要事件”优先。** 面板根据事件的*严重程度*、 *确认度*、*时效性*和*异常程度*对其进行排序,而不是展示一个扁平的列表——这样少数经过确认的、高风险的事件 就会从成千上万的例行报告中脱颖而出。 - **值得信赖的置信度。** 只有当**独立**类型的来源 达成一致时——例如在同一地点*同时*出现新闻报道*、*卫星探测*和*热特征*,一个事件才会被标记为“已确认”。 十条同一篇通讯稿的副本毫无意义;一个真正独立的第二来源则意义重大。 - **按区域深入挖掘。** 地区 → 区域 → 社区,每个层级都根据当地发生的事件量进行着色, 你可以一直深入到具体的事件。 - **标记您关注的区域。** 在 地图上绘制一个框或描绘一个特征(如河流线、公路走廊),为其命名,该工具会立即提取该区域内发生的所有事件。 - **四种类型的传感器。** 文本(冲突数据库)、热成像(NASA 火灾卫星)、雷达 (Sentinel-1,全天候穿透云层并在夜间工作)和光学(Sentinel-2,用于探测洪水和 火烧痕迹)——达成一致的独立传感器类型越多,置信度就越高。 - **对不确定性保持坦诚。** 每个地图上的点都会显示其置信度;没有任何信息会被悄悄 丢弃;每个事件背后的来源只需点击一下即可查看。 ## 截图 操作面板有四个主要视图——**重要事件**(排名信息流)、**按区域**(区域 深度下钻)、**关注区域**(您标记的兴趣区域)和**事件**(可搜索的 时间线)——叠加在带有控制范围覆盖层的卫星底图之上。 **▶ [在浏览器中实时体验 →](https://agambear25.github.io/situational-picture/)** —— 该 演示是真实面板数据的静态快照,因此地图、排名和区域深度下钻 均可直接使用,无需安装任何内容。 ## 它解决的有趣问题 与其说它是一个数据流水线,不如说它是一个小型情报引擎。难点在于: **1. 判定什么是同一个事件。** 同一次炮击可能以新闻报道、 数据库条目和卫星变化的形式出现——且坐标和时间略有不同。引擎 按地点、时间和类型对候选报告进行分组,然后在合并前对每一对报告的*相似度*进行评分。它刻意先进行过度分组,然后再将其拆分,因为**遗漏一个事件** **比重复更糟糕。** **2. 客观评定置信度。** 置信度的计算方式确保了**独立**来源可以增强可信度, 但同一来源的**回声**不会。在同一地点对建筑损坏的卫星探测 加上关于袭击的新闻报道,会提升该事件的置信度;而对该新闻报道的转推则不会。 **3. 在引入 AI 的情况下保持可复现性。** 一个小型的**本地**语言模型(无需云服务、无需 API 密钥、成本 $0)用于在真正模棱两可的情况下打破僵局。其判定结果被缓存并标记版本, 因此整个地图可以**随时从原始记录中完全一致地重建**——AI 永远 不会成为无法审计的黑盒。 **4. 在本地读取卫星影像。** 雷达和光学变化检测器在笔记本电脑上运行 (云端仅作为免费的数据接口)。雷达损坏检测器已根据联合国对马里乌波尔的卫星 损坏评估进行了验证;光学燃烧检测器已根据 2022 年 Sviati Hory 森林火灾进行了验证——33 次燃烧探测,零次洪水误报。 **5. 隐私和伦理内置于数据模型中** —— 见下文。 ## 设计上的负责任 - **在任何数据存储之前,位置都会被舍入到约 1km 的网格单元中。** 精确坐标 在入口处即被丢弃。该工具只能说明“阿夫迪夫卡附近发生了一次袭击”,绝不会提供可定位的具体坐标。 - **不包含人员信息。** 数据模型在结构上无法将人员存储为实体——这是一项数据库 约束,而非指导原则。 - **决策支持,而非目标指引**在数据离开系统的边界处被强制执行。 - **许可证合规。** 它从不摄入专有的前线地图数据;“谁控制了什么”的 覆盖层是根据公开知识手工编写的,并明确标注为近似值。 ## 构建方式 | 层级 | 技术 | |---|---| | 数据存储 | PostgreSQL + PostGIS (地理空间) | | 后端 | Python, FastAPI (只读 API) | | 影像 | Google Earth Engine (免费层) 作为数据接口;检测使用 NumPy/SciPy 在本地运行 | | 僵局打破 AI | 通过 Ollama 运行的本地 LLM (Qwen 2.5),$0 / 离线 | | 地图 UI | 原生 JavaScript + Leaflet (无构建步骤) | | 地理信息 | OpenStreetMap + geoBoundaries (行政区域),MGRS 1km 网格 | 该引擎是**确定性和可重放的**:相同的原始记录始终能重建相同的地图, 这通过一项自动化测试进行了验证,该测试会重新运行整个流水线并检查结果是否 逐位一致。约 130 项测试把关每一次更改。 ## 数据来源(均免费、均公开) UCDP(冲突事件,CC-BY) · NASA FIRMS(火灾/热成像) · Copernicus Sentinel-1 和 Sentinel-2 (卫星影像) · UNOSAT(损坏评估,用作真实真值) · OpenStreetMap + geoBoundaries(地理信息)。 ## 运行说明 需要 PostgreSQL 17 + PostGIS、Python 3.11+,以及(可选)用于打破僵局的 AI 的 Ollama。 ``` # Database createdb osint_cop && psql osint_cop -c "CREATE EXTENSION postgis; CREATE EXTENSION vector;" psql osint_cop -f db/migrations/0001_extensions.sql # ... through the latest migration psql osint_cop -f db/roles.sql # Python python -m venv .venv && .venv/bin/pip install -e ".[full]" # 构建 1km grid + 加载 geography/admin substrate .venv/bin/python -m grid.cli build --theater ua_donbas bash scripts/fetch_admin.sh # region/district/community boundaries bash scripts/fetch_ucdp_donbas.sh # the 2022–2026 conflict chronology # 将 raw records 转换为 map,然后对重要内容进行评分 .venv/bin/python -m fusion.run --theater ua_donbas .venv/bin/python -m assess.run --theater ua_donbas # 在 http://127.0.0.1:8000/ui/ 提供 board 服务 .venv/bin/uvicorn api.main:app --port 8000 ``` 使用 `pytest -q` 和 `python -m eval.harness` 运行测试套件和确定性检查。 ## 诚实的局限性 - **单一精选战区。** 该流水线与区域无关,但目前仅完整加载了顿巴斯地区的数据。 - **多时间跨度,而非实时。** 冲突数据库有数周的延迟;卫星影像受限于过境频率 和云层遮挡;只有热数据是近实时的。面板如实反映了这种混合状态。 - **目前使用经典检测器。** 卫星检测器是确定性的基线;虽然设计上预留了深度 学习变化模型,但目前并未作为默认选项。 - **控制层覆盖图仅供示意** —— 为城市级别和近似值,根据公开 知识编写,明确*不是*实时前线。 ## 项目布局 ``` ingest/ read public feeds + run the imagery detectors → an append-only record log fusion/ group, score, and merge records into confidence-rated events (the engine) assess/ rank what matters + flag anomalies, exposure, and collection gaps api/ + web/ read-only API and the operator map UI geo/ grid/ the 1km grid, admin regions, and geography substrate eval/ the determinism gate + the satellite-detector validators docs/superpowers/specs/ design write-ups and the build checkpoint ``` *作为一个作品集项目构建,旨在探索一款严谨、诚实、成本 $0/本地化的情报工具仅依靠* *公开数据能走多远。不附属于任何政府或供应商。*
标签:AI风险缓解, ESC4, HTTP/HTTPS抓包, OSINT, 地理信息系统, 态势感知, 情报分析, 数据可视化, 测试用例, 网络诊断, 逆向工具