
Локально-ориентированный движок геолокации, который определяет точные GPS-координаты уличных фотографий с использованием моделей компьютерного зрения CosPlace, ALIKED и LightGlue. Точность менее 50 метров, не требует ориентиров.
Движок геолокации уровня улицы с открытым исходным кодом
Загрузите любую уличную фотографию. Получите точные GPS-координаты.
Точность менее 50 м. Ориентиры не требуются. Работает полностью на вашем оборудовании.
Демонстрации · Как это работает · Начало работы · Использование · ЧаВО
Netryx — это инструмент геолокации, работающий в первую очередь локально, который определяет точные GPS-координаты любой уличной фотографии. В отличие от обратного поиска изображений (который сопоставляет загруженные веб-изображения), Netryx сопоставляет с систематически сканированными панорамами улиц — это означает, что он работает на любом случайном углу улицы, не имеющем присутствия в интернете.
Основной конвейер объединяет три современные модели компьютерного зрения:
Google Lens ищет в интернете. Netryx ищет в физическом мире.
Netryx использует трёхэтапный конвейер, который последовательно сужает выбор от миллионов кандидатов до одного точного совпадения. Netryx — это просто инструмент, он не зависит от источника и может обрабатывать изображения от любого провайдера, такого как Mapillary или KartaView, или любого другого.
Каждая панорама улиц в индексе была предварительно обработана в 512-мерный «отпечаток» с помощью CosPlace — модели распознавания визуальных мест, обученной на миллионах геотегированных изображений.
Когда вы загружаете запрашиваемую фотографию:
Этот этап выполняется менее чем за 1 секунду независимо от размера индекса — это одно матричное умножение.
CosPlace находит места, которые выглядят похожими. Этап 2 доказывает, что это одно и то же место, используя геометрическую верификацию.
Для каждого кандидата:
Этот этап обрабатывает 300–500 кандидатов за 2–5 минут в зависимости от вашего оборудования.
Первоначальное совпадение хорошее, но не всегда оптимальное. Уточнение улучшает его:
Для сложных изображений (ночь, размытие, низкая текстура) Ультра-режим добавляет:
Изображение запроса
│
├── Извлечение дескриптора CosPlace (512-мерный отпечаток)
├── Извлечение дескриптора отражённого изображения
│
▼
Поиск по индексу (косинусное сходство, фильтр по радиусу)
│
├── 500 лучших кандидатов, ранжированных по визуальному сходству
│
▼
Загрузка панорам → Кадрирование при 3 полях обзора → Извлечение ключевых точек ALIKED/DISK
│
├── Сопоставление LightGlue с ключевыми точками запроса
├── Геометрическая верификация RANSAC
│
▼
Уточнение направления (±45°, 3 поля обзора, 15 лучших кандидатов)
│
├── Кластеризация пространственного консенсуса
├── Оценка уверенности
│
▼
📍 GPS-координаты + Оценка уверенности
Поддержка GPU:
# Клонирование репозитория
git clone https://github.com/sparkyniner/Netryx-OpenSource-Next-Gen-Street-Level-Geolocation.git
cd .\Netryx-OpenSource-Next-Gen-Street-Level-Geolocation\
# Создание виртуального окружения
python3 -m venv venv
source venv/bin/activate # На Windows: venv\Scripts\activate
# Установка зависимостей
pip install -r requirements.txt
# Явная установка LightGlue (требуется для сопоставления)
pip install git+https://github.com/cvg/LightGlue.git
# Опционально: Установка kornia для Ультра-режима (LoFTR)
pip install kornia
Примечание:
lightglueимпортируется приложением как модуль Python, но устанавливается из указанного выше репозитория GitHub.
Если вы хотите использовать функцию AI-ассистированной слепой геолокации:
export GEMINI_API_KEY="ваш_ключ_здесь"
python test_super.py
Пользователи macOS: Если графический интерфейс отображается пустым, обновите tkinter: brew install [email protected] (или вашу версию Python). Встроенный tkinter системного Python имеет известные проблемы с отображением на последних версиях macOS.
Перед поиском вам нужно проиндексировать область. Это сканирует панорамы Street View и извлекает отпечатки CosPlace.
Оценка времени индексации:
Индекс сохраняется инкрементально — если процесс прерывается, он возобновляется с того места, где остановился, при следующем запуске.
Включите флажок Ультра-режим для сложных изображений. Это добавляет плотное сопоставление LoFTR, перескок дескрипторов и расширение окрестности. Значительно медленнее, но находит совпадения, которые пропускает стандартный конвейер.
Все вложения хранятся в едином индексе. При поиске фильтр радиуса автоматически ограничивает результаты указанной вами областью. Это означает:
Поток данных:
Режим создания:
Точки сетки → Google Street View API → Панорамы → Кадры → CosPlace → cosplace_parts/*.npz
Автопостроение:
cosplace_parts/*.npz → cosplace_descriptors.npy + metadata.npz (доступный для поиска индекс)
Режим поиска:
Изображение запроса → CosPlace → Поиск по индексу (фильтр по радиусу) → Загрузка кандидатов → ALIKED/DISK + LightGlue → Результат
netryx/
├── test_super.py # Основное приложение (GUI + индексация + поиск)
├── cosplace_utils.py # Загрузка модели CosPlace и извлечение дескрипторов
├── build_index.py # Автономный высокопроизводительный построитель индексов (для больших наборов данных)
├── requirements.txt # Зависимости Python
├── cosplace_parts/ # Сырые чанки вложений (создаются во время индексации)
├── index/ # Скомпилированный доступный для поиска индекс
│ ├── cosplace_descriptors.npy # Все 512-мерные дескрипторы
│ └── metadata.npz # Координаты, направления, ID панорам
└── README.md
Уменьшается ли точность при большем радиусе поиска?
Нет. CosPlace ранжирует по визуальному сходству по всему индексу. Покрывает ли ваш индекс 1 км или 50 км, лучшие кандидаты всегда будут наиболее визуально похожими. Фильтр радиуса просто исключает географически нерелевантные записи перед ранжированием.
Сколько времени занимает поиск?
Обычно 2–5 минут на Apple Silicon, 1–3 минуты на NVIDIA GPU. Узким местом является загрузка тайлов панорам из Google (сетевая задержка), а не само сопоставление.
Могу ли я проиндексировать целую страну?
Нецелесообразно. Радиус 10 км даёт ~100 тыс. панорам и индекс ~7 ГБ. Для целой страны потребовались бы петабайты. Индексируйте конкретные города или регионы, представляющие интерес (5–20 км).
Мой поиск не нашёл ни одного кандидата.
Ваши координаты поиска не пересекаются ни с одной проиндексированной областью. Либо сначала проиндексируйте эту область, либо измените центр/радиус поиска, чтобы он пересекался с существующими индексированными данными. Используйте «Показать карту покрытия», чтобы визуализировать, что было проиндексировано.
Совпадение немного неверное (смещение на один квартал).
Включите Ультра-режим. Расширение окрестности ищет все панорамы в радиусе 100 м от начального совпадения, часто находя точный правильный уличный узел.
Работает ли это с indoor-фотографиями?
Нет. Netryx сопоставляет только с уличными панорамами. Фотографии помещений, аэрофотоснимки/спутниковые снимки и крупные планы объектов не дадут осмысленных результатов.
Это стоит денег?
Netryx — бесплатный и открытый. Опциональная функция AI Coarse требует ключа Gemini API (бесплатный уровень доступен от Google). Вычислительные затраты — ваше собственное оборудование, облачные сервисы не требуются.
Есть ли хостинговая версия?
Да. netryx.live запускает полный конвейер в облаке, так что вам не нужно ничего настраивать локально. Полезно, если вам нужны быстрые результаты без создания собственного индекса. Но она примерно на 30% менее точна, чем версия с открытым исходным кодом, из-за ограничений по вычислительным ресурсам.
netryx.live запускает тот же движок в облаке — загрузите фото, получите координаты. Никакой установки, индексации или GPU не требуется. Но она примерно на 30% менее точна, чем версия с открытым исходным кодом, из-за ограничений по вычислительным ресурсам.
Сайрадж Баладжи — исследователь ИИ и создатель PrismX. Гранты от Microsoft for Startups и ElevenLabs. Публикации в Fast Company и Deutsche Welle.
Лицензия MIT. См. LICENSE для подробностей.
Netryx предназначен для законных исследований OSINT, журналистских расследований, мониторинга прав человека, реагирования на стихийные бедствия и академических исследований.
Ответственность пользователя: Вы несёте единоличную ответственность за соблюдение применимых законов, включая Условия использования Google Maps/Street View и местные правила конфиденциальности.
Не используйте для: Сталкинга, домогательств, несанкционированного наблюдения или любых действий, нарушающих конфиденциальность или безопасность людей.
Разработчики Netryx снимают с себя всякую ответственность за неправомерное использование.
| Сценарий использования | Ссылка |
|---|
| Геолокация ракетного удара — Катар (февраль 2026) | Смотреть на YouTube |
| Мониторинг конфликтов — протесты в Париже | Смотреть на YouTube |
| Слепая геолокация по случайному фото — Париж | Смотреть на YouTube |
| Техническое погружение: как работает конвейер | Смотреть на YouTube |
| Компонент | Минимальные | Рекомендуемые |
|---|
| ОС | macOS / Linux / Windows | macOS (M1+) или Linux с NVIDIA GPU |
| Видеопамять GPU | 4 ГБ | 8 ГБ+ |
| ОЗУ | 8 ГБ | 16 ГБ+ |
| Память | 10 ГБ | 50 ГБ+ (зависит от размера индексируемой области) |
| Интернет | Требуется для индексации и поиска | Рекомендуется широкополосный |
| Python | 3.9+ | 3.10+ |
| Радиус | Приблизительно панорам | Время (M2 Max) | Размер индекса |
|---|
| 0.5 км | ~500 | 30 мин | ~60 МБ |
| 1 км | ~2,000 | 1–2 часа | ~250 МБ |
| 5 км | ~30,000 | 8–12 часов | ~3 ГБ |
| 10 км | ~100,000 | 24–48 часов | ~7 ГБ |
| Модель | Назначение | Статья |
|---|
| CosPlace | Распознавание визуальных мест (глобальный дескриптор) | CVPR 2022 |
| ALIKED | Извлечение локальных признаков (используется на CUDA) | IEEE TIP 2023 |
| DISK | Извлечение локальных признаков (используется на MPS/CPU) | NeurIPS 2020 |
| LightGlue | Глубокое сопоставление признаков | ICCV 2023 |
| LoFTR | Беcдетекторное плотное сопоставление (Ультра-режим) | CVPR 2021 |
| Особенность | CUDA (NVIDIA) | MPS (Mac) | CPU |
|---|
| Извлекатель признаков | ALIKED (1024 ключевых точек) | DISK (768 ключевых точек) | DISK (768 ключевых точек) |
| Flash-внимание LightGlue | Включено | Отключено | Отключено |
| LoFTR (Ультра-режим) | Полная скорость | CPU fallback для некоторых операций | Полный CPU |
| Скорость индексации | Самая быстрая | Хорошая | Медленная |