Bản lưu bảng công việc camera trước hợp nhất

LỊCH SỬ — lưu ngày 26/09/2026. Không dùng làm lịch thực hiện hoặc quyền kích hoạt.
Tên bản lưu theo đợt v6.1; nội dung gốc bên dưới tự ghi phiên bản 1.0.
Xem bảng hiện hành.

# Task Board — Module Camera Quan sát Cử động

| Thông tin | Chi tiết |
|---|---|
| **Phiên bản** | 1.0 |
| **Ngày** | 26/09/2026 |
| **Phụ trách** | NCS2 — Đỗ Đoàn Anh Tuấn (Lớp 10A6, PTTH Xuân Đỉnh) |
| **Phán quyết** | GO CÓ ĐIỀU KIỆN (65.1/100) |
| **Phương án** | P2 — POC (Proof of Concept) |
| **Báo cáo gốc** | [DEEP_RESEARCH_CAMERA.md](../../reports/DEEP_RESEARCH_CAMERA.html) |

---

## Tổng quan

NCS2 triển khai **độc lập** module camera quan sát cử động (movement observation).
NCS1 tập trung 100% vào MVP core. Hai luồng chạy song song, hợp nhất khi MVP ≥80%.

**Nguyên tắc an toàn:**
- Camera chỉ "quan sát", "ghi nhận" — KHÔNG BAO GIỜ "chẩn đoán".
- Mặc định KHÔNG lưu video — chỉ khung xương số và chỉ số đã tính.
- Mọi ngưỡng phải có nguồn và được CVYK ký.

---

## Sprint C1 — Setup & POC MediaPipe (Tuần 3–4)

> **Mục tiêu:** Chạy được MediaPipe BlazePose trên trình duyệt, nhận diện 33 keypoints.

| ID | Task | Mô tả | DoD | Giờ | Phụ thuộc | Người |
|---|---|---|---|---|---|---|
| CAM-001 | Cài đặt môi trường | Cài Node.js, Python 3.11+, tạo branch `feature/camera-module` | Branch tạo xong, README có hướng dẫn setup | 4h | — | NCS2 |
| CAM-002 | Nghiên cứu MediaPipe API | Đọc tài liệu MediaPipe Tasks API, BlazePose, WASM | Ghi chú tóm tắt API, 33 keypoints | 6h | — | NCS2 |
| CAM-003 | Hello World BlazePose | Tạo trang HTML hiển thị webcam + vẽ 33 keypoints realtime | Demo chạy trên Chrome/Edge, FPS ≥15 | 8h | CAM-002 | NCS2 |
| CAM-004 | Đo FPS và độ ổn định | Chạy 10 phút liên tục, ghi log FPS, kiểm tra memory leak | Báo cáo: FPS trung bình, min, max, RAM tối đa | 4h | CAM-003 | NCS2 |
| CAM-005 | Thử nghiệm điều kiện đầu vào | Test với ánh sáng yếu, góc camera khác nhau, trang phục rộng | Bảng kết quả: OK/FAIL cho mỗi điều kiện | 6h | CAM-003 | NCS2 |
| CAM-006 | Đọc ngưỡng TUG/5STS/Gait | Đọc tài liệu nguồn, tạo file `thresholds.yaml` với source_id | File YAML có 3 ngưỡng, mỗi ngưỡng có source_id | 4h | CVYK ký | NCS2 |
| CAM-007 | Review Sprint C1 | GVHD + NCS1 review kết quả POC | Checklist C1 PASS | 2h | CAM-001→006 | NCS2 + GVHD |

**Tổng Sprint C1:** ~34 giờ | **Deliverable:** Demo BlazePose chạy browser + thresholds.yaml

---

## Sprint C2 — Đo Chỉ số Vận động (Tuần 5–6)

> **Mục tiêu:** Đo được TUG, 5STS, Gait Speed từ video thành viên nhóm.

