Home
Softono
-purplle_hackathon

-purplle_hackathon

Open source HTML
12
Stars
0
Forks
0
Issues
0
Watchers
1 week
Last Commit

About -purplle_hackathon

AI-powered retail intelligence platform that converts CCTV footage into footfall analytics, heatmaps, queue intelligence, conversion funnels, anomaly detection, and sales insights using YOLOv8, ByteTrack, FastAPI, and Docker.

Platforms

Web Self-hosted Docker

Languages

HTML

Links

Purplle Intelligence - Hackathon Submission

Python FastAPI Docker YOLOv8 License

End-to-end retail store intelligence from CCTV footage: person detection, multi-object tracking, zone analytics, queue intelligence, anomaly detection, sales correlation, production APIs, and a live dashboard.

Live demo: https://vercel-dashboard-eta-sand.vercel.app

Repository name: -purplle_hackathon

Built for the Purplle Tech Challenge 2026 Round 2.

Important: raw hackathon videos and large generated media are intentionally not committed. Demo JSON/JSONL analytics are tracked so evaluators can run the API and dashboard immediately.

What This Solves

Purplle store teams need visibility into what happens between a customer entering a store and completing a purchase. This project converts CCTV footage into structured analytics:

  • How many visitors entered each store.
  • Which shelves or zones attracted attention.
  • Where customers spent the most time.
  • How crowded each zone became.
  • How many customers reached billing.
  • How many customers abandoned the queue.
  • How sales correlate with store traffic and hourly behavior.
  • Which operational anomalies require action.

Core Features

  • YOLOv8 person detection.
  • ByteTrack multi-object tracking.
  • Polygon-based zone assignment per camera.
  • Entry, exit, zone enter, zone exit, queue completed, and queue abandoned event generation.
  • JSONL event log suitable for replay and streaming.
  • Store-level analytics for 2 stores and 8 cameras.
  • Dwell time, unique visitor, peak occupancy, and heatmap metrics.
  • Queue wait-time and abandonment analytics.
  • Conversion funnel: Store Entry -> Zone Browsing -> Billing Queue -> Purchase.
  • Demo-mode demographics endpoint for aggregate gender and age buckets.
  • Sales analytics with POS fallback.
  • Anomaly detection for high crowd density, high dwell, dead zones, and queue abandonment.
  • FastAPI REST API with Pydantic response models.
  • Pagination and filtering for events.
  • Server-sent event replay stream.
  • Swagger API docs at /docs.
  • Live dashboard with KPI cards, charts, heatmaps, video panels, anomalies, and event feed.
  • Docker and Docker Compose support.
  • Unit tests for the main API endpoints.

Evaluation Criteria Coverage

Requirement Status Implementation
Containerized solution Done Dockerfile, docker-compose.yml
Runs out of the box Done Docker build generates demo data automatically
Schema-validated events Done Pydantic response models in server.py
REST API Done FastAPI endpoints under /api/v1
Dashboard Done dashboard.html
Event streaming Done /api/v1/events/stream SSE replay
Conversion funnel Done /api/v1/store/{store_id}/funnel
Queue analytics Done /api/v1/store/{store_id}/queue
Anomaly detection Done /api/v1/anomalies
Sales correlation Done sales_analytics.json and sales APIs
Documentation Done README.md, ARCHITECTURE.md, SUBMISSION.md
Tests Done test_server.py

Architecture

CCTV videos
    |
    v
YOLOv8 person detection
    |
    v
ByteTrack tracking
    |
    v
Zone polygon analytics
    |
    +--> JSONL event log
    +--> Store analytics JSON
    +--> Sales analytics JSON
    +--> Anomaly JSON
    |
    v
FastAPI REST + SSE
    |
    v
Dashboard + Swagger docs

See ARCHITECTURE.md for design trade-offs, event schema details, privacy notes, and production upgrade paths.

Project Structure

