【免费下载链接】geo-sleuthAn agent skill that finds where a photo was taken — OpenStreetMap geometry, elevation skylines, satellite imagery and street view — and shows its work. Works with Claude Code, Codex, Cursor, Gemini CLI, OpenCode and GitHub Copilot.项目地址https://gitcode.com/gh_mirrors/ge/geo-sleuth点击查看免费下载照片定位验证网络迷踪 / GeoGuessing最难的一步在最后候选地点缩小到几条街道后还要用街景证明就是这里。开源项目geo-sleuth把这个街景验证自动化了match.py 先用 DINOv2 全局相似度对成百上千个街景候选做宽召回再用 SIFT 特征点 RANSAC 内点数做几何精验证人只需要打开前 10 张图比对。本文讲清楚这套双阶段匹配的原理与实战用法。为什么街景是照片定位的最后一关 ️geo-sleuth 是一个定位照片的 Agent Skill给智能体一句find where this photo was taken它会读 EXIF、做 OCR 和以图搜图再用 OpenStreetMap 几何、高程天际线、卫星影像逐步搜索最后给出机位坐标 误差半径 证据图完整流程见 SKILL.md。但缩小不等于验证。两个常见的卡点以图搜图找到的是相似图不是拍摄地。比如稻田这张照片百度以图搜图能搜到一整屏相似的水泥烤炉但没有一个是拍摄地全景点太多。一条街道可能有几十到几百个全景点逐个渲染翻看根本不现实。所以 geo-sleuth 对街景环节的原则只有一句机器先排序人只看前几名——粗排交给 DINOv2SIFT 双阶段管线人只负责对 Top 10 做最后的目视比对。DINOv2 SIFT 双阶段匹配原理 为什么要两个阶段因为两类特征回答的是两个不同的问题全局特征DINOv2这两张图像不像同一个场景——对光照、视角、局部遮挡都鲁棒一张图一个向量比对极快但它不看精确几何季节、街道风格相似的相似场景容易拿高分。局部特征SIFT这两张图是不是几何上同一个地方——服从同一平面投影变换的角点才算内点内点数就是同地同视角的几何证据但它慢只适合验证少数候选。于是管线设计成宽召回 → 严验证。阶段一DINOv2 全局相似度做宽召回源码见 match.py#L89-L137模型为 Meta 的facebook/dinov2-small首次使用自动下载并缓存图像统一缩放为 224×224取 CLS token 与 patch 均值拼接成全局向量并归一化多视角技巧查询图会被编码成 4 个视角全图 / 中心裁剪 / 左半幅 / 右半幅每个候选取这 4 个视角中的最高相似度。原因很实际街景车在马路中间拍原照片往往在人行道上拍两边对不齐但重叠的那一半大概率对得上所有候选一次批算余弦相似度几秒内得到初始排序。阶段二SIFT RANSAC 内点数做几何精验证源码见 match.py#L140-L163。对全局分最高的前 30 张默认--refine-top 30逐张执行灰度化、缩放后SIFT 提取至多 3000 个角点特征ratio test阈值 0.75过滤误匹配RANSAC 拟合单应矩阵重投影误差阈值 6 px数内点数inliers——只有严格服从同一视角变换的点才算内点最终排序有内点的按内点数排前其余按全局分排后。默认--min-inliers 15内点数 ≥15 的图会被置顶提示先打开这些比对。阶段一DINOv2阶段二SIFT RANSAC回答的问题像不像同一场景是不是真的同一地点特征类型全局语义向量局部角点特征覆盖范围全部候选前 30 名优点对视角、光照鲁棒快几何严格不怕相似街道弱点季节、相似场景会打高分慢纹理少时特征点不足一句话总结DINOv2 负责召回SIFT 负责精确。一条命令完成街景验证三步实操 第 1 步采集全景点。国内用百度全景 baidu_pano.py国外用免密钥的 Google 街景 gsv.py。scan在候选地点半径内扫出所有全景点uv run skills/geo-sleuth/scripts/baidu_pano.py scan lat,lon --radius 300 --out panos.json第 2 步双阶段匹配输出 Top 10 对比图。--toward把每个全景的渲染朝向对准已知地标增加与原照片同视角相遇的概率--spread 15表示每 15 米只保留一个全景点避免算一堆几乎重复的视角uv run skills/geo-sleuth/scripts/match.py rank --query photo.jpg --panos panos.json \ --toward 地标lat,lon --spread 15 --refine sift --top 10 \ --out m.json --sheet m.jpg生成的m.jpg就是最终对比图每张街景标注名次、内点数和全局分打开即看。第 3 步人只做最后目视比对。只比不变特征清单见 verify.md#L20-L31要比 ✅不要比 ❌建筑轮廓、窗户位置、阳台形状停着的车、行人电线杆、路灯位置、路缘石、台阶招牌、遮阳棚、广告山脊线、河岸线树叶多少、花有没有开达到路级结论需 ≥2 个独有特征吻合楼级需 ≥3 个再加两个独立的机位约束。4 个避坑点内点数低 ≠ 不是这里 ⚠️全局分被季节主导樱花季的街景无论在哪里都会打高分。尽量找与原照片同季节的历史采集来比gsv.py sheet --date year。内点数低很正常原片在人行道拍、街景在路中拍或季节差异大时正确答案可能只有 5 个甚至 0–8 个内点。官方 8 例基准测试里正确答案的名次是 1/2/4/1/1 和 5/1/6——全部在前 6 名内一半排第一。旧街景比旧楼采集比照片早很多年时新建筑还不存在以老建筑和永久性结构为准verify.md#L86-L91。机器排序、人类判断排序只是顺序不是结论。Top 10 都不像时先换朝向--spread-headings -30,0,30或扩大范围别只看分数下结论。实战案例温哥华樱花街定位到 3 米 一张温哥华人行道上的樱花照片。车牌和路灯样式锁定温哥华但全市约有 1 万条街块。城市开放数据里 1,095 棵大樱花 → 97 个候选街块 → 车影方向 道路横坡筛到 72 块 → 再逐棵树核对W 60th Ave 100 号段北侧排满大樱花南侧远处只有 7.6 cm 的幼苗——与原照片近处右侧没有高树、远处一片粉色树冠完全一致。最后一步正是典型的街景验证场景原照片在人行道上拍街景车在马路中间视角错位——恰是 DINOv2 多视角 SIFT 要处理的情况。同一街块的 2024 年和 2009 年两次采集里都出现了石砌挡土墙、墨绿色路灯和白房子而照片里那栋带屋顶露台deck 的房子同时出现在 2024 年采集与原照片中。最终结论机位在北侧人行道、朝向东误差 3 米。卫星证据图标出了机位、视场角和来自城市数据的每一棵行道树值得翻的源码与文档 文件作用skills/geo-sleuth/scripts/match.pyDINOv2/CLIP 全局粗排 SIFT 内点精排skills/geo-sleuth/scripts/baidu_pano.py百度全景扫描、渲染、缩略图页skills/geo-sleuth/scripts/gsv.pyGoogle 街景免密钥、历史采集skills/geo-sleuth/references/verify.md验证规则比对什么、方位自检、历史影像skills/geo-sleuth/references/data-sources.md每个脚本的数据来源清单 小贴士match.py首次运行要下载模型权重比平时多等几分钟遇到超时先跑doctor.py --network检查服务连通性。赞分享【免费下载链接】geo-sleuthAn agent skill that finds where a photo was taken — OpenStreetMap geometry, elevation skylines, satellite imagery and street view — and shows its work. Works with Claude Code, Codex, Cursor, Gemini CLI, OpenCode and GitHub Copilot.项目地址https://gitcode.com/gh_mirrors/ge/geo-sleuth点击查看免费下载相关推荐反向图片搜索OCR全解如何用geo-sleuth百度Yandex双引擎定位照片反向图片搜索OCR全解如何用geo sleuth百度Yandex双引擎定位照片 geo sleuth 是一个照片定位photo geolocation智PingFangSC跨平台字体解决方案高性能Web字体架构设计与实践PingFangSC跨平台字体解决方案高性能Web字体架构设计与实践 在当今多设备、多平台的数字生态中字体一致性已成为现代Web开发的核心挑战。PingFa前端yuzu模拟器中文支持终极指南快速解决字体乱码问题yuzu模拟器中文支持终极指南快速解决字体乱码问题 还在为yuzu模拟器中文字体显示为方块或乱码而烦恼吗作为Nintendo Switch最优秀的开源模拟器游戏开发创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考