
Геолокація острова за допомогою геометрії та програмування на CUDA
OSINT-вправу розв’язали без Google Lens: 882 МБ прибережних даних, ланцюг геометричних фільтрів і 80 мільйонів трійок островів, перевірених на GPU, привели до курорту Oan у Мікронезії.
Розробник, який веде блог yassa9, опублікував 16 серпня 2026 року розбір того, як він розв’язав вправу з розвідки за відкритими джерелами (OSINT) — Exercise #004 від Софії Сантос (Gralhix). Завдання містило три питання про фото курорту на острові: назва курорту, координати острова та напрямок, у якому була спрямована камера. Автор відмовився від Google Lens і розв’язав задачу математикою та програмуванням.
Метадані та геометричний відбиток
Exiftool підтвердив, що зображення — це файл WebP розміром 736×515 без GPS-даних і без моделі камери. Тому автор витягнув геометрію трьох ділянок суходолу на фото: P0 — сам острів із курортом, P1 — острів праворуч, P2 — передній лівий острів із гірською вершиною. Невелика утиліта з кліками (01_triangle_gui.py) фіксувала піксельні координати й обчислювала співвідношення сторін та кути трикутника. Оскільки позначати центри на око неточно, пошук отримав допуск ±20% навколо цих значень.
Ланцюг фільтрів
Простором пошуку став глобальний набір берегових векторів OpenStreetMap land-polygons-split-4326 обсягом 882 МБ. Перший фільтр залишив лише тропічний пояс широт від −30° до 30° — 141 131 полігон. Фільтр локальної щільності відкинув острівці, які мають понад десять сусідів у радіусі 5 км, зменшивши набір до 51 576. Точки без щонайменше двох сусідів у межах 20 км було відкинуто, залишилося 23 500 кластерів, а генерація всіх трійок усередині них дала 80 690 777 кандидатних трикутників.
Перевірка на GPU
Кожну трійку обробляв окремий потік CUDA. Потік сортував три точки за площею суходолу, щоб визначити P0, за знаком двовимірного векторного добутку призначав P1 і P2, а далі перевіряв кут при P0, співвідношення відстаней і діапазони розмірів. На NVIDIA GeForce RTX 3050 (sm_86) з 5 169 МБ відеопам’яті ядро виконалося за 204,1 мс; перевірку пройшли 158 784 трійки, які після видалення дублікатів скоротилися до 8 915.
Далі список звужували поетапно: тест «відкритого прямокутника» на вільну воду залишив 948 кандидатів, оцінка компактності коралового острівця за індексом Полсбі — Поппера — 213, перевірка овальної форми — 137, а перевірка рослинності за індексом NDVI із зображень Sentinel-2 через публічний API Earth Search від Element84 — 66. Фінальна перевірка висот використала тайли Copernicus DEM GLO-30: P0 мав бути нижчим за 50 м, а найвища точка рельєфу в межах ±50° від напрямку камери на відстані від 2 до 20 км — від 100 до 500 метрів. Залишилося 26 кандидатів.
Відповідь
Восьмий запис у фінальній таблиці, віднесений до Федеративних Штатів Мікронезії, збігся з фото. Курорт має назву Oan, координати острова — 7°21′48.4″ пн. ш., 151°45′20.7″ сх. д. (7.363444, 151.755750), а камера дивилася на північний захід, приблизно 324.97°. Код і підсумковий звіт опубліковано на GitHub.
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.