| ID | Task | Mô tả | DoD | Giờ | Phụ thuộc | Người |
|---|---|---|---|---|---|---|
| CAM-008 | Thiết kế TUG measurement | Thuật toán: phát hiện đứng lên → đi → quay → ngồi, tính thời gian | Pseudocode + sơ đồ luồng | 6h | CAM-003 | NCS2 |
| CAM-009 | Code TUG measurement | Viết `metric_calculator.py` đo TUG từ keypoints | Chạy được trên 3 video mẫu, sai số <1s so với đồng hồ bấm tay | 12h | CAM-008 | NCS2 |
| CAM-010 | Code 5STS measurement | Đếm 5 lần đứng-ngồi, tính tổng thời gian | Chạy được trên 3 video mẫu, sai số <1s | 10h | CAM-009 | NCS2 |
| CAM-011 | Code Gait Speed | Đo thời gian đi 4m, ước tính khoảng cách từ keypoints | Chạy được, sai số <0.1 m/s so với đo tay | 10h | CAM-009 | NCS2 |
| CAM-012 | So sánh camera vs đo tay | Quay 5 video TUG + 5 video 5STS + 5 video gait, so sánh | Bảng sai số: MAE, max error, correlation | 8h | CAM-009→011 | NCS2 |
| CAM-013 | Code threshold_checker.py | Đối chiếu chỉ số với ngưỡng, phân loại: normal/warning/insufficient | Unit test PASS cho 10 ca (3 xanh, 4 vàng, 3 đỏ) | 6h | CAM-006, CAM-009 | NCS2 |
| CAM-014 | Review Sprint C2 | CVYK review ngưỡng + GVHD review tiến độ | Checklist C2 PASS, CVYK ký kết quả so sánh | 3h | CAM-008→013 | NCS2 + CVYK |

**Tổng Sprint C2:** ~55 giờ | **Deliverable:** Báo cáo sai số camera vs đo tay + threshold_checker hoạt động

---

## Sprint C3 — Bộ lọc An toàn & Kiểm thử (Tuần 7–8)

> **Mục tiêu:** Camera module đạt tiêu chuẩn an toàn y khoa.

| ID | Task | Mô tả | DoD | Giờ | Phụ thuộc | Người |
|---|---|---|---|---|---|---|
| CAM-015 | Code safety_filter.py | Bộ lọc an toàn cho kết quả camera: 5 mẫu câu an toàn, 5 mẫu câu cấm | Chặn được 5/5 câu cấm, cho qua 5/5 câu an toàn | 8h | CAM-013 | NCS2 |
| CAM-016 | Thiết kế ngôn ngữ kết quả | Soạn 10 mẫu câu trả kết quả camera (CVYK duyệt) | Tài liệu 10 mẫu câu, CVYK ký | 4h | — | NCS2 + CVYK |
| CAM-017 | Viết 15 ca kiểm thử camera | ST-CAM-001→015: 5 xanh (bình thường), 5 vàng (cảnh báo), 5 đỏ (nguy hiểm) | File YAML 15 ca, mỗi ca có input/expected/source | 6h | CAM-015 | NCS2 |
| CAM-018 | Chạy 15 ca kiểm thử | Test safety_filter + threshold_checker | 15/15 PASS | 4h | CAM-017 | NCS2 |
| CAM-019 | Code confidence check | Khi confidence <0.7 → trả INSUFFICIENT_DATA | Unit test PASS | 4h | CAM-015 | NCS2 |
| CAM-020 | Code điều kiện tiền kiểm tra | Kiểm tra ánh sáng, góc camera, khoảng cách trước khi đo | Hướng dẫn bằng giọng nói/text khi điều kiện chưa đạt | 6h | CAM-003 | NCS2 |
| CAM-021 | Red-team camera | NCS1 + CVYK thử phá: video giả, trang phục rộng, ánh sáng yếu | Báo cáo red-team ≥5 kịch bản | 4h | CAM-015→020 | NCS1 + CVYK |
| CAM-022 | Review Sprint C3 | CVYK review an toàn + GVHD review tiến độ | Checklist C3 PASS, cổng kiểm soát Camera Gate A | 3h | CAM-015→021 | NCS2 + GVHD + CVYK |

