প্রজেক্ট: 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সব কোর্স।