প্রজেক্ট: real-time object detection
এই project-এ যা করবেন
- Bangladesh traffic dataset assemble (rickshaw, CNG, bus)
- YOLOv8 finetune
- Webcam realtime inference
- Mobile deploy (ONNX export)
১ · Project scope
Goal: Bangladesh traffic-specific object detector — 5 class:
- Rickshaw
- CNG (auto)
- Bus
- Motorcycle
- Pedestrian
Real CV project — academic example beyond। Data collect, label, train, optimize, deploy, monitor — full lifecycle। Bangladesh-specific = local value।
২ · Step 1: Data collection
- Source: dashcam video, traffic CCTV, smartphone, public footage।
- Diversity: day/night, weather, location।
- Quantity: 1000-5000 image initially।
- Privacy: face/plate blur if public release।
Frame extraction:
import cv2
cap = cv2.VideoCapture('traffic_video.mp4')
i = 0
while True:
ret, frame = cap.read()
if not ret: break
if i % 30 == 0: # every 30 frame (1 sec at 30fps)
cv2.imwrite(f'frames/{i:06d}.jpg', frame)
i += 1
cap.release()
৩ · Step 2: Annotation
- Tool: Roboflow, CVAT, LabelImg।
- Format: YOLO (txt: class x_center y_center w h normalized)।
- SAM-assist: click → mask → bbox auto extract।
- Speed: 5-10 sec per image with SAM।
Dataset structure:
traffic_dataset/
├── images/
│ ├── train/ (80%)
│ ├── val/ (10%)
│ └── test/ (10%)
└── labels/
├── train/
├── val/
└── test/
# data.yaml
path: ./traffic_dataset
train: images/train
val: images/val
names:
0: rickshaw
1: cng
2: bus
3: motorcycle
4: pedestrian
৪ · Step 3: Train YOLOv8
from ultralytics import YOLO
# Start from pretrained
model = YOLO('yolov8n.pt') # nano — fastest
# Train
results = model.train(
data='traffic_dataset/data.yaml',
epochs=100,
imgsz=640,
batch=16,
device=0, # GPU 0
project='runs/train',
name='bd_traffic',
patience=20, # early stop
cos_lr=True, # cosine LR schedule
augment=True, # default augmentation
mixup=0.1, # MixUp
mosaic=1.0, # Mosaic 4-image
)
# Validate
metrics = model.val()
print(f"mAP@0.5: {metrics.box.map50:.3f}")
print(f"mAP@0.5:0.95: {metrics.box.map:.3f}")
Training time estimate:
- RTX 3060 (12 GB): 1000 image, 100 epoch — 2-3 hour।
- Cloud T4 (Colab free): similar।
- RTX 4090: 30 minute।
৫ · Step 4: Realtime webcam inference
import cv2
from ultralytics import YOLO
# Load trained model
model = YOLO('runs/train/bd_traffic/weights/best.pt')
# Webcam (0 = default camera)
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
while True:
ret, frame = cap.read()
if not ret: break
# Inference
results = model(frame, verbose=False, conf=0.5)
# Visualize
annotated = results[0].plot()
# FPS
fps = 1 / (results[0].speed['inference'] / 1000)
cv2.putText(annotated, f'FPS: {fps:.1f}', (10, 30),
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
cv2.imshow('BD Traffic Detection', annotated)
if cv2.waitKey(1) & 0xFF == ord('q'): break
cap.release()
cv2.destroyAllWindows()
৬ · Step 5: Optimize for deployment
(ক) ONNX export
model.export(format='onnx', imgsz=640, optimize=True)
# Creates yolov8n.onnx — framework-independent
(খ) Quantization (FP16)
model.export(format='onnx', half=True)
# 50% smaller file, 2x faster on supported hardware
(গ) TensorRT (NVIDIA)
model.export(format='engine', half=True)
# Maximum speed on NVIDIA GPU
(ঘ) Mobile (TFLite)
model.export(format='tflite', int8=True)
# Android/iOS deployment
৭ · Step 6: Bangladesh-specific tuning
- Bengali label: "rickshaw" → "রিকশা" — UI display।
- Local context: Pohela Boishakh decoration vehicle, Eid eve traffic।
- Lighting: Dhaka monsoon, summer heat haze augmentation।
- Camera: diverse smartphone — augment quality।
৮ · Step 7: Counting + tracking
Detection alone insufficient for "how many cars passed?"। Need tracking।
# Built-in tracking with BotSORT/ByteTrack
results = model.track(
source='video.mp4',
tracker='botsort.yaml',
persist=True
)
# Each box has unique ID across frames
# Count by class crossing line
line_y = 400
counts = {}
for r in results:
for box, cls, id in zip(r.boxes.xyxy, r.boxes.cls, r.boxes.id):
cy = (box[1] + box[3]) / 2
if cy > line_y and id not in counts:
counts[id.item()] = cls.item()
৯ · Common pitfall
- Class imbalance: rickshaw 1000 image, bus 100 — bus accuracy poor। Resample বা weight loss।
- Domain shift: day train, night fail। Augment heavy।
- Annotation noise: bbox loose — model learn loose। Strict QC।
- Overfitting: small dataset — heavy regularization, transfer learning critical।
- Realtime ambition: too-large model — drop FPS। Right-size choose।
১০ · Bangladesh-specific deployment
- Smart traffic: Dhaka traffic management।
- Vehicle counting: bridge, intersection।
- Parking automation: shopping mall।
- Safety: helmet detection (motorcyclist)।
- Logistics: warehouse package detect।
১১ · Hardware options
| Hardware | FPS (YOLOv8n) | Cost | Use |
|---|---|---|---|
| RTX 4090 | 500+ | $1500 | Server |
| RTX 3060 | 200 | $300 | Workstation |
| Jetson Nano | 15 | $100 | Edge |
| Raspberry Pi 5 | 5 | $80 | IoT |
| iPhone 15 Pro | 30 | flagship | Mobile |
১২ · Monitor in production
- Confidence drift: avg confidence drop → model degrade।
- Class distribution shift: new vehicle type emerging।
- Failure case capture: low-confidence box log — manual review।
- Retraining cycle: monthly/quarterly with new data।
ভাবনার প্রশ্ন
প্র ০১ Project-এ "data quality" "data quantity"-এর চেয়ে বেশি matter। কেন? Examples?
Andrew Ng popularized "data-centric AI" — quality over quantity।
Quality issues:
- Loose bbox — model learn loose।
- Inconsistent label — class boundary blurry।
- Mislabeled — direct error।
- Missing annotation — false negative learn।
Quantity vs quality experiment:
- 10K noisy image: 65% mAP।
- 2K clean image: 75% mAP।
- Better quality > 5x quantity।
Quality strategies:
- Annotation guideline document।
- Inter-annotator agreement check।
- Random spot QC।
- Active learning — focus on uncertain samples।
Bangladesh implication:
- Local annotator training।
- Bilingual guideline (Bangla + English)।
- Cultural context understand।
মূল উপলব্ধি: "Garbage in, garbage out" — eternal। Investment in clean data — highest ROI।
প্র ০২ YOLOv8n vs YOLOv8x — accuracy vs speed। Bangladesh CCTV traffic-এ কোনটা?
Realtime production decision।
YOLOv8n (nano):
- 3.2M params, 37% mAP।
- 280 FPS T4।
- Mobile deployable।
YOLOv8x (extra large):
- 68M params, 53.9% mAP।
- 40 FPS T4।
- Server-only।
CCTV consideration:
- 1080p 30 FPS stream।
- Multiple camera (10-100)।
- Server scaling matter।
- Budget — RTX 3060 server bracket।
Decision matrix:
- Single camera + accuracy priority: YOLOv8m/l।
- 10+ camera + realtime: YOLOv8n/s।
- Mobile patrol: YOLOv8n।
- Forensic offline: YOLOv8x।
Cascade approach:
- YOLOv8n always — fast first pass।
- Low confidence → YOLOv8x verify।
- Hybrid speed + accuracy।
Bangladesh real:
- Dhaka City Corp pilot — YOLOv8s on 4 GPU server।
- 4 camera per GPU।
- Cost: $5K hardware + $1K/year maintenance।
মূল উপলব্ধি: "Best model" task-dependent। Speed/accuracy trade-off explicit reason।
প্র ০৩ Annotation cost reduce — SAM, active learning, synthetic data। Bangladesh-এ কীভাবে combine?
Bangladesh annotation industry opportunity।
SAM-assisted:
- Click → mask → bbox extract।
- Annotation 5-10x faster।
- Quality often higher than manual।
Active learning:
- Initial 200 manual annotation।
- Train baseline।
- Predict on 5000 unlabeled।
- Identify low-confidence — annotator priority।
- Retrain — accuracy bump।
- Iterate।
Synthetic data:
- Dhaka 3D city model render — annotated automatically।
- Stable Diffusion + bbox — generative augment।
- Domain gap — careful sim2real।
Combined strategy:
- Initial: synthetic 5K।
- Train baseline।
- SAM-assist label real 1K।
- Active learning identify hard real cases।
- Annotator focus on hard, quality high।
- Final dataset: 10K mixed।
Cost:
- Pure manual: $1000।
- SAM-assisted: $200।
- Active learning: $100।
- Combined: $50।
Bangladesh business:
- Annotation export competitive।
- Local rate + AI-tool — global service।
- Skill: SAM operation, Python QC।
মূল উপলব্ধি: Modern annotation = AI + human collaboration। Bangladesh — labor cost advantage + AI tool literacy = lucrative niche।
প্র ০৪ Production deployment-এ MLOps — what minimum infrastructure for traffic detection in Dhaka?
MLOps Bangladesh context — affordable starter।
Minimum components:
- Compute: 1 GPU server (RTX 3060)।
- Camera: 5-10 IP cameras (Hikvision)।
- Network: dedicated bandwidth।
- Storage: 1TB for video archive।
Software stack:
- Inference server: Triton or FastAPI।
- Stream processing: OpenCV + Kafka (event)।
- Database: PostgreSQL (detection log)।
- Monitor: Prometheus + Grafana।
- Dashboard: Streamlit বা React।
Pipeline:
- Camera → RTSP stream।
- Worker reads frame।
- YOLO inference।
- Post-process: count, alert।
- DB log।
- Dashboard visualize।
Deployment:
- Docker Compose initial।
- Kubernetes scale।
- Cloud (GCP, AWS) BD startup-এ DigitalOcean।
Monitoring:
- Inference latency p50/p99।
- FPS per camera।
- Detection confidence distribution drift।
- Alert: latency > threshold, FPS drop।
Retraining:
- Failure case capture (low-conf, error)।
- Weekly review।
- Monthly retrain।
- A/B test new model।
Cost estimate (Bangladesh, 10 camera):
- Hardware setup: $3000-5000।
- Camera: $1500-3000।
- Annual: $500 (electricity, maintenance)।
- Engineer: 1 part-time।
Local consideration:
- Power outage — UPS, generator।
- Heat — cooling।
- Theft — physical security।
- Internet — fallback।
মূল উপলব্ধি: Production-grade CV — under $10K achievable Bangladesh। Government, private — ROI quick (vs manual operator cost)।
অনুশীলন
-
Mini dataset: 50 image of household items, label, train YOLOv8n।
Code section ৪ template। 30 minute Colab GPU।
-
Webcam test: Pretrained YOLOv8 দিয়ে webcam realtime detect।
Code section ৫। 80 COCO class — कुकुर, person, etc detect।
-
ভাবুন: Bangladesh garment factory defect — YOLOv8 কীভাবে adapt?
(1) Defect type 5-10। (2) Controlled lighting fixture। (3) Annotation standardize। (4) YOLOv8s (accuracy)। (5) Quality control workflow integrate।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পাঠ ৩৪ · Project: medical segmentation পরবর্তী পাঠSecond project।
- পাঠ ৩২ · Pose estimation আগের পাঠFoundation।
- পাঠ ৩৫ · Capstone এগিয়েকোর্সের শেষ।
- সব AI Courses দেখুন ABCL TECHসব কোর্স।