Nhóm AI · Tài liệu giao bài
| Người giao | |
| Thực tập sinh | |
| Ngày giao | 15/10/2026 |
| Hạn nộp | 23/10/2026 |
| Hình thức | Cá nhân |
Viết một service Python chạy tối thiểu 4 nguồn video cùng lúc (camera thật hoặc file video phát lại qua RTSP). Luồng xử lý:
camera -> capture -> detect + track -> xử lý sự kiện -> vẽ kết quả -> ffmpeg -> RTSP server
|
+-> lưu snapshot, DB, log
Sau bài này em cần:
| Mã | Yêu cầu |
|---|---|
| F01 | Đọc được RTSP, file video, webcam. Mất kết nối thì tự reconnect, một camera lỗi không kéo các camera khác dừng theo. |
| F02 | Luôn xử lý frame mới nhất, không để queue dồn làm trễ tăng dần. |
| F03 | Detect người và xe bằng YOLO (v8 trở lên). Class, ngưỡng confidence, imgsz đọc từ config. |
| F04 | Tracking, ID giữ ổn định qua các frame (ByteTrack hoặc BoT-SORT). |
| F05 | Đếm đối tượng qua vạch, tách riêng hai chiều. |
| F06 | Phát hiện đối tượng đi vào vùng cấm (polygon). |
| F07 | Mỗi lần vi phạm chỉ ghi một sự kiện. Sự kiện gồm thời gian, camera, track ID, loại sự kiện, ảnh snapshot. Lưu vào SQLite. |
| F08 | Vẽ box, ID, vạch, vùng cấm, bộ đếm lên frame. Mỗi camera ra một đường RTSP riêng, mở được bằng VLC. FFmpeg chết thì tự bật lại. |
| F09 | Camera, model, vạch, vùng cấm, URL stream đều khai báo trong YAML. Config sai phải báo lỗi rõ khi khởi động. Thêm camera chỉ sửa config. |
| F10 | API (FastAPI): xem trạng thái và FPS từng camera, bật/tắt một camera khi đang chạy, lấy danh sách sự kiện theo camera và khoảng thời gian. |
Ctrl+C phải dừng sạch: thread, process, ffmpeg, kết nối camera.logging, không dùng print. Log ra file. Có số liệu FPS, độ trễ, số lần reconnect theo camera.docker compose up (service + MediaMTX).Đo với 1, 4 và 8 camera. So sánh ít nhất hai cách làm, ví dụ threading với multiprocessing, hoặc mỗi camera một model với batch inference dùng chung. Chọn một cách và giải thích vì sao, dựa trên số liệu.
Python 3.10+, OpenCV, FFmpeg, Ultralytics YOLO, ByteTrack/BoT-SORT, MediaMTX, FastAPI, SQLite, Pydantic, pytest, Docker.
Muốn dùng thứ khác thì trao đổi trước và nêu lý do.
| Phần | Nội dung | Điểm |
|---|---|---|
| Chức năng | F01 đến F10 | 30 |
| Hiệu năng, ổn định | Đạt chỉ tiêu, chạy lâu không lỗi, reconnect đúng | 20 |
| Code | Cấu trúc, xử lý lỗi, dừng sạch, test | 20 |
| Benchmark | Số liệu đo lại được, kết luận có căn cứ | 15 |
| Tài liệu, bảo vệ | README, demo, giải thích được lựa chọn | 15 |
| Tổng | 100 | |