
კუნძულის ლოკაცია გეომეტრიითა და CUDA-ზე დაპროგრამებით
OSINT-სავარჯიშო Google Lens-ის გარეშე ამოიხსნა: 882 მბ სანაპირო მონაცემები, გეომეტრიული ფილტრები და GPU-ზე 80 მილიონი სამეულის შემოწმება მივიდა მიკრონეზიაში მდებარე კურორტ Oan-ის კოორდინატებამდე.
დეველოპერმა, რომელიც ბლოგზე yassa9-ის სახელით წერს, 2026 წლის 16 აგვისტოს გამოაქვეყნა ჩანაწერი იმის შესახებ, თუ როგორ ამოხსნა ღია წყაროებზე დაფუძნებული დაზვერვის (OSINT) სავარჯიშო — Sofia Santos-ის (Gralhix) Exercise #004. ამოცანა სამ კითხვას მოიცავდა: რა ჰქვია ფოტოზე გადაღებულ კურორტს, რა კოორდინატები აქვს კუნძულს და რომელი მიმართულებით იყო კამერა მიმართული. ავტორმა 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 კმ-იან რადიუსში 10-ზე მეტი მეზობელია — დარჩა 51 576. მესამე ფილტრმა მხოლოდ ის წერტილები შეინარჩუნა, რომლებსაც 20 კმ-ში მინიმუმ ორი მეზობელი ჰყავთ — 23 500 კლასტერი. თითოეული კლასტერიდან სამეულების გენერაციამ სულ 80 690 777 სამეული მისცა.
GPU-ზე შემოწმება და საბოლოო ფილტრები
ყოველ სამეულს ერთი CUDA ნაკადი დაეთმო: ნაკადი წერტილებს ფართობის მიხედვით ალაგებდა, ჯვარედინი ნამრავლის ნიშნით განსაზღვრავდა P1-სა და P2-ს, შემდეგ კი ამოწმებდა კუთხეს, გვერდების თანაფარდობასა და ზომებს. NVIDIA GeForce RTX 3050-ზე (sm_86) 5 169 მბ ვიდეომეხსიერების გამოყენებით kernel-მა 204.1 მილიწამში იმუშავა; შემოწმება 158 784 სამეულმა გაიარა და დუბლიკატების მოცილების შემდეგ 8 915 დარჩა. შემდეგ მოჰყვა „ღია სწორკუთხედის" შემოწმება (948 კანდიდატი), მარჯანის კუნძულის ფორმის შემოწმება კომპაქტურობის (Polsby-Popper) ინდექსით — 213, ოვალურობის შემოწმება — 137, მცენარეულობის NDVI ინდექსი Sentinel-2-ის თანამგზავრული სურათებით Element84-ის Earth Search API-დან — 66 და სიმაღლის შემოწმება Copernicus DEM GLO-30-ის რელიეფის მონაცემებით, სადაც P0 უნდა იყოს 50 მეტრზე დაბალი, ხოლო ხედვის რკალზე მაქსიმალური სიმაღლე 100–500 მეტრის შუალედში — დარჩა 26 კანდიდატი.
პასუხი
საბოლოო სიაში მერვე ჩანაწერი, რომელიც მიკრონეზიის ფედერაციულ შტატებს მიეკუთვნება, აღმოჩნდა სწორედ ფოტოზე გადაღებული ადგილი. კურორტის სახელია Oan, კუნძულის კოორდინატები — 7°21′48.4″ ჩრდილოეთი განედი და 151°45′20.7″ აღმოსავლეთი გრძედი (7.363444, 151.755750), ხოლო კამერა ჩრდილო-დასავლეთისკენ იყო მიმართული (დაახლოებით 324.97°). კოდი და საბოლოო ანგარიში GitHub-ზეა გამოქვეყნებული.
SiTech — AI-გაძლიერებული ვებ დეველოპმენტი
ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.