config.py                       Store, camera, and zone polygon configuration
process_videos.py               YOLOv8 + ByteTrack video processing pipeline
generate_demo_data.py           Synthetic data generator for instant demo mode
server.py                       FastAPI app, API models, routes, dashboard serving, SSE
dashboard.html                  Live local dashboard served by FastAPI
build_static_dashboard.py       Builds static Vercel dashboard package
test_server.py                  API unit tests
Dockerfile                      Multi-stage production container
docker-compose.yml              One-command local container run
requirements.txt                API/runtime dependencies
requirements-pipeline.txt       Full video pipeline dependencies
notebooks/Training_set.ipynb    Google Colab T4 training notebook for YOLO output experiments
output/                         Tracked demo analytics JSON/JSONL files
vercel-dashboard/               Static Vercel dashboard
scripts/import_demo_videos.ps1  Helper to import generated annotated videos
ARCHITECTURE.md                 System design documentation
SUBMISSION.md                   Short evaluator guide

Training Notebook

notebooks/Training_set.ipynb documents the Google Colab T4 workflow used to train and validate the outputs for the YOLO video-processing pipeline.

Quick Start With Docker

docker compose up --build

Open:

Stop the stack:

docker compose down

Quick Start Locally

Demo analytics data is already included in the repository under output/, so the dashboard works immediately after cloning:

git clone https://github.com/bhavyakeerthi3/-purplle_hackathon.git
cd -purplle_hackathon
pip install -r requirements.txt
python server.py

Open:

To regenerate demo data (optional):

pip install numpy
python generate_demo_data.py

Full Video Pipeline

Install the pipeline dependencies:

pip install -r requirements-pipeline.txt

Place videos in this layout:

data/store1/
  CAM 1 - zone.mp4
  CAM 2 - zone.mp4
  CAM 3 - entry.mp4
  CAM 5 - billing.mp4

data/store2/
  zone.mp4
  billing_area.mp4
  entry 1.mp4
  entry 2.mp4

Run the pipeline:

python process_videos.py
python server.py

Useful options:

python process_videos.py --store ST1
python process_videos.py --store ST2
python process_videos.py --skip-compress
python server.py --port 9000

Pipeline outputs:

output/generated_events.jsonl
output/store_analytics.json
output/sales_analytics.json
output/anomalies.json
output/output_<store>_<camera>.mp4
output/compressed_<store>_<camera>.mp4

Import Already Generated YOLO Videos

If annotated videos already exist in Downloads, import them into output/:

powershell -ExecutionPolicy Bypass -File .\scripts\import_demo_videos.ps1 -Source "$env:USERPROFILE\Downloads"

The dashboard expects compressed clips with these names:

compressed_ST1008_CAM1.mp4
compressed_ST1008_CAM2.mp4
compressed_ST1008_CAM3.mp4
compressed_ST1008_CAM5.mp4
compressed_ST1009_CAM1.mp4
compressed_ST1009_CAM_B.mp4
compressed_ST1009_CAM_E1.mp4
compressed_ST1009_CAM_E2.mp4

API Endpoints

Endpoint Purpose
GET / Service metadata with dynamic dashboard/docs URLs
GET /api/v1/health Data readiness check
GET /api/v1/schema/events Event contract documentation
GET /api/v1/store/all/overview Combined KPI summary
GET /api/v1/stores/overview Alias for combined KPI summary
GET /api/v1/store/{store_id}/overview Store KPI summary
GET /api/v1/store/{store_id}/footfall Zone dwell analytics
GET /api/v1/store/{store_id}/heatmap Peak and average occupancy
GET /api/v1/store/{store_id}/queue Queue served, abandoned, and wait metrics
GET /api/v1/store/{store_id}/funnel Conversion funnel analytics
GET /api/v1/store/{store_id}/demographics Demo-mode aggregate demographic breakdown
GET /api/v1/sales/summary Revenue, order, and brand summary
GET /api/v1/sales/hourly Revenue and orders by hour
GET /api/v1/anomalies Detected operational anomalies
GET /api/v1/events Paginated event log with filters
GET /api/v1/events/stream Server-sent event replay stream

