Xây Dựng Hệ Thống Phát Hiện Ngã Thời Gian Thực Bằng MediaPipe & Machine Learning

Xây Dựng Hệ Thống Phát Hiện Ngã Thời Gian Thực Bằng MediaPipe & Machine Learning

2026-04-11 5 min đọc
python machine-learning computer-vision mediapipe opencv fall-detection random-forest deep-learning AI healthcare

Đặt Vấn Đề

Té ngã là một trong những nguyên nhân hàng đầu gây thương tích nghiêm trọng ở người cao tuổi. Theo thống kê, hơn 30% người trên 65 tuổi bị ngã ít nhất một lần mỗi năm, và phần lớn các ca tử vong liên quan đến ngã xảy ra do không được phát hiện và cấp cứu kịp thời.

Câu hỏi đặt ra: Liệu có thể xây dựng một hệ thống tự động phát hiện ngã chỉ từ camera thường, không cần thiết bị đặc biệt nào?

Dự án này là câu trả lời của tôi — một pipeline hoàn chỉnh từ xử lý video thô, trích xuất đặc trưng sinh cơ học, huấn luyện và so sánh nhiều mô hình ML, đến hệ thống chạy thời gian thực qua webcam.

Hệ thống phát hiện ngã thực tế - FALL DETECTED


Tổng Quan Kiến Trúc

Hệ thống được thiết kế theo kiến trúc pipeline 3 bước:


Mỗi bước độc lập, đầu ra của bước trước là đầu vào của bước sau. Toàn bộ quy trình có thể tái tạo chỉ bằng 3 lệnh terminal.


Bộ Dữ Liệu: GMDCSA-24 v2.1

Tôi sử dụng bộ dữ liệu học thuật mở GMDCSA-24 v2.1 (Ghent Multimodal Data Collection Study for Fall Detection Analysis) — một trong những bộ dữ liệu chất lượng cao và có chú thích chi tiết nhất cho bài toán phát hiện ngã:


Sau khi xử lý, tôi thu được 2.729 mẫu cửa sổ thời gian từ toàn bộ video.


Kỹ Thuật Cốt Lõi: Cửa Sổ Trượt + Đặc Trưng Sinh Cơ Học

Cơ Chế Cửa Sổ Trượt (Sliding Window)

Thay vì phân tích từng khung hình riêng lẻ, tôi xử lý chuỗi thời gian — điều này giúp mô hình "nhìn thấy" chuyển động chứ không chỉ tư thế tĩnh:


Việc lấy mẫu mỗi 2 khung giúp giảm 50% tải tính toán trong khi vẫn bảo toàn đầy đủ động lực học chuyển động của cơ thể.

Frame Sampling - Cơ chế lấy mẫu cửa sổ trượt

32 Đặc Trưng Sinh Cơ Học

Điểm đặc biệt của dự án này là tôi không dùng tọa độ thô của 33 điểm xương cốt (66 giá trị x,y) mà thiết kế các đặc trưng dựa trên sinh cơ học của cơ thể người khi ngã:


Mỗi đặc trưng được tổng hợp qua 4 thống kê (mean, std, max, min) trên toàn cửa sổ, cộng thêm 4 đặc trưng đỉnh spike, tổng cộng 32 chiều.

Ưu điểm của cách tiếp cận này: tọa độ MediaPipe được chuẩn hóa về [0,1] — bất biến với khoảng cách đặt camera và độ phân giải màn hình.

Báo cáo kỹ thuật chi tiết dự án


Huấn Luyện: LOSO-CV Và 5 Mô Hình

Tại Sao Dùng Leave-One-Subject-Out?

K-Fold thông thường có thể vô tình đặt dữ liệu của cùng một người vào cả tập train lẫn test — khiến kết quả đánh giá quá lạc quan. LOSO-CV nghiêm ngặt hơn: mỗi fold kiểm tra trên một đối tượng hoàn toàn mới chưa từng xuất hiện trong quá trình huấn luyện. Với 4 đối tượng = 4 fold — đây là đánh giá sát với thực tế triển khai nhất.

So sánh kết quả các mô hình ML

Kết Quả So Sánh 5 Thuật Toán

Random Forest (200 cây, max_depth=10) đạt kết quả tốt nhất với accuracy 91.1% và F1-score cho lớp Ngã là 0.767. SVM (RBF kernel) bám sát với 90.0% accuracy và F1 0.762 — đặc biệt có recall cao hơn (0.800), tức phát hiện được nhiều ca ngã thật hơn nhưng đổi lại precision thấp hơn. Gradient Boosting, KNN và Logistic Regression cũng được thử nghiệm để có cơ sở so sánh toàn diện.

