Spaces:
Running
Running
export options, product manager mindset..
Browse files- backend/visualize.py +17 -5
- frontend/initial.html +7 -12
- frontend/vehicles.html +69 -41
backend/visualize.py
CHANGED
|
@@ -169,7 +169,7 @@ def export_csv(raw_events, out_dir):
|
|
| 169 |
writer.writerows(raw_events)
|
| 170 |
return "raw_data.csv"
|
| 171 |
|
| 172 |
-
def spatial_heatmap(heatmap_points, video_path, out_dir):
|
| 173 |
if not heatmap_points or not video_path or not os.path.exists(video_path):
|
| 174 |
return None
|
| 175 |
|
|
@@ -200,9 +200,21 @@ def spatial_heatmap(heatmap_points, video_path, out_dir):
|
|
| 200 |
overlay = frame.copy()
|
| 201 |
overlay[mask] = cv2.addWeighted(frame[mask], 0.3, heatmap[mask], 0.7, 0).squeeze()
|
| 202 |
|
| 203 |
-
|
| 204 |
-
|
| 205 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 206 |
|
| 207 |
|
| 208 |
def generate_all(data, model_classes, out_dir, report_format="png"):
|
|
@@ -230,7 +242,7 @@ def generate_all(data, model_classes, out_dir, report_format="png"):
|
|
| 230 |
lambda: congestion_chart(data.get("congestion", []), out_dir, fmt),
|
| 231 |
lambda: class_dominance(data["class_in"], data["class_out"], model_classes, out_dir, fmt),
|
| 232 |
lambda: confidence_dist(data.get("conf_scores", []), out_dir, fmt),
|
| 233 |
-
lambda: spatial_heatmap(heatmap_points, video_path, out_dir),
|
| 234 |
lambda: export_csv(raw_events, out_dir),
|
| 235 |
]:
|
| 236 |
name = fn()
|
|
|
|
| 169 |
writer.writerows(raw_events)
|
| 170 |
return "raw_data.csv"
|
| 171 |
|
| 172 |
+
def spatial_heatmap(heatmap_points, video_path, out_dir, fmt="png"):
|
| 173 |
if not heatmap_points or not video_path or not os.path.exists(video_path):
|
| 174 |
return None
|
| 175 |
|
|
|
|
| 200 |
overlay = frame.copy()
|
| 201 |
overlay[mask] = cv2.addWeighted(frame[mask], 0.3, heatmap[mask], 0.7, 0).squeeze()
|
| 202 |
|
| 203 |
+
if fmt == "pdf":
|
| 204 |
+
# Wrap OpenCV image in matplotlib for PDF export
|
| 205 |
+
overlay_rgb = cv2.cvtColor(overlay, cv2.COLOR_BGR2RGB)
|
| 206 |
+
fig, ax = plt.subplots(figsize=(10, 6), facecolor=C_BG)
|
| 207 |
+
ax.imshow(overlay_rgb)
|
| 208 |
+
ax.set_title("Spatial Density Heatmap", fontsize=13, fontweight="700", color=C_PRIMARY, pad=14)
|
| 209 |
+
ax.axis('off')
|
| 210 |
+
path = os.path.join(out_dir, "heatmap.pdf")
|
| 211 |
+
fig.savefig(path, dpi=200, bbox_inches="tight", facecolor=C_BG, edgecolor="none")
|
| 212 |
+
plt.close(fig)
|
| 213 |
+
return "heatmap.pdf"
|
| 214 |
+
else:
|
| 215 |
+
path = os.path.join(out_dir, "heatmap.png")
|
| 216 |
+
cv2.imwrite(path, overlay)
|
| 217 |
+
return "heatmap.png"
|
| 218 |
|
| 219 |
|
| 220 |
def generate_all(data, model_classes, out_dir, report_format="png"):
|
|
|
|
| 242 |
lambda: congestion_chart(data.get("congestion", []), out_dir, fmt),
|
| 243 |
lambda: class_dominance(data["class_in"], data["class_out"], model_classes, out_dir, fmt),
|
| 244 |
lambda: confidence_dist(data.get("conf_scores", []), out_dir, fmt),
|
| 245 |
+
lambda: spatial_heatmap(heatmap_points, video_path, out_dir, fmt),
|
| 246 |
lambda: export_csv(raw_events, out_dir),
|
| 247 |
]:
|
| 248 |
name = fn()
|
frontend/initial.html
CHANGED
|
@@ -98,20 +98,15 @@
|
|
| 98 |
Automated <br>Vision Intelligence
|
| 99 |
</h1>
|
| 100 |
<p class="font-bold mb-8 text-sm uppercase tracking-[0.2em] flex items-center" style="color:#a89f97">
|
| 101 |
-
<span class="core-badge px-3 py-1 rounded-full text-[10px] mr-3">
|
| 102 |
-
|
| 103 |
</p>
|
| 104 |
<ul class="space-y-4 xl:space-y-5 text-base xl:text-lg font-medium" style="color:#a89f97">
|
| 105 |
-
<li class="flex items-center"><i class="fa-solid fa-check mr-5 text-xl" style="color:#c89a6c"></i>
|
| 106 |
-
|
| 107 |
-
<li class="flex items-center"><i class="fa-solid fa-check mr-5 text-xl" style="color:#c89a6c"></i>
|
| 108 |
-
|
| 109 |
-
<li class="flex items-center"><i class="fa-solid fa-check mr-5 text-xl" style="color:#c89a6c"></i>
|
| 110 |
-
movement analysis</li>
|
| 111 |
-
<li class="flex items-center"><i class="fa-solid fa-check mr-5 text-xl" style="color:#c89a6c"></i> High-performance
|
| 112 |
-
multi-object tracking</li>
|
| 113 |
-
<li class="flex items-center"><i class="fa-solid fa-check mr-5 text-xl" style="color:#c89a6c"></i> Intelligent
|
| 114 |
-
processing optimization</li>
|
| 115 |
</ul>
|
| 116 |
</div>
|
| 117 |
|
|
|
|
| 98 |
Automated <br>Vision Intelligence
|
| 99 |
</h1>
|
| 100 |
<p class="font-bold mb-8 text-sm uppercase tracking-[0.2em] flex items-center" style="color:#a89f97">
|
| 101 |
+
<span class="core-badge px-3 py-1 rounded-full text-[10px] mr-3">DEMO</span>
|
| 102 |
+
Cloud-Native Traffic Intelligence
|
| 103 |
</p>
|
| 104 |
<ul class="space-y-4 xl:space-y-5 text-base xl:text-lg font-medium" style="color:#a89f97">
|
| 105 |
+
<li class="flex items-center"><i class="fa-solid fa-check mr-5 text-xl" style="color:#c89a6c"></i> No new hardware — works with your existing cameras</li>
|
| 106 |
+
<li class="flex items-center"><i class="fa-solid fa-check mr-5 text-xl" style="color:#c89a6c"></i> Granular vehicle counts across 14 Indian road classes</li>
|
| 107 |
+
<li class="flex items-center"><i class="fa-solid fa-check mr-5 text-xl" style="color:#c89a6c"></i> Directional flow & congestion insights in minutes</li>
|
| 108 |
+
<li class="flex items-center"><i class="fa-solid fa-check mr-5 text-xl" style="color:#c89a6c"></i> Downloadable reports ready for planning & compliance</li>
|
| 109 |
+
<li class="flex items-center"><i class="fa-solid fa-check mr-5 text-xl" style="color:#c89a6c"></i> Built for Indian roads — tested on real field conditions</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 110 |
</ul>
|
| 111 |
</div>
|
| 112 |
|
frontend/vehicles.html
CHANGED
|
@@ -363,10 +363,10 @@
|
|
| 363 |
|
| 364 |
<!-- TAB: About -->
|
| 365 |
<div id="tab-about" class="hidden flex-1 min-h-0 overflow-y-auto">
|
| 366 |
-
<div class="bg-black border border-slate-800 rounded-xl p-12 shadow-2xl space-y-
|
|
|
|
| 367 |
<div class="text-center">
|
| 368 |
-
<p class="text-
|
| 369 |
-
style="color:#a89f97">
|
| 370 |
“Traffic data has always existed on Indian roads — in the movement of every vehicle,
|
| 371 |
every crossing, every congested junction.
|
| 372 |
UrbanFlow is built to read that data precisely, and return it in a form that practitioners can
|
|
@@ -374,37 +374,43 @@
|
|
| 374 |
</p>
|
| 375 |
</div>
|
| 376 |
|
| 377 |
-
<div class="space-y-
|
| 378 |
<p>
|
| 379 |
-
UrbanFlow is a
|
| 380 |
-
|
| 381 |
-
|
| 382 |
-
or on-site installation.
|
| 383 |
</p>
|
| 384 |
<p>
|
| 385 |
-
|
| 386 |
-
and
|
| 387 |
-
|
|
|
|
| 388 |
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 389 |
<div class="grid grid-cols-3 gap-8 pt-8 text-left border-t border-slate-900 max-w-5xl mx-auto">
|
| 390 |
<div class="space-y-4">
|
| 391 |
-
<h4 class="font-bold text-[13px] uppercase tracking-wider" style="color:#f0ece6">What
|
| 392 |
<ul class="text-xs space-y-3 pl-1">
|
| 393 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 394 |
style="color:#c89a6c"></i>
|
| 395 |
-
<span>
|
| 396 |
</li>
|
| 397 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 398 |
style="color:#c89a6c"></i>
|
| 399 |
-
<span>
|
| 400 |
</li>
|
| 401 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 402 |
style="color:#c89a6c"></i>
|
| 403 |
-
<span>
|
| 404 |
</li>
|
| 405 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 406 |
style="color:#c89a6c"></i>
|
| 407 |
-
<span>
|
| 408 |
</li>
|
| 409 |
</ul>
|
| 410 |
</div>
|
|
@@ -413,44 +419,54 @@
|
|
| 413 |
<ul class="text-xs space-y-3 pl-1">
|
| 414 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 415 |
style="color:#c89a6c"></i>
|
| 416 |
-
<span>Upload footage from any existing camera
|
| 417 |
</li>
|
| 418 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 419 |
style="color:#c89a6c"></i>
|
| 420 |
-
<span>
|
| 421 |
</li>
|
| 422 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 423 |
style="color:#c89a6c"></i>
|
| 424 |
-
<span>Inference runs in the cloud — no
|
| 425 |
</li>
|
| 426 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 427 |
style="color:#c89a6c"></i>
|
| 428 |
-
<span>
|
| 429 |
</li>
|
| 430 |
</ul>
|
| 431 |
</div>
|
| 432 |
<div class="space-y-4">
|
| 433 |
-
<h4 class="font-bold text-[13px] uppercase tracking-wider" style="color:#f0ece6">
|
| 434 |
<ul class="text-xs space-y-3 pl-1" style="color:#a89f97">
|
| 435 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 436 |
style="color:#8b5e3c"></i>
|
| 437 |
-
<span>
|
| 438 |
</li>
|
| 439 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 440 |
style="color:#8b5e3c"></i>
|
| 441 |
-
<span>
|
| 442 |
</li>
|
| 443 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 444 |
style="color:#8b5e3c"></i>
|
| 445 |
-
<span>
|
| 446 |
</li>
|
| 447 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 448 |
style="color:#8b5e3c"></i>
|
| 449 |
-
<span>
|
| 450 |
</li>
|
| 451 |
</ul>
|
| 452 |
</div>
|
| 453 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 454 |
</div>
|
| 455 |
</div>
|
| 456 |
</div>
|
|
@@ -1491,6 +1507,15 @@
|
|
| 1491 |
document.getElementById('proc-label').innerText = 'Complete';
|
| 1492 |
document.getElementById('proc-bar').style.width = '100%';
|
| 1493 |
document.getElementById('proc-pct').innerText = '100%';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1494 |
|
| 1495 |
// Update Run Tab Badge
|
| 1496 |
const badge = document.getElementById('results-status-badge');
|
|
@@ -1570,6 +1595,7 @@
|
|
| 1570 |
'confidence_dist.pdf': { title: 'Confidence Curve', desc: 'Distribution of detection confidences' },
|
| 1571 |
'annotated.mp4': { title: 'Annotated Video Export', desc: 'Rendered video with tracking overlays' },
|
| 1572 |
'heatmap.png': { title: 'Spatial Density Heatmap', desc: 'Aggregated path utilization mapping' },
|
|
|
|
| 1573 |
'raw_data.csv': { title: 'Raw Analytics Export', desc: 'Comma-separated values of all crossings' }
|
| 1574 |
};
|
| 1575 |
|
|
@@ -1672,13 +1698,13 @@
|
|
| 1672 |
<h2 style="color:#f0ece6;font-size:1.1rem;font-weight:700;margin-bottom:8px">Privacy Policy</h2>
|
| 1673 |
<p style="color:#a89f97;font-size:11px;margin-bottom:20px">We keep this simple and honest.</p>
|
| 1674 |
<ul style="color:#a89f97;font-size:11px;line-height:1.9;padding-left:16px;list-style:disc">
|
| 1675 |
-
<li>
|
| 1676 |
-
|
| 1677 |
-
<li>We do not use your footage to train models, sell it, or share it with
|
| 1678 |
-
<li>
|
| 1679 |
-
|
| 1680 |
-
<li>
|
| 1681 |
-
<li>For any queries
|
| 1682 |
</ul>
|
| 1683 |
<p style="color:#555;font-size:10px;margin-top:20px">— Team UrbanFlow</p>
|
| 1684 |
</div>
|
|
@@ -1692,24 +1718,26 @@
|
|
| 1692 |
<button onclick="closeAppModal('termsModal')"
|
| 1693 |
style="position:absolute;top:16px;right:18px;background:none;border:none;color:#a89f97;font-size:18px;cursor:pointer">×</button>
|
| 1694 |
<h2 style="color:#f0ece6;font-size:1.1rem;font-weight:700;margin-bottom:8px">Terms & Conditions</h2>
|
| 1695 |
-
<p style="color:#a89f97;font-size:11px;margin-bottom:20px">By using this platform, you agree to the
|
| 1696 |
following terms.</p>
|
| 1697 |
<p style="color:#c89a6c;font-size:11px;font-weight:700;margin-bottom:6px">You can:</p>
|
| 1698 |
<ul
|
| 1699 |
style="color:#a89f97;font-size:11px;line-height:1.9;padding-left:16px;list-style:disc;margin-bottom:16px">
|
| 1700 |
-
<li>Use
|
| 1701 |
-
<li>Export annotated video outputs to your own device
|
| 1702 |
-
<li>
|
|
|
|
| 1703 |
</ul>
|
| 1704 |
<p style="color:#c89a6c;font-size:11px;font-weight:700;margin-bottom:6px">You cannot:</p>
|
| 1705 |
<ul
|
| 1706 |
style="color:#a89f97;font-size:11px;line-height:1.9;padding-left:16px;list-style:disc;margin-bottom:16px">
|
| 1707 |
-
<li>
|
| 1708 |
-
<li>Reverse-engineer
|
| 1709 |
-
<li>Use the platform for unlawful or
|
|
|
|
| 1710 |
</ul>
|
| 1711 |
-
<p style="color:#a89f97;font-size:11px">
|
| 1712 |
-
Outputs are not intended for operational or safety-critical use.</p>
|
| 1713 |
<p style="color:#555;font-size:10px;margin-top:16px">Questions: <strong
|
| 1714 |
style="color:#c89a6c">support@urbanflow.in</strong></p>
|
| 1715 |
</div>
|
|
|
|
| 363 |
|
| 364 |
<!-- TAB: About -->
|
| 365 |
<div id="tab-about" class="hidden flex-1 min-h-0 overflow-y-auto">
|
| 366 |
+
<div class="bg-black border border-slate-800 rounded-xl p-12 shadow-2xl space-y-8 min-h-full flex flex-col justify-center">
|
| 367 |
+
<div class="max-w-5xl mx-auto bg-white rounded-xl border border-slate-200 shadow-sm p-10 space-y-8">
|
| 368 |
<div class="text-center">
|
| 369 |
+
<p class="text-sm italic font-bold leading-relaxed max-w-3xl mx-auto" style="color:#c89a6c;font-family:'Montserrat',sans-serif">
|
|
|
|
| 370 |
“Traffic data has always existed on Indian roads — in the movement of every vehicle,
|
| 371 |
every crossing, every congested junction.
|
| 372 |
UrbanFlow is built to read that data precisely, and return it in a form that practitioners can
|
|
|
|
| 374 |
</p>
|
| 375 |
</div>
|
| 376 |
|
| 377 |
+
<div class="space-y-5 leading-relaxed text-sm text-center" style="color:#a89f97">
|
| 378 |
<p>
|
| 379 |
+
UrbanFlow is a cloud-based traffic intelligence platform that turns raw camera footage from Indian roads
|
| 380 |
+
into structured, actionable data — vehicle counts by class, directional flow totals, congestion patterns,
|
| 381 |
+
and downloadable reports — without requiring new hardware or on-site installation.
|
|
|
|
| 382 |
</p>
|
| 383 |
<p>
|
| 384 |
+
This is a <strong style="color:#f0ece6">public demo</strong>. It exists so that traffic engineers, urban planners,
|
| 385 |
+
transport authorities, and researchers can evaluate what UrbanFlow delivers — and tell us what they actually need.
|
| 386 |
+
We are in the <strong style="color:#f0ece6">requirements gathering phase</strong>, and your feedback directly shapes
|
| 387 |
+
what gets built for production.
|
| 388 |
</p>
|
| 389 |
+
<p style="font-size:11px;color:#666">
|
| 390 |
+
The production system will support RTSP live-stream input, institutional dashboards, REST APIs, and advanced analytics.
|
| 391 |
+
This demo serves video upload only.
|
| 392 |
+
</p>
|
| 393 |
+
</div>
|
| 394 |
+
|
| 395 |
<div class="grid grid-cols-3 gap-8 pt-8 text-left border-t border-slate-900 max-w-5xl mx-auto">
|
| 396 |
<div class="space-y-4">
|
| 397 |
+
<h4 class="font-bold text-[13px] uppercase tracking-wider" style="color:#f0ece6">What You Get</h4>
|
| 398 |
<ul class="text-xs space-y-3 pl-1">
|
| 399 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 400 |
style="color:#c89a6c"></i>
|
| 401 |
+
<span>Class-wise vehicle counts across 14 Indian road categories</span>
|
| 402 |
</li>
|
| 403 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 404 |
style="color:#c89a6c"></i>
|
| 405 |
+
<span>Directional flow analysis — incoming vs outgoing at any boundary</span>
|
| 406 |
</li>
|
| 407 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 408 |
style="color:#c89a6c"></i>
|
| 409 |
+
<span>Congestion trends, peak detection, and temporal flow charts</span>
|
| 410 |
</li>
|
| 411 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 412 |
style="color:#c89a6c"></i>
|
| 413 |
+
<span>Downloadable reports (PDF/PNG) and annotated video exports</span>
|
| 414 |
</li>
|
| 415 |
</ul>
|
| 416 |
</div>
|
|
|
|
| 419 |
<ul class="text-xs space-y-3 pl-1">
|
| 420 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 421 |
style="color:#c89a6c"></i>
|
| 422 |
+
<span>Upload footage from any existing camera — phone, CCTV, dashcam</span>
|
| 423 |
</li>
|
| 424 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 425 |
style="color:#c89a6c"></i>
|
| 426 |
+
<span>Draw a counting boundary on the first frame</span>
|
| 427 |
</li>
|
| 428 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 429 |
style="color:#c89a6c"></i>
|
| 430 |
+
<span>Inference runs in the cloud — no local GPU or setup needed</span>
|
| 431 |
</li>
|
| 432 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 433 |
style="color:#c89a6c"></i>
|
| 434 |
+
<span>Review live KPIs and download bundled artifacts when complete</span>
|
| 435 |
</li>
|
| 436 |
</ul>
|
| 437 |
</div>
|
| 438 |
<div class="space-y-4">
|
| 439 |
+
<h4 class="font-bold text-[13px] uppercase tracking-wider" style="color:#f0ece6">What's Coming</h4>
|
| 440 |
<ul class="text-xs space-y-3 pl-1" style="color:#a89f97">
|
| 441 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 442 |
style="color:#8b5e3c"></i>
|
| 443 |
+
<span>RTSP live-stream support — connect directly to IP cameras</span>
|
| 444 |
</li>
|
| 445 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 446 |
style="color:#8b5e3c"></i>
|
| 447 |
+
<span>REST API for integration with city ATCC and ITS platforms</span>
|
| 448 |
</li>
|
| 449 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 450 |
style="color:#8b5e3c"></i>
|
| 451 |
+
<span>Advanced analytics — speed estimation, helmet compliance, illegal parking</span>
|
| 452 |
</li>
|
| 453 |
<li class="flex items-start gap-3"><i class="fa-solid fa-circle text-[5px] mt-1.5"
|
| 454 |
style="color:#8b5e3c"></i>
|
| 455 |
+
<span>Institutional deployment with dedicated SLAs and onboarding</span>
|
| 456 |
</li>
|
| 457 |
</ul>
|
| 458 |
</div>
|
| 459 |
</div>
|
| 460 |
+
|
| 461 |
+
<div class="text-center pt-6 border-t border-slate-900">
|
| 462 |
+
<p class="text-[11px]" style="color:#666">
|
| 463 |
+
We are an applied research team — using state-of-the-art detection models, fine-tuned on Indian traffic datasets,
|
| 464 |
+
to build systems that work in production. Not a black box. Not a benchmark demo. A working tool, built for real roads.
|
| 465 |
+
</p>
|
| 466 |
+
<p class="text-[10px] mt-3" style="color:#555">
|
| 467 |
+
Feedback, collaboration, or questions: <strong style="color:#c89a6c">support@urbanflow.in</strong>
|
| 468 |
+
</p>
|
| 469 |
+
</div>
|
| 470 |
</div>
|
| 471 |
</div>
|
| 472 |
</div>
|
|
|
|
| 1507 |
document.getElementById('proc-label').innerText = 'Complete';
|
| 1508 |
document.getElementById('proc-bar').style.width = '100%';
|
| 1509 |
document.getElementById('proc-pct').innerText = '100%';
|
| 1510 |
+
// Force frame counter to n/n
|
| 1511 |
+
const framesEl = document.getElementById('proc-frames');
|
| 1512 |
+
if (framesEl) {
|
| 1513 |
+
const parts = framesEl.innerText.split('/');
|
| 1514 |
+
if (parts.length === 2) {
|
| 1515 |
+
const total = parts[1].trim().replace(' Frames', '');
|
| 1516 |
+
framesEl.innerText = `${total} / ${total} Frames`;
|
| 1517 |
+
}
|
| 1518 |
+
}
|
| 1519 |
|
| 1520 |
// Update Run Tab Badge
|
| 1521 |
const badge = document.getElementById('results-status-badge');
|
|
|
|
| 1595 |
'confidence_dist.pdf': { title: 'Confidence Curve', desc: 'Distribution of detection confidences' },
|
| 1596 |
'annotated.mp4': { title: 'Annotated Video Export', desc: 'Rendered video with tracking overlays' },
|
| 1597 |
'heatmap.png': { title: 'Spatial Density Heatmap', desc: 'Aggregated path utilization mapping' },
|
| 1598 |
+
'heatmap.pdf': { title: 'Spatial Density Heatmap', desc: 'Aggregated path utilization mapping' },
|
| 1599 |
'raw_data.csv': { title: 'Raw Analytics Export', desc: 'Comma-separated values of all crossings' }
|
| 1600 |
};
|
| 1601 |
|
|
|
|
| 1698 |
<h2 style="color:#f0ece6;font-size:1.1rem;font-weight:700;margin-bottom:8px">Privacy Policy</h2>
|
| 1699 |
<p style="color:#a89f97;font-size:11px;margin-bottom:20px">We keep this simple and honest.</p>
|
| 1700 |
<ul style="color:#a89f97;font-size:11px;line-height:1.9;padding-left:16px;list-style:disc">
|
| 1701 |
+
<li>This is a <strong style="color:#f0ece6">public demo</strong> hosted on Hugging Face Spaces. It is not a production service.</li>
|
| 1702 |
+
<li>Footage you submit is processed in real time and <strong style="color:#f0ece6">discarded immediately</strong> after the session ends. Nothing is stored on our servers.</li>
|
| 1703 |
+
<li>We do not use your footage to train models, sell it, or share it with any third party.</li>
|
| 1704 |
+
<li>Reports and annotated videos are generated temporarily and delivered to your device. We do not retain copies.</li>
|
| 1705 |
+
<li>We do not use advertising cookies, behavioral tracking, or analytics scripts on this platform.</li>
|
| 1706 |
+
<li>Your use of this demo may inform product requirements. No personally identifiable data is collected in that process.</li>
|
| 1707 |
+
<li>For any queries: <strong style="color:#c89a6c">support@urbanflow.in</strong></li>
|
| 1708 |
</ul>
|
| 1709 |
<p style="color:#555;font-size:10px;margin-top:20px">— Team UrbanFlow</p>
|
| 1710 |
</div>
|
|
|
|
| 1718 |
<button onclick="closeAppModal('termsModal')"
|
| 1719 |
style="position:absolute;top:16px;right:18px;background:none;border:none;color:#a89f97;font-size:18px;cursor:pointer">×</button>
|
| 1720 |
<h2 style="color:#f0ece6;font-size:1.1rem;font-weight:700;margin-bottom:8px">Terms & Conditions</h2>
|
| 1721 |
+
<p style="color:#a89f97;font-size:11px;margin-bottom:20px">By using this demo platform, you agree to the
|
| 1722 |
following terms.</p>
|
| 1723 |
<p style="color:#c89a6c;font-size:11px;font-weight:700;margin-bottom:6px">You can:</p>
|
| 1724 |
<ul
|
| 1725 |
style="color:#a89f97;font-size:11px;line-height:1.9;padding-left:16px;list-style:disc;margin-bottom:16px">
|
| 1726 |
+
<li>Use this demo to evaluate UrbanFlow’s traffic detection and analytics capabilities.</li>
|
| 1727 |
+
<li>Export reports, annotated video outputs, and data artifacts to your own device.</li>
|
| 1728 |
+
<li>Share feedback, feature requests, or questions with us at <strong style="color:#c89a6c">support@urbanflow.in</strong>.</li>
|
| 1729 |
+
<li>Reference this demo in research or internal evaluation, with proper attribution.</li>
|
| 1730 |
</ul>
|
| 1731 |
<p style="color:#c89a6c;font-size:11px;font-weight:700;margin-bottom:6px">You cannot:</p>
|
| 1732 |
<ul
|
| 1733 |
style="color:#a89f97;font-size:11px;line-height:1.9;padding-left:16px;list-style:disc;margin-bottom:16px">
|
| 1734 |
+
<li>Commercially redistribute outputs or present them as your own product’s capability.</li>
|
| 1735 |
+
<li>Reverse-engineer, extract, or attempt to replicate the underlying model or processing pipeline.</li>
|
| 1736 |
+
<li>Use the platform for unlawful, harmful, or safety-critical operational purposes.</li>
|
| 1737 |
+
<li>Misrepresent demo outputs as certified or regulatory-grade traffic data.</li>
|
| 1738 |
</ul>
|
| 1739 |
+
<p style="color:#a89f97;font-size:11px">This platform is provided as-is for <strong style="color:#f0ece6">demonstration and evaluation purposes only</strong>.
|
| 1740 |
+
Outputs are not intended for operational, regulatory, or safety-critical use. This is an early-stage research project, not a commercial product.</p>
|
| 1741 |
<p style="color:#555;font-size:10px;margin-top:16px">Questions: <strong
|
| 1742 |
style="color:#c89a6c">support@urbanflow.in</strong></p>
|
| 1743 |
</div>
|