
Die weltweit anspruchsvollste Software zur Geolokalisierung von Straßenbildern
Modernste KI-Geolokalisierung aus einem einzigen Bild.
Die Idee • Funktionsweise • Erste Schritte • Community-Hub • Installation
Du hast ein Foto. Vielleicht ein Screenshot aus einem Video. Vielleicht ein zugeschnittenes, unscharfes Handyfoto, das jemand online gestellt hat. Vielleicht zeigt es nur eine Ladenfront, ein Stück Straße oder die Ecke eines Gebäudes. Du willst genau wissen, wo es aufgenommen wurde.
Netryx Astra V2 beantwortet diese Frage.
Es ist ein Open-Source-Geolokalisierungssystem, das ein einzelnes Bild nimmt und die genauen GPS-Koordinaten findet, indem es mit einer Datenbank von Street-View-Panoramen abgeglichen wird. Lade dein Foto hoch, und innerhalb von Minuten erfährst du die Straße, die Stadt, die Koordinaten – auf wenige Meter genau.
Was V2 vom ursprünglichen Netryx (und von anderen Tools) unterscheidet, ist die Matching-Pipeline. Wir haben alles von Grund auf neu aufgebaut und zwei Modelle verwendet, die es zu Beginn dieses Projekts noch nicht gab:
MegaLoc (CVPR 2025) – das genaueste Bildabrufmodell für die Ortserkennung, trainiert auf sechs Datensätzen, die Innenräume, Außenbereiche, Tag, Nacht und jahreszeitliche Variationen abdecken. Es findet die richtige Nachbarschaft.
MASt3R (ECCV 2024) – ein 3D-bewusster dichter Matcher, der die Geometrie von Szenen versteht, nicht nur Pixelmuster. Er bestätigt den genauen Standort, selbst bei partiellen oder stark zugeschnittenen Fotos, an denen herkömmliche Matcher scheitern würden.
Das Ergebnis ist eine dreistufige Pipeline, die einfacher und genauer ist als das neunstufige System, das sie ersetzt hat.
Das ursprüngliche Netryx verwendete CosPlace für den Abruf und einen Stapel aus DISK + LightGlue + LoFTR + RANSAC + Deskriptor-Hopping + Nachbarschaftserweiterung für die Verifikation. Es funktionierte, war aber fragil – viele Heuristiken, die aufeinander aufbauten, jede eine Notlösung für eine Einschränkung der vorherigen Stufe.
V2 hat das alles weggeworfen. Hier ist, was was ersetzt hat:
Die Vereinfachung ist nicht nur ästhetisch. Weniger Stufen bedeuten weniger Fehlerquellen, schnellere Suchen und Code, der tatsächlich wartbar ist.
Die Pipeline hat drei Stufen. Das ist keine Übertreibung – es sind wirklich nur drei Stufen.
Query-Bild
│
▼
┌─────────────┐
│ MegaLoc │ "Wo in der Stadt könnte dies sein?"
│ Retrieval │
└─────┬───────┘
│ Top 500 Kandidaten
▼
┌─────────────┐
│ MASt3R │ "Ist das tatsächlich derselbe Ort?"
│ Matching │
└─────┬───────┘
│ Bewertete Kandidaten
▼
┌─────────────┐
│ Räumlicher│ "Welcher Match-Cluster ist am vertrauenswürdigsten?"
│ Konsens │
└─────┬───────┘
│
▼
📍 GPS-Koordinaten
Dein Query-Bild wird in einen kompakten Deskriptor umgewandelt – einen 8448-dimensionalen Vektor, der die visuelle Essenz der Szene einfängt. Dieser wird PCA-reduziert auf 1024 Dimensionen und dann per Skalarprodukt-Ähnlichkeit mit jedem indizierten Ort verglichen.
Wir extrahieren auch einen Deskriptor für einen leicht hineingezoomten zentralen Ausschnitt und für eine horizontal gespiegelte Version des Quellbilds und führen die Ergebnisse zusammen. Das behandelt Fälle, in denen das Query einen anderen Zoomfaktor oder die entgegengesetzte Blickrichtung hat als die indizierte Ansicht.
Die Ausgabe sind die top 500 Kandidatenstandorte aus dem Index, geordnet nach visueller Ähnlichkeit.
MegaLoc stammt aus Gabriele Bertons Labor (derselben Gruppe, die CosPlace und EigenPlaces entwickelt hat). Es ist das neueste in ihrer Reihe von Arbeiten, gleichzeitig trainiert auf SF-XL, GSV-Cities, MSLS und Landmark-Retrieval-Daten. Kein anderes Retrieval-Modell schlägt es durchgängig in allen Benchmarks – indoor, outdoor, urban, ländlich, Tag, Nacht.
Für jeden dieser 500 Kandidaten laden wir das entsprechende Street-View-Panorama herunter, schneiden es im indizierten Blickwinkel zu und führen MASt3R aus, um dichte Pixelkorrespondenzen zwischen dem Query und dem Ausschnitt zu finden.
Hier geschieht die Magie für schwierige Queries. Herkömmliche Matcher wie SuperPoint + LightGlue extrahieren vielleicht 500–2000 spärliche Keypoints und versuchen, sie zu matchen. Wenn dein Query-Bild nur 20 % mit dem Datenbankbild überlappt, gibt es vielleicht nur 50 gemeinsam sichtbare Keypoints – nicht genug für einen zuverlässigen Match.
MASt3R arbeitet völlig anders. Es behandelt Matching als 3D-Rekonstruktionsproblem und sagt dichte Punktkarten und lokale Merkmalsdeskriptoren für jedes Pixel voraus. Selbst eine kleine überlappende Region liefert Hunderte zuverlässiger Korrespondenzen, weil es die 3D-Struktur der Szene versteht, nicht nur 2D-Pixelmuster.
Im Map-free Localization Benchmark (ein einzelnes Referenzbild, Blickwinkeländerungen bis zu 180°) schlägt MASt3R bisherige Methoden um 30 %. Das ist keine inkrementelle Verbesserung – es ist ein Generationssprung.
Das Problem, einfach den Kandidaten mit der höchsten Match-Bewertung auszuwählen, sind falsch-positive Ergebnisse. Zwei identische Fast-Food-Ketten 5 km entfernt liefern beide hohe MASt3R-Werte. Eine Reihe von Plattenbauten aus der Sowjetzeit sehen alle gleich aus.
Räumlicher Konsens löst dies. Wir teilen den Suchbereich in ~50-Meter-Rasterzellen auf und clustern alle guten Matches geografisch. Jede Zelle erhält eine Bewertung basierend auf der kombinierten Evidenz aller Matches in dieser Zelle und ihren Nachbarzellen.
Ein einzelner Ausreißer mit 200 Inliers am falschen Ort wird von einem Cluster aus 5 Matches mit jeweils 80–150 Inliers am richtigen Ort überboten. Der beste Match des Gewinner-Clusters wird zur endgültigen Antwort.
Deshalb bleibt die Genauigkeit auch bei größeren Suchradien erhalten, bei denen es mehr ähnlich aussehende Standorte gibt.
In diesem Bild gibt es absolut keine Anhaltspunkte, es ist nur ein kleiner zugeschnittener Teil. Herkömmliche OSINT würde hier völlig versagen. Doch Netryx Astra hat es mit genauen Koordinaten geolokalisiert, ohne Metadaten oder vorherige Hinweise, und das vollständig lokal.
Ein kleines zugeschnittenes Bild eines Gebäudes – das war alles, was nötig war, um seinen Standort in einem 1-km-Radius in Moskau zu finden.
Das ist der Teil, auf den wir uns am meisten freuen.
Das Indizieren einer Stadt dauert Stunden Rechenzeit. Es ist verschwenderisch, wenn jeder Benutzer dieselbe Stadt unabhängig voneinander indiziert. Also haben wir ein Freigabesystem gebaut: Eine Person indiziert Moskau, lädt das Ergebnis hoch, und alle anderen laden es in Minuten herunter.
Der schnellste Weg. Jemand anders hat die Indizierungsarbeit bereits erledigt – du lädst einfach seinen vorgebauten Index herunter.
Setze den Modus auf Suchen, klicke Suche starten und wähle dein Query-Bild aus. Die Kartenkoordinaten und der Suchradius werden automatisch aus den Index-Metadaten übernommen. Diese Funktion funktioniert nur, wenn die Community beiträgt und sich gegenseitig unterstützt. Wenn du eine Region indizierst, wären wir alle dankbar, wenn du sie hochlädst.
WICHTIGER HINWEIS: Falls die Anwendung aufgrund von Speichermangel beim Anpassen der PCA einfriert, verwende diesen Befehl im Terminal: python3 -c "from test_super import build_compact_index; build_compact_index()"
Möchtest du eine Stadt oder Gegend indizieren, die noch niemand gemacht hat? Die App erledigt alles – Panoramen herunterladen, Deskriptoren extrahieren, Suchindex erstellen.
python test_super.py
Was unter der Haube passiert: Die App erzeugt ein Raster von Punkten innerhalb des Radius, findet alle verfügbaren Panorama-Standorte, lädt jedes Panorama als Kacheln herunter und setzt sie zusammen, schneidet jedes Panorama in mehreren Blickwinkeln zu, extrahiert MegaLoc-Deskriptoren für jeden Ausschnitt, passt PCA auf alle Deskriptoren an und erstellt einen kompakten Suchindex.
Hast du eine .netryx-Datei von einem Freund, einem Discord-Server oder einem Download-Link? Klicke einfach auf 📥 Index importieren in der App, wähle die Datei aus, und schon kannst du suchen. Kein Konto nötig, kein Internet nötig – es ist ein vollständig offline Arbeitsablauf.
Indizes werden auf dem Hugging Face Hub als öffentliche Datensätze gehostet. Jeder kann ohne Konto herunterladen. Zum Beitragen (Hochladen) ist ein kostenloser Hugging-Face-Account erforderlich.
Über die GUI: Klicke auf den Button 🌐 Community Hub, um verfügbare Indizes zu durchsuchen und herunterzuladen. Klicke auf ⬆ Aktuellen Index hochladen, um deinen zu teilen.
Index-Pakete verwenden das .netryx-Format – ein ZIP-Archiv mit:
Beim Export erfolgt die geografische Filterung automatisch. Wenn dein Index Moskau + Paris + Tokio enthält, aber du „Moskau 1 km“ exportierst, werden nur die Moskauer Einträge aufgenommen. Du kannst bestimmte Regionen aus einem größeren Index herausschneiden, ohne manuelle Arbeit.
Du möchtest Hugging Face nicht nutzen? Exportiere und teile die Datei einfach nach Belieben:
# Export
python netryx_hub.py export \
--index-dir ./netryx_data/index \
-o moscow_1km.netryx \
--city moscow --radius 1 --lat 55.75 --lon 37.62
# Sende die Datei via Discord, E-Mail, Google Drive, was auch immer
# Andere Person importiert
python netryx_hub.py import moscow_1km.netryx -o ./netryx_data/index
Mac / Linux:
git clone https://github.com/sparkyniner/Netryx-Astra-V2-Geolocation-Tool.git
cd netryx-astra-v2
chmod +x setup.sh && ./setup.sh
source venv/bin/activate
python3 test_super.py
Windows:
git clone https://github.com/sparkyniner/netryx-astra-v2.git
cd netryx-astra-v2
Dann doppelklicke auf setup.bat, um alles zu installieren. Wenn es fertig ist, doppelklicke auf run.bat, um zu starten.
Das war's. Das Setup-Skript erstellt eine virtuelle Umgebung, installiert alle Abhängigkeiten, klont MASt3R neben dem Repository und lädt die Modellgewichte vorab herunter. Keine manuelle Konfiguration erforderlich.
MASt3R-Gewichte werden beim ersten Start automatisch von Hugging Face heruntergeladen.
Deine Ordnerstruktur sollte so aussehen:
some_folder/
├── netryx-astra-v2/ # Dieses Repo
│ ├── test_super.py
│ ├── megaloc_utils.py
│ ├── mast3r_utils.py
│ ├── netryx_hub.py
│ └── ...
└── mast3r/ # Separat geklont
├── mast3r/
├── dust3r/
└── ...
mast3r_utils.py findet und importiert das benachbarte mast3r/-Verzeichnis automatisch zur Laufzeit. Keine Pfadkonfiguration erforderlich.
Alles läuft sofort auf Apple Silicon. Der Code behandelt MPS-Besonderheiten automatisch – CPU-Fallback für nicht implementierte Operationen, Monkey-Patching von .view() → .reshape() für nicht zusammenhängende Tensoren und MPS-Cache-Bereinigung bei langen Indizierungsläufen.
Wenn du einen M1/M2/M3/M4-Mac hast, wird automatisch GPU-Beschleunigung genutzt. Keine Konfiguration nötig.
Du musst nach der Ausführung des Installationsskripts manuell rocm/pytorch für dein spezifisches Gerät in der venv installieren.
Verwende die TheRock-PyTorch-Builds für dein Gerät: https://github.com/ROCm/TheRock/blob/main/RELEASES.md#installing-pytorch-python-packages
Um beispielsweise für RX7xxx-Serie-Karten zu installieren:
pip install --index-url https://rocm.nightlies.amd.com/v2/gfx110X-all/ torch torchaudio torchvision
HINWEIS: Stelle sicher, dass der Benutzer Teil der render-Gruppe ist:
sudo usermod -aG render <userid>
und der Basistreiber installiert ist: https://rocm.docs.amd.com/projects/install-on-linux/en/latest/install/quick-start.html#amd-gpu-driver-installation
netryx-astra-v2/
├── test_super.py # Hauptanwendung – GUI, Pipeline, alles
├── megaloc_utils.py # MegaLoc-Modell laden, Deskriptor-Extraktion, PCA
├── megaloc_model.py # Eigenständige MegaLoc-Architektur (Fallback, falls torch.hub fehlschlägt)
├── mast3r_utils.py # MASt3R laden und dichtes Matching
├── netryx_hub.py # Community-Hub – Hochladen, Herunterladen, Export, Import
├── README.md
├── LICENSE
└── requirements.txt
# Created at runtime (not committed to git):
netryx_data/
├── megaloc_parts/ # Raw 8448-dim descriptor chunks (created during indexing)
└── index/ # The compact search index
├── megaloc_descriptors.npy # PCA-reduced descriptors
├── metadata.npz # Coordinates, headings, panoid IDs
├── megaloc_pca.pkl # PCA model for query-time transformation
└── manifest.json # Present if downloaded from Community Hub
# External dependency (cloned separately, NOT inside this repo):
../mast3r/ # https://github.com/naver/mast3r
Du kannst diese Parameter in test_super.py bei Bedarf anpassen. Die Standardwerte funktionieren für die meisten Anwendungsfälle gut.
Die Hauptsache, die du vielleicht anpassen möchtest, ist INDEX_TARGET_DIM – eine Reduzierung auf 512 halbiert die Indexgröße bei nur ~2–3 % Genauigkeitsverlust.
Wir glauben an Transparenz darüber, was dieses Tool kann und was nicht.
Es findet nur Orte, die im Index sind. Wenn ein Ort nicht von dir oder aus der Community heruntergeladen indiziert wurde, wird er nicht gefunden. Kein Modell, so fortschrittlich es auch sein mag, kann gegen Daten matchen, die nicht existieren. Die Genauigkeitsobergrenze wird durch die Abdeckung gesetzt, nicht durch die Modelle.
Wiederholte Architektur verursacht falsch-positive Ergebnisse. Filialketten, Vorstadtsiedlungen, Reihen identischer Wohnblöcke – sie sehen auf Straßenebene tatsächlich gleich aus. Räumlicher Konsens hilft (ein Cluster nahegelegener Matches schlägt einen einzelnen isolierten Ausreißer), ist aber nicht narrensicher, besonders bei großen Suchradien (10 km+), wo es mehr ähnlich aussehende Kandidaten gibt. Dies ist ein ungelöstes Problem auf dem Gebiet, keine Einschränkung, die spezifisch für Netryx ist.
In manchen Gebieten gibt es Abdeckungslücken. Ländliche Gebiete, Entwicklungsländer, neu gebaute Nachbarschaften und Innenräume haben möglicherweise nur begrenztes oder gar kein Bildmaterial auf Straßenebene, das indiziert werden kann.
Dies ist kein Echtzeitsystem. Das Ausführen von MASt3R auf 500 Kandidaten dauert auf einer Verbraucher-GPU mehrere Minuten. Dieses System ist für forensische Analysen konzipiert – Investigativjournalismus, Menschenrechtsdokumentation, OSINT-Forschung, Versicherungsbetrugsermittlung – nicht für Navigation oder Live-Verfolgung.
Die Indizierung erfordert erhebliche Rechenleistung. MegaLoc's DINOv2-Backbone ist ~5x schwerer als der CosPlace-Backbone, der in V1 verwendet wurde. Die Indizierung eines 1-km-Radius dauert ~20–30 Minuten. Eine ganze Stadt (10 km+) ist eine über-Nacht-Aufgabe. Deshalb gibt es den Community-Hub – damit diese Kosten einmalig bezahlt und geteilt werden. Außerdem ist der Match mit den meisten Inlinern nicht unbedingt der richtige Match; deshalb werden mehrere Ergebnisse zurückgegeben, die du selbst überprüfen kannst.
Wenn du Netryx Astra V2 in deiner Forschung oder Arbeit verwendest, freuen wir uns über eine Zitation:
@software{netryx_astra_v2,
title={Netryx Astra V2: State-of-the-Art AI Geolocation},
author={Sairaj Balaji},
year={2026},
url={https://github.com/yourusername/netryx-astra-v2}
}
MIT-Lizenz. Siehe LICENSE für Details.
MegaLoc-Gewichte sind MIT-lizenziert. MASt3R ist Apache 2.0. DINOv2 ist Apache 2.0. Von der Community geteilte Indizes sind CC-BY-4.0.
Erstellt von Sairaj Balaji
Hat außerdem PrismX gebaut, vorgestellt in Fast Company · 404 Media · Deutsche Welle
| V1 (Original) | V2 (Astra) |
|---|
| Kandidaten finden | CosPlace (ResNet-50, 512-dim) | MegaLoc (DINOv2 ViT-B/14, 8448-dim → PCA 1024) |
| Übereinstimmungen bestätigen | DISK + LightGlue + RANSAC | MASt3R dichtes 3D-Matching |
| Umgang mit Randfällen | LoFTR-Rückfall, Deskriptor-Hopping, Nachbarschaftserweiterung, Ultra Mode | Räumlicher Konsens – das war's |
| Pipeline-Stufen insgesamt | 9+ | 3 |
| Partielles Bild-Matching | Schwach – spärliche Keypoints versagen bei kleinen Überlappungen | Stark – MASt3R findet dichte Korrespondenzen in winzigen Regionen |
| Indizes teilen | Nicht möglich | Community-Hub via Hugging Face + offline .netryx-Pakete |
| Parameter | Standardwert | Funktion |
|---|
INDEX_TARGET_DIM | 1024 | PCA-Ausgabedimension. 512 = kleinerer Index, etwas weniger genau. 1024 = gute Balance. |
MAX_PANOID_WORKERS | 16 | Wie viele Panoramen während der Indizierung parallel heruntergeladen werden |
MAX_DOWNLOAD_WORKERS | 100 | Gleichzeitige Kachel-Download-Verbindungen (jedes Pano = 8 Kacheln) |
EARLY_EXIT_INLIER_THRESHOLD | 450 | Wenn MASt3R so viele dichte Matches findet, brich die Suche frühzeitig ab – es ist ein sicherer Treffer |
MAST3R_STAGE2_TOP_N | 500 | Wie viele MegaLoc-Kandidaten durch MASt3R laufen |