🚦 TrafficAI - Traffic Violation Detection System
Chào mừng đến với TrafficAI, hệ thống tự động phát hiện và cảnh báo vi phạm giao thông theo thời gian thực (Real-time). Hệ thống ứng dụng công nghệ Deep Learning (YOLO) để nhận diện các hành vi vi phạm giao thông trên các đoạn đường bao gồm:
- Lỗi vượt đèn đỏ (Red-light running)
- Lỗi đi sai làn đường (Wrong-lane driving)
- Lỗi không đội mũ bảo hiểm (Helmetless rider)
- Lỗi vượt quá tốc độ (Speed limits violation)
Toàn bộ quá trình theo dõi, nhận diện và bắt bằng chứng vi phạm được truyền tải (stream) trực tiếp theo thời gian thực lên giao diện web qua WebSocket!
Kiến trúc hệ thống
graph TB
subgraph Frontend["🖥️ Frontend (HTML + CSS + JS)"]
UI[Dashboard UI]
WS_CLIENT[WebSocket Client]
VIDEO[Video Player Canvas]
VIOLATIONS_PANEL[Violations Panel]
STATS[Statistics Cards]
end
subgraph Backend["⚙️ Backend (FastAPI)"]
API[REST API Endpoints]
WS_SERVER[WebSocket Server]
PIPELINE[Detection Pipeline Manager]
subgraph Models["🤖 AI Models (Parallel)"]
M1[Vehicle Tracker<br/>tracking.pt]
M2[Traffic Light<br/>detect_traffic_light.pt]
M3[Lane Violation<br/>detect_lane.pt]
M4[Helmet Detection<br/>detect_helmet.pt]
M5[Speed Sign<br/>detect_speed_sign.pt]
end
subgraph ViolationCheckers["🚨 Violation Logic"]
V1[Red Light Runner]
V2[Wrong Lane]
V3[No Helmet]
V4[Speed Limit]
end
end
subgraph Storage["💾 Storage"]
DB[(SQLite DB)]
EVIDENCE[Evidence Images]
CSV_EXPORT[CSV Reports]
end
UI --> WS_CLIENT
WS_CLIENT <-->|WebSocket<br/>frames + violations| WS_SERVER
API -->|REST<br/>history, export, config| UI
WS_SERVER --> PIPELINE
PIPELINE --> M1 & M2 & M3 & M4 & M5
M1 --> V1 & V2 & V3 & V4
M2 --> V1
M3 --> V2
M4 --> V3
M5 --> V4
V1 & V2 & V3 & V4 --> DB
V1 & V2 & V3 & V4 --> EVIDENCE
DB --> CSV_EXPORT
Luồng xử lý (Pipeline)
sequenceDiagram
participant C as Client Browser
participant WS as WebSocket Server
participant PM as Pipeline Manager
participant T as Vehicle Tracker
participant TL as Traffic Light
participant H as Helmet Detector
participant VC as Violation Checker
participant DB as SQLite
C->>WS: Connect + Start (source: webcam/video)
loop Every Frame
WS->>PM: Get frame from video source
par Parallel Inference
PM->>T: Track vehicles
PM->>TL: Detect traffic light
PM->>H: Detect helmet
end
T-->>PM: Boxes + Track IDs
TL-->>PM: Light state (red/green/yellow)
H-->>PM: Helmet/No-helmet boxes
PM->>VC: Check all violation rules
VC->>DB: Save violation (if any)
VC-->>PM: Annotated frame + violations list
PM-->>WS: Send annotated frame (JPEG)
WS-->>C: WebSocket binary (frame) + JSON (violations)
end
C->>WS: Stop
📂 Kiến trúc Thư mục (Directory Structure)
/AIClub_NAS/nguyenmv/duytk/duytk/CV/project/
├── webapp/ # Thư mục gốc chứa Web
│ ├── backend/ # Khối xử lý Logic (FastAPI, YOLO, OpenCV)
│ │ ├── main.py # Entrypoint, Web APIs và WebSocket Server
│ │ ├── pipeline.py # Lõi xử lý từng khung hình video theo chuỗi
│ │ ├── violation_checker.py # Logic khoanh vùng vi phạm (polygon, lane tracking...)
│ │ ├── models_loader.py# Quản lý vòng đời load file Weights YOLO
│ │ └── database.py # Quản lý lưu trữ/truy vấn SQlite
│ ├── frontend/ # Khối hiển thị Giao diện (HTML/Vanilla JS)
│ │ ├── index.html # Giao diện Dashboards trung tâm
│ │ ├── css/ # Thư mục cấu hình phong cách (Aesthetics)
│ │ └── js/app.js # Script điều hành giao diện và kết nối WS
│ ├── models/ # 📌 Thư mục chứa các model file (.pt)
│ ├── uploads/ # [Tự sinh] Lưu video do người dùng upload để phân tích nhanh
│ └── evidence/ # [Tự sinh] Lưu ảnh bằng chứng (Crop) chụp được khi xe vi phạm
├── run.py # File mồi khởi chạy máy chủ backend
├── start_server.sh # Shell script tự động cài đặt môi trường và chạy Server
└── README.md # Tổng quan dự án (File này)
🛠️ Chẩn bị Tài nguyên (Resources Download)
Hệ thống cần các Model Tracking và Classification để hoạt động. Đảm bảo bạn đã đặt các file model Weights (ví dụ: .pt) và file cấu hình .yaml theo cấu trúc sau trong thư mục webapp/models/:
tracking.pt(Tracking xe chung)detect_traffic_light.pt(Nhận diện Đèn đỏ/xanh)detect_lane.pt(Nhận diện biển báo hướng đi làn)detect_nohelmet.pt(Nhận diện mũ bảo hiểm)bytetrack.yaml(File config cài đặt bộ Tracker)
Lưu ý: Nếu một model bất kì bị thiếu, hệ thống sẽ tự động tắt tính năng vi phạm của khối module đó mà không bị crash.
🚀 Hướng dẫn Cài đặt & Khởi động (How to Run)
Dự án được cấu hình chạy trong môi trường Container và Conda nội bộ. Thực hiện theo trình tự sau:
- Truy cập vào Container và Environment:
Mở terminal và chui vào Docker:
bash docker exec -it opencubee bashKích hoạt môi trường conda chứa đủ các thư viện ảo (ultralytics,fastapi,opencv-python...):bash conda activate cvTải các thư viện cần thiết:bash cd webapp/backend/ pip install -r requirements.txt Di chuyển vào thư mục làm việc gốc:
cd /AIClub_NAS/nguyenmv/duytk/duytk/CV/project/Chạy Server: Khuyến nghị khởi động bằng shell file có sẵn (đã được cấu hình tự động chọn GPU #0 để load Model, tránh xung đột VRAM):
./start_server.sh # Trường hợp file chưa cấp quyền, chạy lệnh: chmod +x start_server.sh
Hoặc bạn có thể chạy tay (manual):
CUDA_VISIBLE_DEVICES=0 python run.py
- Trải nghiệm ngay trên trình duyệt:
Sau khi console báo
Uvicorn running on http://0.0.0.0:5000, bạn hãy mở trình duyệt web và truy cập vào địa chỉ: 👉 http://localhost:5000
💡 Hướng dẫn sử dụng & Luồng Video (Usage Workflow)
- Kết nối Video Feed: Ở giao diện chính, bạn có thể chọn 3 cách mồi Video:
Webcam: Trực tiếp lấy luồng hình ảnh từ máy tính (nếu có gắn Webcam).URL Camera: Hỗ trợ bạn ném link Camera IP tĩnh (HTTP / RTSP) từ một cái camera ngoài ngã tư thật.Upload Video: Tải 1 đoạn clip .mp4, .avi có sẵn trong máy tính lên server để test thử nhận diện.
- Hệ thống hỗ trợ Auto-clean (tự động dọn rác). Các video upload sẽ luôn được hệ thống xóa sạch khỏi ổ cứng NAS ngay khi phát xong 100% hoặc khi người dùng bị mất mạng/f5 web giữ chừng, để tránh ngốn bộ nhớ!
- Bảng Dashboard có hỗ trợ Export CSV (Tải lịch sử vi phạm đuôi .csv) để lập report.
- Click trực tiếp vào các ô chữ nhật báo cáo vi phạm ở History List (Cột bên phải) để phóng to hình ảnh bằng chứng xe vi phạm.
🎯 Chúc bạn có những phút giây trải nghiệm phát triển tuyệt vời với TrafficAI!

Log in or sign up for Devpost to join the conversation.