Three.js教程
Cesium
netryx-astra-v2-ai-geolocation
netryx-astra-v2-ai-geolocation

给一张街景照片,AI 直接推算出拍摄地的 GPS 坐标

在 OSINT(开源情报)调查领域,从一张照片推断拍摄地点是个常见需求,但传统方式依赖人工:看建筑风格、辨路牌字体、查地图卫星图,费时费力,对经验要求也高。

Netryx Astra V2 是一个开源的 AI 地理定位工具,试图用计算机视觉的方式来完成这件事。输入一张图片,它会在你预先建立的街景索引里搜索匹配位置,输出候选 GPS 坐标。项目基于 MIT 协议开源,作者是 Sairaj Balaji。

需要说明的是,它的能力有明确边界:只能在你已经索引过的地理区域内查找,无法凭空推断全球任意位置。

核心技术:为什么需要三步流水线

要理解这套系统的设计,先得理解一个基本矛盾:检索要快,验证要准,两者目标相反

如果只用一个模型又快又准地定位,目前不存在这样的技术。快速检索模型擅长"大范围扫描找相似",但容易误判外观相似但位置不同的图片;精确验证模型能判断两张图片是否真的拍自同一地点,但计算代价高,不适合直接对几十万张全景图逐一比较。

Netryx Astra V2 的解法是把这两类能力串联起来:先快速缩小范围,再精确验证,最后用空间一致性做兜底。

第一步:MegaLoc — 从图像到地理坐标的粗筛

MegaLoc 是 CVPR 2025(计算机视觉顶会)发表的图像地理定位模型,负责系统中"大范围快速检索"这一环。

它在做什么

给定一张查询图片,MegaLoc 会将其转化为一个高维向量,再从预先建好的索引库中找出最相似的几百张街景全景图,作为候选位置返回。这个过程本质上是"图像版的以图搜图",只不过搜索目标是带有 GPS 坐标的街景数据库,而非互联网图片。

8448 维特征向量是什么意思

人类识别一个地方,靠的是建筑轮廓、材质、颜色、光影等多维度线索的综合判断。MegaLoc 用神经网络将这些视觉信息编码成一个 8448 维的数字向量——维度越高,能捕捉到的视觉细节越多,不同地点之间的区分度也越高。

但 8448 维向量的存储和搜索成本很高。对大规模索引库(几十万张街景图)做相似性搜索,内存和速度都会成问题。所以系统用 PCA(主成分分析)把维度压缩到 1024,保留最核心的区分信息,同时让搜索速度提升数倍。

粗筛的代价:误召回

MegaLoc 的设计优先保障"召回率"——宁可多捞几个可疑候选,也不要漏掉真正的匹配位置。这意味着返回的 500 个候选里,大概率包含一些外观相似但实际位置不同的"误召回"结果,需要下一步来过滤。

第二步:MASt3R — 像素级的空间几何验证

MASt3R(全称 Matching And Stereo 3D Reconstruction)来自 ECCV 2024(欧洲计算机视觉顶会),它解决的是另一个问题:两张看起来很像的图片,拍的真的是同一个地方吗?

全局特征 vs. 密集匹配

MegaLoc 用的是"全局特征"——一张图片被压缩成一个向量,比较的是整体印象。这类方法速度快,但有一个弱点:如果两个不同地方的建筑外观相似(比如同款连锁门店的不同分店),全局特征会混淆它们。

MASt3R 采用"密集匹配"策略:在查询图片和候选全景图之间,建立逐像素的对应关系。简单说,它会尝试回答"查询图里的这堵墙、这扇窗、这根电线杆,在候选图的哪个具体位置能找到对应点"。

能建立稳定像素对应关系的两张图,大概率真的拍自同一地点;无法建立的,即使全局外观相似也会被排除。

"3D 感知"的含义

MASt3R 的特殊之处在于它理解场景的三维结构,而不只是二维像素。它在匹配时会推断场景的几何关系:两张图的视角差多少、物体的相对空间位置是否一致。这让它对视角变化更鲁棒——即使查询图和街景全景图的拍摄角度不完全相同,只要拍的是同一个位置,它仍能建立有效的对应关系。

经过这一步,500 个粗筛候选会被过滤到少数真正可信的匹配,每个匹配都附带一个基于像素对应质量计算的置信度分数。

第三步:空间聚类 — 用地理一致性消除误判

