sparkyniner/Netryx-OpenSource-Next-Gen-Street-Level-Geolocation
GitHub: sparkyniner/Netryx-OpenSource-Next-Gen-Street-Level-Geolocation
基于深度学习视觉模型的开源街景级地理定位工具,可从任意街景照片中精确识别 GPS 坐标。
Stars: 430 | Forks: 54
NETRYX
开源街景级地理定位引擎
上传任意街景照片。获取精确的 GPS 坐标。
精度小于 50 米。无需地标。完全在您的硬件上运行。
演示 · 工作原理 · 入门指南 · 使用方法 · 常见问题
## Netryx 是什么?
Netryx 是一款本地优先的地理定位工具,能够识别任意街景照片的精确 GPS 坐标。与反向图像搜索(匹配已上传的网络图像)不同,Netryx 匹配的是**系统化爬取的街景全景图**——这意味着它适用于任何零网络足迹的随机街角。
核心流水线结合了三个最先进的计算机视觉模型:
- **CosPlace**:用于全局视觉地点识别(检索)
- **ALIKED/DISK**:用于局部特征提取(关键点)
- **LightGlue**:用于深度特征匹配(验证)
## 演示
| 用例 | 链接 |
|----------|------|
| 导弹袭击地理定位 —— 卡塔尔(2026 年 2 月) | [在 YouTube 上观看](https://www.youtube.com/watch?v=Y_eC5VPypPU) |
| 冲突监控 —— 巴黎抗议活动 | [在 YouTube 上观看](https://www.youtube.com/watch?v=DV8vsoa5sLU) |
| 基于随机照片的盲地理定位 —— 巴黎 | [在 YouTube 上观看](https://www.youtube.com/watch?v=N5Cx7j6qA7I) |
| 技术深入探讨:流水线如何工作 | [在 YouTube 上观看](https://www.youtube.com/watch?v=KMbeABzG6IQ) |
## 工作原理
Netryx 使用三阶段流水线,逐步将范围从数百万候选缩小到单一精确匹配。Netryx 仅仅是一个工具,它来源无关,可以处理来自任何提供商(如 Mapilliary、Kartaview 或其他任何提供商)的图像。
### 第 1 阶段 —— 全局检索 (CosPlace)
索引中的每张街景全景图都使用 [CosPlace](https://github.com/gmberton/cosplace) 预处理成了 512 维的“指纹”,CosPlace 是一个在数百万张地理标记图像上训练的视觉地点识别模型。
当您上传查询照片时:
1. 系统从您的图像中提取 CosPlace 描述符
2. 它还从水平翻转的版本中提取描述符(捕捉反向视角)
3. 使用余弦相似度将两个描述符与索引中的每个条目进行比较
4. 半径过滤器(半正矢距离)将候选范围缩小到您指定的搜索区域
5. 返回前 500–1000 个视觉上最相似的全景视图作为候选
无论索引大小如何,此阶段运行时间**不到 1 秒**——这是单次矩阵乘法。
### 第 2 阶段 —— 局部几何验证 (ALIKED/DISK + LightGlue)
CosPlace 寻找*看起来相似*的地方。第 2 阶段使用几何验证证明它们是*同一个地方*。
对于每个候选:
1. 从 Google Street View 下载原始全景图(8 个切片,拼接而成)
2. 在索引的航向角处提取矩形裁剪
3. 生成三个视场角(70°、90°、110°)的**多 FOV 裁剪**,以处理查询照片与索引视图之间的缩放不匹配
4. [ALIKED](https://github.com/naver/alike)(在 CUDA 上)或 [DISK](https://github.com/cvlab-epfl/disk)(在 MPS/CPU 上)提取局部关键点和描述符
5. [LightGlue](https://github.com/cvg/LightGlue) 在查询和候选关键点之间执行深度特征匹配
6. **RANSAC** 过滤匹配,仅保留几何上一致的对应关系(拒绝错误匹配)
7. 拥有最多经验证内点的候选即为最佳匹配
根据您的硬件情况,此阶段处理 300–500 个候选需要 **2–5 分钟**。
### 第 3 阶段 —— 优化
初始匹配虽然不错,但并不总是最优的。优化改进了它:
- **航向优化**:对于前 15 个候选,系统在 3 个 FOV 下以 15° 为步长测试 ±45° 的航向偏移。这可以捕捉索引航向与查询视角方向不完全匹配的情况。
- **空间共识**:将匹配聚合到 50 米的单元格中。如果多个候选聚集在一个区域,则该簇优于单个高内点的异常值——从而减少误报。
- **置信度评分**:系统评估最佳匹配的地理聚类以及唯一性比率(最佳匹配与位于不同位置的亚军相比好多少)。
### 极限模式 (Ultra Mode) (可选)
对于困难图像(夜间、模糊、低纹理),极限模式增加了:
- **LoFTR**:一种无检测器的密集匹配器,无需依赖关键点检测即可找到对应关系。适用于 ALIKED/DISK 难以处理的模糊和低对比度场景。
- **描述符跳跃**:如果初始匹配较弱(<50 个内点),系统从*匹配的全景图*(干净/高质量)中提取 CosPlace 描述符并重新搜索索引。这通常能找到退化查询错过的确切正确全景图。
- **邻域扩展**:搜索最佳匹配 100 米范围内的所有全景图。正确位置通常距离 CosPlace 最佳匹配仅一个街道节点。
## 架构
```
Query Image
│
├── CosPlace descriptor extraction (512-dim fingerprint)
├── Flipped descriptor extraction
│
▼
Index Search (cosine similarity, radius-filtered)
│
├── Top 500 candidates ranked by visual similarity
│
▼
Download Panoramas → Crop at 3 FOVs → Extract ALIKED/DISK keypoints
│
├── LightGlue matching against query keypoints
├── RANSAC geometric verification
│
▼
Heading Refinement (±45°, 3 FOVs, top 15 candidates)
│
├── Spatial consensus clustering
├── Confidence scoring
│
▼
📍 GPS Coordinates + Confidence Score
```
## 入门指南
### 系统要求
| 组件 | 最低配置 | 推荐配置 |
|-----------|---------|-------------|
| 操作系统 | macOS / Linux / Windows | macOS (M1+) 或配备 NVIDIA GPU 的 Linux |
| GPU 显存 | 4GB | 8GB+ |
| 内存 | 8GB | 16GB+ |
| 存储空间 | 10GB | 50GB+(取决于索引区域大小) |
| 网络 | 索引和搜索需要 | 推荐宽带 |
| Python | 3.9+ | 3.10+ |
**GPU 支持:**
- **Mac**: MPS (Metal Performance Shaders) — M1/M2/M3/M4
- **NVIDIA**: CUDA — 任何拥有 4GB+ 显存的 GPU
- **CPU**: 可用但速度明显较慢
### 安装
```
# Clone the repository
git clone https://github.com/sparkyniner/Netryx-OpenSource-Next-Gen-Street-Level-Geolocation.git
cd .\Netryx-OpenSource-Next-Gen-Street-Level-Geolocation\
# Create virtual environment
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Install LightGlue explicitly (matching required)
pip install git+https://github.com/cvg/LightGlue.git
# Optional: Install kornia for Ultra Mode (LoFTR)
pip install kornia
```
### Gemini API Key (可选 — 用于 AI 粗略模式) [不推荐使用,手动即可完成任务]
如果您想使用 AI 辅助的盲地理定位功能:
1. 从 [Google AI Studio](https://aistudio.google.com) 获取免费的 API Key
2. 将其设置为环境变量:
```
export GEMINI_API_KEY="your_key_here"
```
## 使用方法
### 启动 GUI
```
python test_super.py
```
macOS 用户:如果 GUI 显示为空白,请升级 tkinter:brew install python-tk@3.11(或您的 Python 版本)。系统 Python 自带的 tkinter 在最近的 macOS 版本上存在已知的渲染问题。
### 第 1 步:创建索引
在搜索之前,您需要索引一个区域。这会爬取 Street View 全景图并提取 CosPlace 指纹。
1. 选择 **Create** 模式
2. 输入您想要索引区域的中心坐标(纬度,经度)
3. 设置搜索半径(测试从 0.5–1km 开始,生产环境从 5–10km 开始)
4. 设置网格分辨率(300 是一个不错的默认值 —— 越高 = 覆盖越密,请勿随意更改)
5. 点击 **Create Index**
**索引时间估算:**
| 半径 | 大约全景图数量 | 时间 (M2 Max) | 索引大小 |
|--------|-------------------|---------------|------------|
| 0.5 km | ~500 | 30 分钟 | ~60 MB |
| 1 km | ~2,000 | 1–2 小时 | ~250 MB |
| 5 km | ~30,000 | 8–12 小时 | ~3 GB |
| 10 km | ~100,000 | 24–48 小时 | ~7 GB |
索引是增量保存的——如果过程中断,下次运行时会从中断处继续。
### 第 2 步:搜索
1. 选择 **Search** 模式
2. 上传一张街景照片
3. 选择搜索方式:
- **Manual**:如果您大致知道照片的来源地,请输入坐标 + 半径
- **AI Coarse**:让 Gemini 分析视觉线索(标志、建筑、植被)来猜测区域 —— 无需先验知识
4. 点击 **Run Search**,然后点击 **Start Full Search**
5. 观察实时扫描可视化,系统会评估候选
6. 结果及置信度分数将显示在地图上
### 极限模式
对于困难图像,启用 **Ultra Mode** 复选框。这增加了 LoFTR 密集匹配、描述符跳跃和邻域扩展。速度明显较慢,但能捕捉标准流水线错过的匹配。
## 索引如何工作
所有 Embedding 都存储在单个统一索引中。当您搜索时,半径过滤器会自动将结果限制在您指定的区域内。这意味着:
- 您可以先索引巴黎,然后是特拉维夫,再到伦敦 —— 全部放入同一个索引
- 使用 center=Paris, radius=5km 搜索仅返回巴黎的结果
- 使用 center=London, radius=10km 搜索仅返回伦敦的结果
- 无需选择城市 —— 坐标 + 半径搞定一切
**数据流:**
```
Create Mode:
Grid points → Google Street View API → Panoramas → Crops → CosPlace → cosplace_parts/*.npz
Auto-build:
cosplace_parts/*.npz → cosplace_descriptors.npy + metadata.npz (searchable index)
Search Mode:
Query image → CosPlace → Index search (radius-filtered) → Download candidates → ALIKED/DISK + LightGlue → Result
```
## 项目结构
```
netryx/
├── test_super.py # Main application (GUI + indexing + search)
├── cosplace_utils.py # CosPlace model loading and descriptor extraction
├── build_index.py # Standalone high-performance index builder (for large datasets)
├── requirements.txt # Python dependencies
├── cosplace_parts/ # Raw embedding chunks (created during indexing)
├── index/ # Compiled searchable index
│ ├── cosplace_descriptors.npy # All 512-dim descriptors
│ └── metadata.npz # Coordinates, headings, panoid IDs
└── README.md
```
## 技术细节
### 使用的模型
| 模型 | 用途 | 论文 |
|-------|---------|-------|
| [CosPlace](https://github.com/gmberton/cosplace) | 视觉地点识别(全局描述符) | [CVPR 2022](https://arxiv.org/abs/2204.02287) |
| [ALIKED](https://github.com/naver/alike) | 局部特征提取(在 CUDA 上使用) | [IEEE TIP 2023](https://arxiv.org/abs/2304.03608) |
| [DISK](https://github.com/cvlab-epfl/disk) | 局部特征提取(在 MPS/CPU 上使用) | [NeurIPS 2020](https://arxiv.org/abs/2006.13566) |
| [LightGlue](https://github.com/cvg/LightGlue) | 深度特征匹配 | [ICCV 2023](https://arxiv.org/abs/2306.13643) |
| [LoFTR](https://github.com/zju3dv/LoFTR) | 无检测器密集匹配 (极限模式) | [CVPR 2021](https://arxiv.org/abs/2104.00680) |
### 平台特定行为
| 特性 | CUDA (NVIDIA) | MPS (Mac) | CPU |
|---------|--------------|-----------|-----|
| 特征提取器 | ALIKED (1024 kp) | DISK (768 kp) | DISK (768 kp) |
| LightGlue flash attention | 启用 | 禁用 | 禁用 |
| LoFTR (极限模式) | 全速 | 部分操作 CPU 回退 | 全 CPU |
| 索引速度 | 最快 | 良好 | 慢 |
## 常见问题
**搜索半径越大,准确度会下降吗?**
不会。CosPlace 在整个索引中按视觉相似度排名。无论您的索引覆盖 1km 还是 50km,最佳候选始终是视觉上最相似的。半径过滤器只是在排名前排除地理上无关的条目。
**搜索需要多长时间?**
在 Apple Silicon 上通常需要 2–5 分钟,在 NVIDIA GPU 上需要 1–3 分钟。瓶颈是从 Google 下载全景图切片(受网络限制),而不是匹配本身。
**我可以索引整个国家吗?**
不切实际。10km 半径会产生约 100K 张全景图和约 7GB 的索引。整个国家将需要 PB 级存储。索引特定的城市或感兴趣区域(5–20km)。
**我的搜索找到了 0 个候选。**
您的搜索坐标与任何索引区域不重叠。请先索引该区域,或者调整您的搜索中心/半径以与现有索引数据重叠。使用“Show Coverage Map”可视化已索引的内容。
**匹配略有偏差(偏差一个街区)。**
启用极限模式。邻域扩展搜索初始匹配 100 米范围内的所有全景图,通常能找到确切正确的街道节点。
**这对室内照片有效吗?**
无效。Netryx 仅匹配户外街景全景图。室内照片、航拍/卫星图像和特写物体照片不会产生有意义的结果。
**这需要花钱吗?**
Netryx 是免费且开源的。可选的 AI Coarse 功能需要 Gemini API Key(Google 提供免费层)。计算成本仅为您自己的硬件——无需云服务。
**有托管版本吗?**
有的。[netryx.live](https://netryx.live) 在云端运行完整流水线,因此您无需在本地进行任何设置。如果您想快速获得结果而不想构建自己的索引,这很有用。
## 不想搭建完整流水线?
[**netryx.live**](https://netryx.live) 在云端运行相同的引擎——上传照片,获取坐标。无需安装,无需索引,无需 GPU。
## 作者
**Saj Balaji** —— AI 研究员,PrismX 创造者。获得 Microsoft for Startups 和 ElevenLabs 的资助。被 Fast Company 和 Deutsche Welle 报道。
- [LinkedIn](https://www.linkedin.com/in/sairaj-balaji-7295b2246/)
## 许可证
MIT License。详见 [LICENSE](LICENSE)。
## 法律免责声明
Netryx 专为合法的 OSINT 研究、调查性新闻、人权监控、灾害响应和学术研究而设计。
**用户责任**:您需全权负责确保遵守适用法律,包括 Google Maps/Street View 服务条款和当地隐私法规。
**请勿用于**:跟踪、骚扰、未经授权的监视或任何侵犯个人隐私或安全的活动。
Netryx 的开发者对滥用行为不承担任何责任。
标签:ALIKED, CosPlace, DISK, ESC4, HTTP/HTTPS抓包, LightGlue, LSASS转储, OSINT, Python, Vectored Exception Handling, 二进制发布, 凭据扫描, 图像检索, 图像识别, 地理定位, 坐标定位, 定位引擎, 开源工具, 态势感知, 无后门, 无需API, 智能监控, 本地部署, 深度学习, 特征提取, 神经网络, 离线运行, 街景爬虫, 街景识别, 计算机视觉, 逆向工具, 隐私计算