অধ্যায়Phase 8 · রিয়েল-ওয়ার্ল্ড প্রজেক্ট
8.6 18 মিনিট পড়া
AI Surveillance System
Multi-camera analytics।
🎬 গল্প দিয়ে শুরু
শেষ প্রজেক্ট — সবকিছুর সমন্বয়। ৩২+ ক্যামেরার multi-site AI surveillance platform — detection, tracking, re-identification, search, alert, dashboard। Production-grade systems আসলে যেভাবে বানানো হয়।
High-level architecture
text
┌──────────── Edge Nodes (Jetson / GPU server) ────────────┐
│ Camera → Decode (NVDEC) → Detect (YOLO TRT) → Track │
│ → Embedding (OSNet ReID) → Event JSON + thumbnail │
└──────────────────────────┬───────────────────────────────┘
│ MQTT / Kafka
┌──────────────────────────▼───────────────────────────────┐
│ Central Backend │
│ ├ Kafka → Stream Processor (Flink / Faust) │
│ ├ Postgres + TimescaleDB (events) │
│ ├ Qdrant / Milvus (ReID embedding vector search) │
│ ├ MinIO (clips, thumbnails) │
│ ├ Redis (live presence, cache) │
│ └ FastAPI + WebSocket (UI API) │
└──────────────────────────┬───────────────────────────────┘
│
React / Next.js Dashboard
(live tiles, search, alerts)Core capability — Person Re-Identification
Camera-A তে দেখা ব্যক্তি Camera-B তে আবার এলে চেনা — face না দেখেই (পোশাক, গঠন থেকে embedding)। OSNet বা TransReID model use করা হয়।
bash
pip install torchreidpython
import torchreid, torch
from torchvision import transforms
from PIL import Image
extractor = torchreid.utils.FeatureExtractor(
model_name="osnet_x1_0",
model_path="osnet_x1_0_market.pth",
device="cuda")
def embed_person(crop_bgr):
img = Image.fromarray(crop_bgr[:,:,::-1])
return extractor([img])[0].cpu().numpy() # (512,) float32Cross-camera tracking flow
python
# প্রতি new track-এ embedding compute → Qdrant search
def on_new_track(cam_id, tid, crop, ts):
vec = embed_person(crop)
hits = qdrant.search("persons", vec, limit=1,
score_threshold=0.75)
if hits:
global_id = hits[0].payload["gid"] # পুরনো ব্যক্তি
else:
global_id = str(uuid4()) # নতুন
qdrant.upsert("persons", [vec], [{"gid": global_id}])
pg.insert_event(global_id, cam_id, tid, ts)Global ID
এক ব্যক্তি ৫টি ক্যামেরায় ১০ বার দেখা গেলেও database-এ একটি global ID — journey reconstruct করা যায়।
Search — লাল শার্ট পরা লোকটিকে খুঁজুন
- Image query — sample crop দিয়ে similar embedding খুঁজুন।
- Text query (CLIP, Phase 6.4) — প্রাকৃতিক ভাষায়।
- Time + camera filter — "3-5 PM, gate camera"।
- Path tracing — global ID-এর কোন cam কখন দেখা গেছে।
Event taxonomy
python
EVENTS = {
"intrusion": "ROI ∩ person ∩ restricted_time",
"loitering": "track in ROI > 60s, low motion",
"crowd": "person_count > N in ROI",
"abandoned_obj": "static object detected > 5min",
"ppe_violation": "person without helmet/vest",
"fight": "rapid motion + multi-person overlap",
"vehicle_wrongway":"track direction ≠ allowed",
"license_plate": "ANPR hit on watchlist",
}Scaling tips
- Decode + inference একই GPU-তে (NVDEC + CUDA)।
- DeepStream/Triton — ৩০+ stream/Jetson।
- Kafka partition by camera_id — parallel consumer।
- TimescaleDB hypertable — billions of event row।
- Cold storage — old clip MinIO Glacier tier-এ।
- Horizontal scale — stateless workers + queue।
Privacy ও compliance
- Face blur (default) — opt-in identification।
- GDPR — data retention policy, right-to-erasure।
- Audit log — কে কখন কী dashboard দেখেছে।
- End-to-end encryption — RTSP-over-TLS, mTLS internal।
- Watchlist consent — legal review।
Phase 8 শেষ — কী বানালেন?
- Face Recognition Attendance system।
- Smart CCTV (intrusion + clip + alert)।
- Traffic Monitoring (count + speed + class)।
- OCR Scanner (Bangla + searchable PDF)।
- Industrial Defect Detection (supervised + anomaly)।
- Multi-camera AI Surveillance (ReID + global track + search)।
পরবর্তী — Phase 9: Career & Research
সব technical দক্ষতা তৈরি। এবার freelance, job, portfolio, research ও startup — কীভাবে এই দক্ষতা income ও impact-এ পরিণত করবেন।
প্র্যাকটিস টাস্ক
- ২টি webcam নিয়ে OSNet ReID দিয়ে cross-camera tracking demo বানান।
- Qdrant-এ embedding store করে image-query search endpoint যোগ করুন।
- Loitering + intrusion event Kafka-তে publish করে dashboard live-এ দেখান।