API Examples

curl http://localhost:8000/api/v1/health
curl http://localhost:8000/api/v1/store/ST1008/overview
curl http://localhost:8000/api/v1/store/ST1008/footfall
curl http://localhost:8000/api/v1/store/ST1008/heatmap
curl http://localhost:8000/api/v1/store/ST1008/queue
curl http://localhost:8000/api/v1/store/ST1008/funnel
curl http://localhost:8000/api/v1/store/ST1008/demographics
curl http://localhost:8000/api/v1/sales/summary
curl http://localhost:8000/api/v1/anomalies
curl "http://localhost:8000/api/v1/events?store_id=ST1008&event_type=zone_entered&limit=10"
curl -N http://localhost:8000/api/v1/events/stream

Event Schema

The normalized event stream supports:

  • entry
  • exit
  • zone_entered
  • zone_exited
  • queue_completed
  • queue_abandoned

Common fields include:

  • event_type
  • store_id or store_code
  • camera_id
  • track_id or id_token
  • event timestamp fields

The API exposes the full event contract at:

GET /api/v1/schema/events

Dashboard

The local dashboard is served by FastAPI:

http://localhost:8000/dashboard

Dashboard sections include:

  • Overview KPIs.
  • Conversion funnel.
  • Demographic breakdown.
  • Store footfall analytics.
  • Heatmap view.
  • Queue analytics.
  • Sales trends.
  • Anomaly timeline.
  • Event feed.
  • Annotated video playback when local clips are available.

Vercel Static Dashboard

The static dashboard is in:

vercel-dashboard/

It contains baked demo data and can run without the FastAPI backend.

Live deployment:

https://vercel-dashboard-eta-sand.vercel.app

Testing

Run API tests:

python -m unittest test_server.py

Verified locally:

Ran 10 tests
OK

Docker Verification

The Docker build was verified with:

docker compose build
docker compose up -d
curl http://localhost:8000/api/v1/health
docker compose down

Expected health response:

{
  "ready": true,
  "files": {
    "store_analytics.json": true,
    "sales_analytics.json": true,
    "anomalies.json": true,
    "generated_events.jsonl": true
  }
}

Privacy And Responsible AI

Demographics in this hackathon build are demo-mode aggregate labels used to demonstrate the dashboard and API contract. A production deployment should:

  • Use consent-aware local inference.
  • Avoid storing faces or personally identifiable data.
  • Persist only aggregate counts.
  • Document retention and deletion policies.
  • Provide store-level governance for CCTV analytics.

Git And Media Policy

Tracked:

  • Source code.
  • Configuration.
  • Demo JSON and JSONL analytics.
  • Documentation.
  • Docker and deployment files.
  • Static Vercel dashboard.

Ignored:

  • Raw CCTV videos in data/.
  • Full-resolution generated videos in output/output_*.mp4.
  • Optional compressed generated clips in output/compressed_*.mp4.
  • Model weights and caches.
  • Virtual environments and local tool caches.

This keeps the GitHub repository light and evaluator-friendly while allowing the complete video pipeline to run locally.

Production Upgrade Path

  • Replace JSONL files with Kafka, Pub/Sub, or Kinesis.
  • Store analytics in Postgres, BigQuery, ClickHouse, or DuckDB.
  • Move generated video artifacts to object storage.
  • Add background workers for long-running video processing.
  • Add authenticated dashboard access.
  • Add alert routing for operational anomalies.
  • Add cross-camera re-identification with privacy safeguards.
  • Add observability with metrics, traces, and structured logs.

Submission Checklist

  • Dockerized solution: complete.
  • Pydantic schema validation: complete.
  • REST APIs: complete.
  • Live dashboard: complete.
  • Vercel demo: complete.
  • Conversion funnel: complete.
  • Demographics contract: complete.
  • Tests: complete.
  • Generated demo analytics: complete.
  • Large videos excluded from Git: complete.

License

MIT