**Tổng Sprint C3:** ~39 giờ | **Deliverable:** Bộ lọc an toàn PASS + 15 ca kiểm thử PASS + Red-team report

---

## Sprint C4 — Tích hợp & Pilot (Tuần 9–10)

> **Mục tiêu:** Module camera tích hợp vào sản phẩm chính (nếu MVP ≥80%).

| ID | Task | Mô tả | DoD | Giờ | Phụ thuộc | Người |
|---|---|---|---|---|---|---|
| CAM-023 | Tích hợp UI camera | Thêm nút "Quan sát cử động" vào giao diện, đèn báo đang ghi, nút DỪNG ≥48px | UI review bởi NCS1 | 10h | MVP ≥80%, CAM-022 | NCS2 |
| CAM-024 | Tích hợp API backend | POST /api/v1/movement-observation/result, lưu chỉ số MSSQL mã hoá | API test PASS | 8h | CAM-023 | NCS2 |
| CAM-025 | Tích hợp bộ lọc an toàn | safety_filter camera chạy cùng safety_filter text | End-to-end test: camera + chat hoạt động đồng thời | 6h | CAM-024 | NCS2 + NCS1 |
| CAM-026 | Viết phụ lục consent camera | Bổ sung phần đồng ý ghi hình vào consent form | GVHD + CVYK duyệt | 4h | — | NCS2 |
| CAM-027 | Pilot nội bộ | 5 thành viên nhóm thử nghiệm toàn bộ luồng | Báo cáo pilot: 5/5 hoàn thành, 0 sự cố | 8h | CAM-025 | NCS2 |
| CAM-028 | Viết phần camera cho báo cáo NCKH | Soạn 2-3 trang mô tả module camera trong báo cáo | GVHD review | 6h | CAM-027 | NCS2 |
| CAM-029 | Review Sprint C4 — Camera Gate B | GVHD + CVYK review toàn bộ module camera | Cổng kiểm soát Camera Gate B PASS | 3h | CAM-023→028 | NCS2 + GVHD + CVYK |

**Tổng Sprint C4:** ~45 giờ | **Deliverable:** Module camera tích hợp + pilot report + bản thảo NCKH

---

## Tổng hợp

| Sprint | Tuần | Giờ NCS2 | Deliverable chính |
|---|---|---|---|
| C1 | W3–W4 | ~34h | Demo BlazePose browser + thresholds.yaml |
| C2 | W5–W6 | ~55h | Đo TUG/5STS/Gait + báo cáo sai số |
| C3 | W7–W8 | ~39h | Bộ lọc an toàn + 15 ca test + red-team |
| C4 | W9–W10 | ~45h | Tích hợp + pilot nội bộ + bản thảo NCKH |
| **TỔNG** | **8 tuần** | **~173h** | |

**Giờ NCS2/tuần trung bình:** ~21.6 giờ (khả thi với 2-3h/ngày + 8-12h cuối tuần).

---

## Điều kiện tiên quyết

- [x] GVHD đồng ý đưa camera vào NCKH
- [x] CVYK chấp nhận ngưỡng quốc tế
- [x] GPU confirmed trên server
- [ ] CVYK ký văn bản ngưỡng chính thức
- [ ] NCS2 hoàn thành setup môi trường (CAM-001)

## Tiêu chí dừng (Kill criteria)

Huỷ module camera ngay lập tức nếu:
1. Độ nhạy <70% trên bộ kiểm thử do CVYK gán nhãn.
2. Xảy ra 1 sự cố thân thể trong lúc đo.
3. GVHD hoặc CVYK yêu cầu dừng.
4. NCS2 không thể tiếp tục (rút khỏi đề tài, quá tải học tập).
5. Sprint C2 không đạt sai số <1s so với đo tay.

---

> **Ghi chú:** File này do AI Agent tạo, NCS2 và GVHD cần review trước khi bắt đầu Sprint C1.