File size: 3,249 Bytes
350d731 c75ced2 350d731 c75ced2 350d731 c75ced2 350d731 c75ced2 350d731 c75ced2 350d731 c75ced2 350d731 c75ced2 350d731 c75ced2 350d731 268a54d c75ced2 350d731 c75ced2 350d731 c75ced2 350d731 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | # Implementation Plan
## Trang Thai Hien Tai
Du an da chuyen tu prototype Taekwondo/Streamlit sang ung dung Reflex phan tich bai tap hit dat. Luong xu ly production hien tai nam trong cac module `push_up/*` va `reflex_frontend/*`.
## Kien Truc Chinh
```text
Reflex UI
-> upload video hoc vien
-> push_up.analysis_service.analyze_pushup()
-> VideoProcessor + MediaPipe Pose
-> PushUpEvaluator
-> PushUpRuleEngine
-> frame artifacts + rule-based arrows
-> optional NVIDIA VLM feedback
-> Reflex result cards
```
## Module Chinh
- `reflex_frontend/state.py`: quan ly upload, tien trinh xu ly, state ket qua.
- `reflex_frontend/ui.py`: giao dien trang chu, danh sach bai tap, trang phan tich hit dat, card ket qua tung rep.
- `push_up/processor.py`: doc video, phat hien huong nguoi tap, flip neu can, trich xuat landmark theo frame.
- `push_up/engine.py`: boc MediaPipe Pose, tinh cac chi so kinematics nhu elbow angle, hip angle, body line angle, depth signal.
- `push_up/evaluator.py`: segment rep, can chinh voi template bang DTW, ket hop diem rule score va DTW score.
- `push_up/rules.py`: phat hien loi ky thuat bang nguong deterministic.
- `push_up/analysis_service.py`: orchestration cua toan bo flow, tao payload cho UI, luu artifact, ve arrow.
- `push_up/feedback_graph.py`: goi text LLM/VLM qua NVIDIA OpenAI-compatible API va validate JSON feedback.
- `scripts/run_pushup_eval_tests.py`: batch test tat ca video trong `data/tests` va xuat file JSON tong hop.
## Luong Phan Tich Video
1. UI luu video upload vao thu muc tam cua Reflex.
2. `prepare_template_cache()` dam bao video mau da duoc xu ly va cache landmark tai `data/processed/pushup_template.pkl`.
3. `VideoProcessor` doc video hoc vien, lay mau frame, auto flip neu nguoi tap nam nguoc huong template.
4. `PoseEngine` trich xuat 33 landmark pose va tinh kinematics.
5. `PushUpEvaluator` segment rep dua tren depth signal va elbow angle.
6. Moi rep duoc so sanh voi golden template bang DTW va pose similarity.
7. `PushUpRuleEngine` chay rule-based checks:
- `not_deep_enough`
- `hip_sag`
- `body_not_straight`
- `head_misaligned`
- `hip_pike`
8. `analysis_service` tao card ket qua tung rep, main error, feedback rule-based, va summary.
9. Khi `save_artifacts=True`, app luu frame hoc vien/mau va ve arrow vao frame hoc vien.
10. Neu rep co rule-based error va co `NVIDIA_API_KEY`, VLM duoc goi de sinh feedback chu cho rep loi.
## Quyet Dinh Thiet Ke
- Rule engine la nguon quyet dinh loi chinh, diem rule, feedback rule-based va arrow target.
- VLM khong duoc dung de quyet dinh toa do arrow vi de tra sai vi tri tren nen anh.
- VLM chi sinh feedback ngan bang tieng Viet dua tren anh hoc vien, anh mau va rule context.
- Arrow label dung tieng Viet co dau va duoc render bang Pillow de tranh loi Unicode cua OpenCV.
- Ket qua test batch mac dinh tat VLM de lap lai, nhanh hon va khong ton API.
## Viec Can Lam Tiep
- Them expected assertions vao batch test, vi du `hv01_mong_cao` phai co `hip_pike`.
- Luu anh artifact cho test run co chon loc thay vi tat ca rep neu can giam dung luong.
- Tach `llm_*` field thanh `vlm_*` trong payload/UI de ten bien khop voi y nghia hien tai.
- Them exercise registry neu mo rong sang bai tap khac.
|