У цій статті ви дізнаєтесь, як за допомогою геолокаційного аналізу і уважного вивчення деталей фотографії можна визначити місце її зйомки. Розглядаючи конкретний приклад знімку, зробленого на вулицях Мексики, автори звертають увагу на такі ключові елементи, як інфраструктура, дорожні знаки, орієнтація супутникових антен, місцевий транспорт, типове оздоблення будинків і навіть побутові предмети.
Наше завдання з цієї фотографії знайти її координати.
З нами поділилися скріншотом з вулиці, що на перший погляд не вирізняється нічим особливим, крім хіба що помітного біло-рожевого об’єкта. Її розташування одразу ж видає типовий водонапірний бак, який є майже в кожному місцевому будинку, та характерний стовп.
Знак одностороннього руху, хоч і не відповідає типовому мексиканському, більше нагадує колумбійський, проте, враховуючи невеликий розмір міста, це пояснюється нестандартними умовами — встановили той, що був у наявності. Уважне око помітить і низку інших деталей, що додають контексту місцю.
Супутникова тарілка;
Відсутність переднього номера у машини;
Велосипед, залишений без нагляду;
Таблички з назвою вулиць;
Дорожнє покриття з бетону;
Ухил дороги;
Біло-рожевий об’єкт виявився пральною машиною;
Цегляний недобуд;
Пліснява на фасаді будівлі;
Щогла далеко за деревами;
Ватермарка гугла 2019 Google у лівому верхньому кутку;
Нелінійність знімка;
Різкі тіні.
Зупинимося на кожному пункті докладніше.
Взагалі мексиканські стрілки виглядають так:
Але наша стрілка особлива. Здається, ніби наконечник не зовсім трикутний, основа трикутника трохи втоплена до вершини, як у колумбійських.
Може це просто особливості сприйняття з такими шакалами не розібрати. У Мексиці зустрічаються різні варіанти, хоч і рідше.
Рідкісність таких стрілок може допомогти з упізнанням міста.
Погляньмо на таблички уважніше:
Але бувають інші варіанти:
Провайдерів супутникового ТБ у Мексиці не дуже багато.
Тарілка має бути спрямована на супутник Sky-Mexico 1, його проекція на поверхню має координати 0.0, -78.8. Можемо прикинути напрямок тарілки.
Супутникова тарілка на фото спрямована на південний схід. Дорога повертає трохи проти годинникової стрілки відносно напрямку тарілки і йде вліво, утворюючи з нею не прямий кут. Це дозволяє визначити приблизний напрямок сторін світу на знімку — напрямок зйомки позначений червоною стрілкою.
На машині не видно номерного знака, причини можуть бути різні. Але була теорія, що стару машину ввезли контрабандою зі США. Це підтверджується відповіддю на Quora . У зв’язку з цим висловили припущення, що це якийсь північний штат. Втім, воно не знайшло подальшого підтвердження.
Велосипед на вулиці стоїть без замка, що може вказувати на невелике містечко, де місцеві жителі довіряють один одному і не хвилюються про крадіжки.
Дорога бетонна — матеріал досить поширений, але не в кожному населеному пункті. Це може слугувати додатковим критерієм для ідентифікації місця. Наявність ухилу свідчить про гористу місцевість, тож плоскі регіони можна відразу виключати з пошуку.
На фото розпізнано пральну машину моделі Acros ALF2053ER або ALF1551ER, які зовні схожі, відрізняючись лише розмірами.
Знайдена інструкція з експлуатації цієї моделі пральної машини містить тимчасову мітку “08.02.2018”. Це дозволяє зробити висновок, що знімок зроблений не раніше цієї дати, адже малоймовірно, що машина так швидко потрапила на ринок.
Було знайдено опис особливостей Мексики від геогесеру @addlama. Наведемо цитату із розділу з архітектури будівель.
Отже, найімовірнішими для цього місця зйомки є штати Jalisco, Michoacán, Guanajuato та Aguascalientes. Трохи менш вірогідні, але можливі варіанти включають штати Durango, Zacatecas, San Luis Potosí, Querétaro, Guerrero, Morelos і Colima.
Для перевірки вирішили зробити запит на оверпас
area [ 'name' ~ ' ^ ( Jalisco | Michoacán | Guanajuato | Aguascalientes | Durango | Zacatecas | San Luis Potosí | Querétaro | Guerrero | Morelos | Colima ) #x27;] [admin_level = 4] ->.a; ( nwr [ man_made = mast ] ( area.a ) ; nwr [ 'tower:type' = communication ] ( area.a ) ; ) ; out center ;
З усіх штатів набралося 287 пікселів, які потрібно було оглянути вручну.
Плодів ця теорія не принесла і забрала чимало часу.
Від гугла залишилося два артефакти, копірайт 2019 Google та маркер площини.
Аналіз стритв’ю показав, що дата у ватермарці може не збігатися з точним роком зйомки, але точно не є меншою. Це означає, що зйомка відбулася не пізніше 2019 року. Разом із даними про пральну машину, з’являється висновок, що зйомка здійснена в період з лютого 2018 по грудень 2019 року.
У правій частині знімка помітне горизонтальне спотворення — об’єкти стають витягнутими. Це можна побачити, порівнявши пропорції пральної машини на фото з її фактичними габаритами.
Розміри пральної машини з сайту виробника 100.4×69 см для ALF2053ER та 91.3×58.5 см для ALF1551ER. Отримуємо пропорції 69/100.4 = 0.69, 58.5/91.3 = 0.64. Пропорція на знімку 39.03/47.52 = 0.82. В обох випадках горизонтальний розмір більший, ніж у реальності, на 19-28%. Тобто стрілка та табличка з адресою не настільки витягнуті.
Розрахунки дали наступні діапазони можливих дат і часу зйомки:
20 березня – 5 квітня між 9:00 і 10:00
6 вересня – 22 вересня між 10:00 і 11:00
Проте через велику кількість припущень у цих обчисленнях ми не стали надмірно покладатися на них під час пошуку.
Було визначено основні критерії, які дозволяють швидко оцінити місто та прийняти рішення, чи воно відповідає умовам:
Таблички на будинках, схожі на ті, що на фото.
Дорога з квадратних бетонних плит.
Знак стрілки, подібний до того, що на знімку.
Наявність перепадів висот.
На першому етапі ми завантажили в Overpass список міст у найбільш ймовірних штатах — Jalisco, Michoacán, Guanajuato, Aguascalientes — з населенням від 10 до 50 тисяч осіб. Це обумовлено припущенням, що місто навряд чи велике (зважаючи на велосипед, залишений на вулиці), а в менших містечках і селах частіше трапляються ґрунтові дороги, які не відповідають умовам.
[ out:csv ( name, population, ::id, ::lat, ::lon ) ] ; area [ name~ '^(Jalisco|Michoacán|Guanajuato)#x27;][admin_level=4]->.a; node[place~' ^ ( city | town | village | hamlet ) #x27;](area.a)(if:t['population']>=10000 && t['population']<50000); out ;
Під час обходу міст звернули увагу, що небо буває різного кольору, і це залежить від погоди, а залежить від дати зйомки. Нижче наведемо кілька прикладів.
У травні 2019 року колір неба на знімках Google став більш природним та блакитним, ймовірно, завдяки переходу на нове, більш якісне обладнання. Однак, оскільки зміна обладнання відбулася ще у 2017 році, до Мексики воно могло дійти з затримкою. На шуканому знімку небо виглядає темнішим, що вказує на використання старого обладнання. Це обмеження звужує можливу дату зйомки до періоду до травня 2019 року.
Також відзначено, що небо на знімку безхмарне, тому, якщо на панорамах міст є хмари, ці знімки можна відразу відкинути.
Після вичерпання всіх початкових зачіпок було прийнято рішення автоматизувати процес. Було розроблено утиліту, яка приймає OverpassQL скрипт, виконує його та завантажує панорами з Google Street View для знайдених точок. Для цього довелося провести реверс-інжиніринг API Google, і в результаті утиліта була створена.
Під час дослідження протоколу було виявлено, що старі знімки мають менший формат, що дозволило відфільтровувати зображення за датами зйомки та форматом без необхідності завантаження повного знімка. Це оптимізувало процес пошуку.
Тестування утиліти почалося зі скачування панорам перехресть за наступними критеріями:
Період зйомки: лютий 2018 – травень 2019.
Одностороння дорога з бетонним покриттям.
Відсутність світлофора поруч.
Штати: Jalisco, Michoacán, Guanajuato, Aguascalientes.
Міста з населенням від 10 до 100 тисяч мешканців.
Використання старого обладнання для зйомки.
Відповідний запит нижче.
[ timeout : 10000 ] ; area [ name ~ ' ^ ( Jalisco | Michoacán | Guanajuato | Aguascalientes ) # x27;] [admin_level = 4] -> .a; node [ place ~ '^(city|town|village|hamlet)#x27;](area.a)(if:t[' population ']>=10000 && t[' population' ] < 100000 ) -> .cities ; way [ highway ~ ' ^ ( tertiary | residential | unclassified ) #x27;][surface=concrete][oneway=yes](around.cities:20000)->.ways; foreach.ways -> .this_way { rel ( bw.this_way ) -> .this_rel ; node ( w.this_way ) -> .this_way_nodes ; way [ highway ~ ' ^ ( primary | secondary | tertiary | residential | unclassified ) #x27;] (bn.this_way_nodes)->.linked_ways; ( way.linked_ways ; - ( way ( r.this_rel ) ; way.this_way ; ) ; ) -> .linked_ways_only ; node ( w.linked_ways_only ) -> .linked_ways_only_nodes ; ( node.linked_ways_only_nodes.this_way_nodes ; node.all ; ) -> .all ; } node [ highway = traffic_signals ] ( around.all : 20 ) -> .sig ; ( node.all ; - node.all ( around.sig : 20 ) ; ) ; out ;
Отримані дані показали лише кілька кластерів, що привело до нової ідеї.
Було висунуто припущення, що у визначені дати гугломобіль міг об’їжджати певні міста. Щоб перевірити це, в утиліті додали функцію завантаження панорам із випадкових точок у радіусі навколо заданого центру. Завантаження панорам проводилося за наступними критеріями:
Період: лютий 2018 – травень 2019.
Штати: Jalisco, Michoacán, Guanajuato, Aguascalientes, Durango, Zacatecas, San Luis Potosí, Querétaro, Guerrero, Morelos, Colima.
Міста з населенням від 10 тисяч мешканців.
Використання старого обладнання.
Тільки стандартні панорами.
Примітка: історичні знімки більше не завантажувалися, оскільки було припущено, що потрібна панорама є основною, яку Google показує за замовчуванням.
Результатом став набір координат, нанесених на карту, що показують місця, де гугломобіль був у зазначені дати, але з того часу більше не повертався.
Виявилося, що бував багато де, і ця ідея не отримала продовження.
Найбільше оглянутих панорам зачепив передмістя на південному заході Леона, там відчувався досить схожий вайб.
Було прийнято рішення завантажити всі перехрестя Леона та його передмість за наступними параметрами:
Цей метод порівняння, насправді, не аналізує, що саме зображено на знімку, і не визначає об’єкти. Він просто обчислює кореляцію розподілів кольорів у просторі HSV, завдяки чому працює швидко та є стійким до різних спотворень, таких як масштабування, перспектива чи поворот. Проте він має свої недоліки, зокрема значну кількість хибнопозитивних результатів. Ми доклали зусиль, щоб зменшити їхню кількість.
Незважаючи на це, необхідні панорами не вдалося знайти. Однак скрипт визначив декілька панорам, які за кольоровою схожістю були найнаближеніші до шуканого знімка.
На завершальному етапі було вирішено запустити повномасштабний пошук по всіх перехрестях в 11 штатах, обмежених будівлями з червоної цегли. Утиліту додатково оптимізували, щоб вона могла виконувати кілька паралельних запитів до Overpass. Через велику кількість точок для кожного штату запити виконувалися окремо. Основні критерії для пошуку перехресть були наступні:
Дата зйомки: лютий 2018 – травень 2019.
Штати: Jalisco, Michoacán, Guanajuato, Aguascalientes, Durango, Zacatecas, San Luis Potosí, Querétaro, Guerrero, Morelos, Colima.
Обладнання: старе.
Тип знімків: лише стандартні панорами (без історичних знімків).
Приклад запиту для штату Jalisco.
[ timeout : 10000 ] ; area [ name = 'Jalisco' ] [ admin_level = 4 ] -> .a ; way [ highway ~ ' ^ ( tertiary | residential | unclassified ) #x27;] (area.a) -> .ways; foreach.ways -> .this_way { rel ( bw.this_way ) -> .this_rel ; node ( w.this_way ) -> .this_way_nodes ; way [ highway ~ ' ^ ( primary | secondary | tertiary | residential | unclassified ) #x27;] (bn.this_way_nodes)->.linked_ways; ( way.linked_ways ; - ( way ( r.this_rel ) ; way.this_way ; ) ; ) -> .linked_ways_only ; node ( w.linked_ways_only ) -> .linked_ways_only_nodes ; node.linked_ways_only_nodes.this_way_nodes ; out ; }
У результаті утиліта обробила понад 1,5 мільйона перехресть і завантажила більше 20 000 панорам. Перевірити такий обсяг вручну було б практично неможливо, проте скрипт для пошуку схожих зображень виконав завдання ефективно. У топ-20 найбільш відповідних результатів потрапили дві панорами, які максимально наблизилися до шуканого знімка.
Відповідь на завдання: 22.626705, -103.895337.
До того ж, у топі результатів з’явився ще один досить моторошний кадр із того ж міста. Це викликало деяке занепокоєння за літню жінку, яка була на знімку.