geo-sleuth 照片定位工作流程

文件類型
使用手冊
更新日期
閱讀時間
8 分

整理 geo-sleuth 的安裝、環境診斷、照片前處理、候選證據板與地形比對,說明精度門檻、照片上傳、資料授權、部分失敗及官方案例的評估範圍。

來源
文件資訊
oldcircle/geo-sleuth
授權
MIT

以可追溯的線索與計算結果比較候選地點,交付有範圍、信心分級及證據的定位結論。

工作分層
3決策、感知與判斷
Python 需求
3.10+以 uv 執行各腳本
程式碼授權
MIT資料與影像另查條款

01輸入、產出與使用範圍

系統定位

geo-sleuth 是由 Agent 操作 Python 腳本的照片定位技能。它以候選地點與證據紀錄組織調查,適用於分析本人拍攝或已獲授權的照片。

輸入或產出內容
輸入原始照片與已知背景;提示仍需驗證
主要結論支持到哪一層級的拍攝位置與不確定範圍
幾何資料有證據支持時提供 WGS84 座標、誤差半徑及拍攝方位
支持材料證據圖、實際命令與產出檔案
未解部分替代候選、受阻路徑與尚缺的證據
定位工作的三個分層
  1. 決策

    • board.py
    • 候選、證據與排序
  2. 感知

    • 前處理與查表
    • 地圖與地形計算
    • 影像相似度排序
  3. 判斷

    • Agent 檢查高排名候選
    • 核對證據
    • 說明不確定性

腳本管理候選與計算,Agent 依實際產出判斷;排名不等於定位已確認。

這是一個技能資料夾,需由可讀取 SKILL.md 並執行 shell 的 Agent 使用。它不提供獨立的照片定位網站。

02技能位置與執行環境

安裝與診斷

  • 未完成:

    Python 3.10 或更新版本。

  • 未完成:

    已安裝 uv 與 curl。

  • 未完成:

    可執行 shell 並檢視圖片的 Agent。

  • 未完成:

    完整保留技能資料夾及其輔助模組。

  • 未完成:

    需要反向圖片搜尋時,已安裝 Chrome 或 Playwright Chromium。

透過 skills CLI 安裝時,由互動介面選擇使用的 Agent:

bash
npx skills add Oldcircle/geo-sleuth

這條安裝路徑需要可用的 Node.js/npm 工具鏈;Python 腳本本身依 uv 管理依賴。若要從原始碼查閱及執行,使用以下路徑:

bash
git clone https://github.com/Oldcircle/geo-sleuth
cd geo-sleuth
uv run skills/geo-sleuth/scripts/doctor.py --json

需要檢查服務連線時,再執行:

bash
uv run skills/geo-sleuth/scripts/doctor.py --network --json

doctor.py --network 不上傳照片,也不載入 OCR 或 ML 模型。首次透過 uv run 執行時,依賴安裝仍可能使用網路。

反向搜尋的瀏覽器未安裝時,可依官方方式安裝 Chromium:

bash
uvx playwright install chromium

03依證據選擇運算路徑

核心工具

以下卡片列出腳本或子命令名稱。從 clone 根目錄執行時,在名稱前加上 uv run skills/geo-sleuth/scripts/;已安裝的技能則使用實際路徑。

照片前處理

intake.py

建立前置資料

整理 metadata、裁切、OCR 與反向搜尋;--no-rev 可跳過照片上傳的反搜分支。

候選管理

board.py

紀錄與比較證據

管理候選、線索狀態與排序;check 的輸出仍需閱讀,不能只看退出碼。

地圖幾何

osm.py

建立地理候選

依 OSM 特徵及線性設施查詢;資料稀疏不代表真實地景不存在。

山稜線比對

terrain.py

地形掃描與視線限制

由高程計算地平線並比較山稜;單一吻合視線不足以確認相機位置。

衛星影像排序

sat_scan.py

縮小影像檢查範圍

以 CLIP 排序網格或候選點;Agent 仍需核對高排名縮圖。

地面影像排序

match.py

比較街景候選

使用 DINOv2 或 CLIP,並可用 SIFT 重排;相似分數不等於位置證明。

證據交付

evidence.py

組合地圖與比較圖

由既有影像及 JSON spec 繪製證據;不會代替前面的定位計算。

照片線索可選工具驗證限制
可讀文字或標示ocr.py、clues.py、poi.py放大後才出現的文字需回原圖核對
陰影或太陽sun.py驗證時間、鏡像與拍攝方向的假設
山稜與線性設施terrain.py、osm.py、geo.py需另一項獨立幾何限制確認位置
已知位置的影像控制點pose.py位置辨識與座標品質影響解算結果
區域或國別線索regions.py、gazetteer.py不要預設知名地點是唯一候選