经过 MASt3R 验证后,系统还会做最后一轮过滤,依据是一个简单的地理直觉:真实的匹配位置应该在地图上聚集在一起

同一个位置的多个街景全景图(不同时间拍摄、略有角度差异),匹配成功后的 GPS 坐标会在地图上紧密聚集。反之,偶发误匹配的结果往往是孤立的离散点,在地图上与其他结果相距甚远。

系统对所有验证通过的匹配结果做聚类分析,找出坐标密集的区域,将其作为最终候选输出,同时丢弃孤立点。这一步进一步降低了误报率,让最终坐标更可靠。

整体流程小结

输入图片

MegaLoc 检索(快速粗筛,召回 500 个候选)

MASt3R 密集匹配(逐像素验证,过滤误召回)

空间聚类(地理一致性兜底,排除孤立误判)

输出候选 GPS 坐标 + 置信度

三步的分工逻辑是:速度优先 → 精度优先 → 稳定性优先,每一步处理上一步的遗留问题。

这套组合的实际意义是:即使输入图片存在裁剪、局部遮挡,只要场景中有足够的结构性视觉信息,且索引库中有对应区域的街景数据,系统就有机会推算出正确位置——这是传统关键词搜索或纯人工比对难以做到的。

安装与使用

环境要求

  • Python 3.10 及以上
  • 内存 8GB 起步,建立大范围索引建议 16GB+
  • 每个城市索引约占 2GB 磁盘空间
  • 支持 macOS(Apple Silicon,使用 MPS 加速)、Linux 和 Windows(需要 NVIDIA GPU)

安装方式

Linux / macOS:

git clone https://github.com/sparkyniner/netryx-astra-v2.git
cd netryx-astra-v2
chmod +x setup.sh && ./setup.sh
source venv/bin/activate
python3 test_super.py

Windows 用户直接双击 setup.bat,完成后运行 run.bat 启动界面。

两种主要操作模式

模式作用适用场景
Create(建立索引)指定中心坐标和半径(公里),下载并索引该区域的街景全景数据你知道大概要在哪个区域做定位,提前建好索引
Search(查询定位)输入一张图片,在已有索引里搜索匹配位置日常使用,在 Create 完成后进行

使用示例

假设你有一张来源不明的街头照片,怀疑拍摄地在上海某区域:

  1. 先用 Create 模式,以上海某坐标为中心,设定 2km 搜索半径,建立该区域的街景索引(1km 半径约需 20-30 分钟)
  2. 索引完成后,切换到 Search 模式,上传目标图片
  3. 系统返回候选坐标列表,每个候选位置都有对应的置信度评分

社区索引(Netryx Hub)

如果你不想自己从头建索引,项目提供了一个 Hub 功能,可以浏览和下载其他用户分享的城市索引,格式为 .netryx(本质上是包含特征描述符和 PCA 模型的 ZIP 包)。索引也支持通过 Discord 或邮件离线分发。

现实中的局限性

在考虑使用这个工具之前,有几点值得提前了解:

覆盖范围受限于索引。系统只能在你已经索引的地理区域内找到答案。农村地区、发展中国家的城市、街景数据稀疏的区域,覆盖质量会明显下降。

建立索引耗时较长。1km 半径需要 20-30 分钟,10km 半径可能需要隔夜运行。如果目标区域跨度大,索引成本不容忽视。

重复性建筑容易混淆。外观高度相似的连锁门店、同款公寓楼这类场景,系统的误判率会上升,因为视觉特征区分度太低。

不是实时响应。每次查询(500 个候选位置)需要几分钟,不适合需要高频、快速响应的场景。

写在最后

Netryx Astra V2 是一个把学术界图像检索和 3D 匹配技术落地成可用工具的尝试。对于 OSINT 研究者、新闻核查人员,或者需要批量验证图片拍摄地点的场景,它提供了一条比人工比对效率更高的路径。

不过它并非万能——索引区域的限制、建立索引的计算成本,以及对重复建筑的误判,都是在实际使用前需要权衡的问题。如果你的需求是在已知大致范围内做精确定位,这个工具是可以上手试试的。

如果用于涉及真实人物位置的场景,请确认你有合法合规的使用权限。

GitHub 项目地址:https://github.com/sparkyniner/Netryx-Astra-V2-Geolocation-Tool (opens in a new tab)