Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -5,8 +5,6 @@ from transformers import CLIPProcessor, CLIPModel
|
|
| 5 |
import pygeohash as pgh
|
| 6 |
import plotly.graph_objects as go
|
| 7 |
import torch.nn as nn
|
| 8 |
-
import reverse_geocoder as rg
|
| 9 |
-
import pycountry # for full country names
|
| 10 |
|
| 11 |
EXPORT_DIR = "."
|
| 12 |
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
|
|
@@ -54,16 +52,6 @@ def haversine(lat1, lon1, lat2, lon2):
|
|
| 54 |
a = np.sin(dphi/2)**2 + np.cos(phi1)*np.cos(phi2)*np.sin(dlambda/2)**2
|
| 55 |
return 2*R*np.arctan2(np.sqrt(a), np.sqrt(1-a))
|
| 56 |
|
| 57 |
-
# ---------------- Country lookup ----------------
|
| 58 |
-
def latlon_to_country(lat, lon):
|
| 59 |
-
try:
|
| 60 |
-
res = rg.search((lat, lon))[0]
|
| 61 |
-
cc = res['cc']
|
| 62 |
-
country = pycountry.countries.get(alpha_2=cc)
|
| 63 |
-
return country.name if country else cc, cc
|
| 64 |
-
except:
|
| 65 |
-
return "Unknown", "??"
|
| 66 |
-
|
| 67 |
# ---------------- Prediction + Map ----------------
|
| 68 |
def predict_geohash_map(img: Image.Image, true_lat=None, true_lon=None, top_k=5):
|
| 69 |
c_in = clip_processor(images=img, return_tensors="pt").to(DEVICE)
|
|
@@ -78,8 +66,8 @@ def predict_geohash_map(img: Image.Image, true_lat=None, true_lon=None, top_k=5)
|
|
| 78 |
lats, lons = [], []
|
| 79 |
|
| 80 |
# Markdown table header
|
| 81 |
-
preds_text = ["| Rank |
|
| 82 |
-
"
|
| 83 |
|
| 84 |
for rank, i in enumerate(topk_idx, 1):
|
| 85 |
geoh = id2geoh[i]
|
|
@@ -87,8 +75,6 @@ def predict_geohash_map(img: Image.Image, true_lat=None, true_lon=None, top_k=5)
|
|
| 87 |
lat_pred = lat_base + out_offset_np[0] * cell_lat
|
| 88 |
lon_pred = lon_base + out_offset_np[1] * cell_lon
|
| 89 |
|
| 90 |
-
country_name, country_code = latlon_to_country(lat_pred, lon_pred)
|
| 91 |
-
|
| 92 |
dist_str = ""
|
| 93 |
if true_lat is not None and true_lon is not None:
|
| 94 |
dist = haversine(true_lat, true_lon, lat_pred, lon_pred)
|
|
@@ -100,7 +86,7 @@ def predict_geohash_map(img: Image.Image, true_lat=None, true_lon=None, top_k=5)
|
|
| 100 |
dist_str = f"🔴 {dist:.1f} km"
|
| 101 |
|
| 102 |
preds_text.append(
|
| 103 |
-
f"| {rank} | {
|
| 104 |
)
|
| 105 |
|
| 106 |
lats.append(lat_pred)
|
|
|
|
| 5 |
import pygeohash as pgh
|
| 6 |
import plotly.graph_objects as go
|
| 7 |
import torch.nn as nn
|
|
|
|
|
|
|
| 8 |
|
| 9 |
EXPORT_DIR = "."
|
| 10 |
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
|
|
|
|
| 52 |
a = np.sin(dphi/2)**2 + np.cos(phi1)*np.cos(phi2)*np.sin(dlambda/2)**2
|
| 53 |
return 2*R*np.arctan2(np.sqrt(a), np.sqrt(1-a))
|
| 54 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 55 |
# ---------------- Prediction + Map ----------------
|
| 56 |
def predict_geohash_map(img: Image.Image, true_lat=None, true_lon=None, top_k=5):
|
| 57 |
c_in = clip_processor(images=img, return_tensors="pt").to(DEVICE)
|
|
|
|
| 66 |
lats, lons = [], []
|
| 67 |
|
| 68 |
# Markdown table header
|
| 69 |
+
preds_text = ["| Rank | Latitude | Longitude | Distance |",
|
| 70 |
+
"|------|----------|-----------|----------|"]
|
| 71 |
|
| 72 |
for rank, i in enumerate(topk_idx, 1):
|
| 73 |
geoh = id2geoh[i]
|
|
|
|
| 75 |
lat_pred = lat_base + out_offset_np[0] * cell_lat
|
| 76 |
lon_pred = lon_base + out_offset_np[1] * cell_lon
|
| 77 |
|
|
|
|
|
|
|
| 78 |
dist_str = ""
|
| 79 |
if true_lat is not None and true_lon is not None:
|
| 80 |
dist = haversine(true_lat, true_lon, lat_pred, lon_pred)
|
|
|
|
| 86 |
dist_str = f"🔴 {dist:.1f} km"
|
| 87 |
|
| 88 |
preds_text.append(
|
| 89 |
+
f"| {rank} | {lat_pred:.5f} | {lon_pred:.5f} | {dist_str} |"
|
| 90 |
)
|
| 91 |
|
| 92 |
lats.append(lat_pred)
|