Random Forest được chọn vì F1-score cao nhất cho lớp Ngã — đây là metric quan trọng hơn accuracy tổng trong bài toán y tế, nơi bỏ sót ca ngã thật (false negative) nguy hiểm hơn báo nhầm (false positive).

Một lưu ý quan trọng: tôi áp dụng class_weight="balanced" và chuẩn hóa đặc trưng theo từng fold — không phải toàn bộ dataset — để tránh rò rỉ dữ liệu.

Kết quả LOSO-CV chi tiết Random Forest


Nhận Diện Thời Gian Thực: Chiến Lược Xác Nhận Kép

Chạy mô hình ML đơn thuần trên webcam sẽ tạo ra rất nhiều cảnh báo nhầm — người cúi xuống nhặt đồ, ngồi xuống ghế... đều có thể bị phát hiện là "ngã". Tôi giải quyết bằng cơ chế xác nhận kép:

Lớp 1 — Classifier: Xác suất dự đoán phải đạt ≥ 0.55 (không phải 0.5 mặc định), đồng thời yêu cầu 2 cửa sổ liên tiếp đều dương tính để loại bỏ false positive đơn lẻ.

Lớp 2 — Physics-based Spike Detection: Kiểm tra đỉnh vận tốc hông vượt ngưỡng 0.025 đơn vị chuẩn hóa, với buffer 15 khung hình cho phân tích spike — ổn định hơn với noise camera.

Chỉ khi cả hai lớp đều xác nhận, hệ thống mới phát cảnh báo — overlay đỏ hiển thị 3 giây, đủ thời gian để người giám sát phản ứng.

Slide Inference Real-time & Dual-Confirmation

Kết quả phát hiện ngã thực tế - P(Fall)=0.98


Hệ Thống Logging Đầy Đủ

Tôi xây dựng TeeLogger — ghi log kép đồng thời ra console và file. Mỗi phiên chạy tự động tạo ra file .log văn bản chi tiết với timestamp và file .json chứa metrics có cấu trúc dễ parse. Điều này cho phép theo dõi lịch sử thực nghiệm và so sánh giữa các lần chạy mà không cần ghi chép thủ công.


Bài Học Rút Ra

1. Đặc trưng tốt quan trọng hơn mô hình phức tạp

Random Forest với 32 đặc trưng sinh cơ học đạt 91.1% — tốt hơn nhiều so với việc dùng tọa độ thô 66 chiều vào deep learning. Feature engineering thông minh vẫn là chìa khóa trong bài toán chuỗi thời gian với dữ liệu nhỏ.

2. Đánh giá đúng cách còn quan trọng hơn độ chính xác cao

LOSO-CV cho kết quả thấp hơn K-Fold thông thường, nhưng đáng tin cậy hơn nhiều. Một mô hình 85% LOSO-CV tốt hơn mô hình 95% K-Fold trong bài toán này.

3. False positive là kẻ thù của hệ thống cảnh báo

Người dùng sẽ tắt hệ thống ngay nếu nó báo nhầm quá nhiều. Cơ chế xác nhận kép (classifier + physics) là giải pháp thực tế — không hoàn hảo về mặt lý thuyết nhưng hoạt động tốt trong thực tế.

4. Tọa độ chuẩn hóa = bất biến = ổn định

MediaPipe trả về tọa độ [0,1] bất biến với khoảng cách camera. Đây là lý do hệ thống hoạt động tốt trên nhiều góc đặt camera khác nhau mà không cần calibration.


Hướng Phát Triển Tiếp Theo



Kết Luận

Dự án này chứng minh rằng một hệ thống phát hiện ngã thực tế không cần phần cứng đắt tiền hay mô hình deep learning phức tạp. Với camera USB thông thường, MediaPipe miễn phí và Random Forest nhẹ nhàng, ta có thể xây dựng hệ thống đạt độ chính xác 91.1% — đủ để triển khai thực tế trong môi trường nhà dân hoặc cơ sở y tế nhỏ.

Toàn bộ mã nguồn và pipeline hoàn toàn có thể tái tạo chỉ bằng 3 lệnh. Đây là điều tôi coi trọng nhất — khoa học tái tạo được.

← Quay lại Blogs