04假設、降權與排除

候選板與證據規則

線索依狀態記錄,避免把推測寫成測量:

狀態含義用法
observed影像中的觀察記錄可見特徵,保留裁切或原圖
read讀到的文字或資料指向可核對的來源檔案
inferred由線索提出的假設提示與 metadata 衝突時,重新檢查影像
computed腳本的計算結果指向本次實際命令與輸出

observed 與 inferred 可改變候選權重,但不能直接作為排除依據。排除需要符合證據條件,且檔案存在不代表其內容已被正確解讀。

操作規則
加入候選列出合理的整組候選,不以人口或知名度挑一個答案
記錄反證先降權;未檢查的候選不能當成已排除
排除區域或道路證據範圍必須支持排除範圍;使用 --covers 記錄涵蓋位置
細化地點以 --parent 保持候選的包含關係
無法區分依 next 建議做共同的區分測試,再安排掃描
多個離散候選選支持最高的主候選並列出替代項,不取座標中點

候選板的 share 是目前紀錄候選間的相對分數,不能當成已校準的照片定位命中率。最終報告的信心分級與候選排序分開處理。

05涵蓋率、誤差與成本

操作原則

先檢查資料涵蓋率

OSM 或街景沒有資料時,改用有依據的其他來源;沒有查到不能作為地點不存在的證據。

保留原始解析度

README 展示圖不等於案例原始輸入。先保留原圖,再以裁切核對線索;不要用縮圖重現作者報告的誤差。

分開獨立證據

同一標示的重複照片不算多項獨立支持;以穩定地形或公共設施核對候選。

設定調查預算

先約定所需層級與停止條件;服務失敗時換可行路徑,避免持續重送相同的失敗請求。

match.py 與 sat_scan.py 首次使用會安裝 ML 依賴並下載權重。裝置預設嘗試順序如下,可透過 GEO_DEVICE 選擇支援的裝置:

  • CUDA。

  • MPS。

  • CPU。

模型權重下載與影像處理需預留時間及磁碟空間。Agent 使用費依宿主工具與模型方案而定,不因技能程式碼採 MIT 就保證整次調查沒有成本。

06前處理、調查與交付

公共地景範例

範例使用本人拍攝、可合法分析的公共步道照片 public-landscape.jpg。目標先設定為片區層級,且不執行對未同意者的定位。

以下命令是操作規格,本次未分析照片。從 clone 根目錄建立新的案例資料:

bash
uv run skills/geo-sleuth/scripts/intake.py public-landscape.jpg --out-dir case-landscape/intake --no-rev
uv run skills/geo-sleuth/scripts/board.py --board case-landscape/board.json init --photo public-landscape.jpg --case public-landscape

先檢查以下產出;初始 board 尚未包含定位證據:

檔案檢查內容
case-landscape/intake/intake.md成功、失敗與略過的步驟
case-landscape/intake/intake.jsonresult 與各步驟的 status
case-landscape/intake/edges/裁切是否支持原先觀察
case-landscape/board.json以該照片建立的空候選紀錄

可將以下工作規格交給已載入技能的 Agent:

text
Analyze public-landscape.jpg, which I took on a public trail. Aim for area-level identification first. Begin with case-landscape/intake and case-landscape/board.json. Ask before uploading the photo to reverse-image search. Record every executed command and its output file. Compare all justified candidates. Do not invent coordinates or precision. Report alternatives, failed routes, and missing evidence if the location remains unresolved.

Agent 應依實際線索選路徑。地圖與幾何資料確認後,才建立 case-landscape/spec.json:

欄位或依賴條件
map指向 tiles.py fetch 圖檔;旁需有同名 JSON 地理參照檔
camera有證據支持的 WGS84 相機位置
heading、hfov由實際測量或有依據的相機幾何決定
panels可核對的地面比較影像;路徑相對於 spec

先檢查地圖 sidecar 的 failed_tiles 與實際影像,再組合證據圖:

bash
uv run skills/geo-sleuth/scripts/evidence.py case-landscape/spec.json --out case-landscape/evidence.jpg

接著檢查候選板:

bash
uv run skills/geo-sleuth/scripts/board.py --board case-landscape/board.json check --evidence case-landscape/evidence.jpg

若印出 FAIL,先停止並修正。內容檢查通過後,再將候選紀錄合併至結果檔:

bash
uv run skills/geo-sleuth/scripts/board.py --board case-landscape/board.json report --merge case-landscape/result.json

report --merge 整理候選紀錄,不會替照片計算真實座標。若證據不足,交付已支持的層級與待補資訊,不要為了填滿欄位產生一個位置。

07報告可以支持的範圍

精度與信心分級

技能要求誤差半徑不大於 100 m 時,需有兩項獨立限制的交會,或至少三項不變特徵的地面影像吻合。這是證據門檻,不能取代來源品質與相機幾何的檢查。

報告層級高信心條件中信心條件或限制
城市可讀文字或已確認地標等證據多項獨立弱線索一致
片區至少三項俯視特徵唯一吻合,候選區已檢查且無第二個匹配最相似地點仍有未檢查的替代候選
道路至少兩項獨特地面特徵吻合版面與一項特徵一致;無地面影像時需高片區信心及方位自查
建物兩項獨立相機位置限制,加至少三項地面特徵吻合只具備其中一組支持
樓層兩種類型的參考一致單一參考;低信心時不提供

各層級分開評分,報告到最細且達到中信心以上的層級。單一山稜線吻合只限制視線;不能直接寫成公尺級相機位置。

候選板的 --level 與報告的信心表不同。建立候選時使用該 CLI 支援的層級,不要把報告名稱直接當成參數:

候選板支援的層級
country、admin1、admin2、city、district、area、road、point

08上傳、資料完整性與授權

限制與注意事項

狀況處理方式
doctor 回傳 0仍需閱讀 WARN 與修正建議
intake 回傳 0可能是 partial;檢查報告與逐步 status
反向搜尋沒有結果檢查是否搜尋失敗、CAPTCHA 或服務不可用
地圖出現黑色區塊tiles.py fetch 可能仍正常結束;檢查 failed_tiles,勿把缺圖當反證
地形 tile 缺失預設會失敗;使用 --allow-missing 後的缺口不能當有效地形
街景比對低分檢查視角與拍攝年代;未 refine 不等於零個匹配
大區域 OSM 查詢逾時縮小範圍或改路徑,不反覆重送同一請求
重新執行 board init既有檔案需另外處理;不要用 --force 抹掉待保留的調查紀錄

證據圖使用 WGS84 對齊的底圖。從其他地圖讀到座標時,先確認 datum:

名稱常見用途
WGS84GPS、OSM 與高程資料
GCJ-02部分中國地圖服務
BD-09百度經緯度
Baidu Mercator百度地圖及全景 API 的投影座標

程式碼授權與資料授權分開確認:

項目條款或處理
技能程式碼MIT
Wikipedia 衍生查表資料CC BY-SA 4.0,保留原始來源與姓名標示要求
發佈 OSM 查詢結果依 ODbL 與來源要求標示 OpenStreetMap contributors
衛星與街景影像依各服務條款,不因本專案 MIT 而自動取得任意散佈權

案例目錄與 .geo-cache/ 可能保留來源資訊。對外分享前檢查檔案內容,勿公開未授權的照片或私密位置。

09作者紀錄的解讀方式

官方案例與評估界線

README 列出以下新 Agent 重跑紀錄;數字屬作者報告,本次未重現:

案例提示作者報告的距離時間
沙漠山稜在中國距已確認相機位置 87 m32 min
溫哥華櫻花街景無距已確認相機位置 3 m53 min

這兩張照片先前都已解出,相關經驗也已寫入技能,因此 README 將它們定位為回歸檢查。它們不是未見照片的整體準確率;公開的未見照片盲測集仍列在 roadmap。

個別算子的檢索排名不能代表端到端定位成功。評估自己的用途時,保留未解出的案例與實際調查成本。

10環境調整與來源版本

後續操作

下一項工作操作
服務失效重跑 doctor 的相關診斷,記錄失敗路徑
調整模型裝置檢查 GEO_DEVICE 與目前 torch 支援狀況
新國別資料查看 region pack 與查表來源,再決定可用範圍
回報錯誤提供第一次偏離的步驟與最小可核對資料,不張貼私人住宅或可識別個人的內容

維護中的工具訊息與說明以英文為主;OCR 與來源文字保留原文,由 Agent 用讀者語言解釋。凍結的 zh-final tag 不能替代目前主線文件。

本手冊查核修訂為 1a9ecee153b02e2db2e62352002fa5b17bbd819d,技能文件標示 v2。本次未執行:

  • 照片定位或案例重跑。

  • 照片上傳與地圖服務查詢。

  • 技能安裝或模型下載。

參考資料