
# Ứng dụng AI trong xác thực khuôn mặt và LSTM trong nhận diện & đếm động tác gập bụng từ video - SitUpFaceLogin
SitUpFaceLogin là một dự án sử dụng nhận diện khuôn mặt và nhận diện tư thế để đếm số lần gập bụng. Hệ thống sẽ xác thực người dùng bằng khuôn mặt trước khi theo dõi số lần tập luyện và lưu trữ kết quả vào MySQL được hướng dẫn và góp ý bởi 2 giảng viên LÊ TRUNG HIẾU và NGUYỄN VĂN NHÂN thuộc KHOA CÔNG NGHỆ THÔNG TIN - ĐẠI HỌC ĐẠI NAM "Dainam University".
| STT | Tên sinh viên | Mã sinh viên | Nhóm | Lớp |
|---|---|---|---|---|
| 1 | Nguyễn Hữu Huy | 1671020139 | 10 | CNTT 16-01 |
| 2 | Đặng Lê Hoàng Anh | 1671020010 | 10 | CNTT 16-01 |
| 3 | Nguyễn Văn Nguyên | 1671020229 | 10 | CNTT 16-01 |
Tài liệu này hướng dẫn chi tiết cách cài đặt và chạy hệ thống.
💡 Công nghệ sử dụng:
- Face Recognition: Nhận diện khuôn mặt
- OpenCV: Xử lý hình ảnh và video
- MediaPipe/OpenPose: Trích xuất keypoints
- LSTM (Long Short-Term Memory): Nhận diện động tác gập bụng
- Flask: API backend
- MySQL: Lưu trữ dữ liệu
- Python 3.7 trở lên
- MySQL Server
- OpenCV, MediaPipe, TensorFlow
- Các thư viện Python cần thiết (liệt kê trong
requirements.txt)
Chạy lệnh sau để cài đặt các thư viện Python yêu cầu:
pip install -r requirements.txt- Cài đặt MySQL Server (nếu chưa có).
- Đảm bảo MySQL đang chạy trên hệ thống.
Mở MySQL và chạy lệnh sau để tạo cơ sở dữ liệu fitness_tracking:
CREATE DATABASE fitness_tracking;Kết nối đến cơ sở dữ liệu fitness_tracking và tạo các bảng sau:
USE fitness_tracking;
-- Bảng lưu thông tin người dùng nhận diện khuôn mặt
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
encoding BLOB NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Bảng lưu lịch sử nhận diện khuôn mặt
CREATE TABLE IF NOT EXISTS face_recognition_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
recognized_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL
);
-- Bảng lưu lịch sử bài tập gập bụng
CREATE TABLE IF NOT EXISTS situp_sessions (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
situp_count INT NOT NULL,
result TINYINT(1) NOT NULL, -- 1 means "passed", 0 means "not passed"
session_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL
);
Mở file app.py, face_data_collector.py và cập nhật thông tin kết nối MySQL:
DB_CONFIG = {
"host": "localhost",
"user": "root",
"password": "your_password",
"database": "fitness_tracking"
}🔹 Lưu ý: Thay your_password bằng mật khẩu MySQL của bạn.
Chạy script face_data_collector.py để thu thập dữ liệu khuôn mặt:
python face_data_collector.pyHoặc có thể sử dụng API Flask để thu thập dữ liệu khuôn mặt:
curl -X POST http://localhost:5000/collect_face_data -H "Content-Type: application/json" -d '{"name": "TênCủaBạn"}'Sau khi thu thập ảnh khuôn mặt, chạy notebook train_face.ibynb để huấn luyện mô hình nhận diện:
🔹 Mô hình sau khi huấn luyện sẽ được lưu vào face_model.pkl.
- Ghi lại các video gập bụng từ 2 góc chính là góc 45 độ và góc ngang.
- Độ phân giải tối thiểu 720p, tốc độ khung hình 30 FPS.
- Mỗi video có thể kéo dài 15-60 giây.
| Góc ngang | Góc 45 độ |
|---|---|
![]() |
![]() |
- Tạo thư mục
dataset/videos. - Lưu các video vào thư mục này.
- Định dạng video khuyến nghị:
.mp4hoặc.avi.
Chạy script frame.py để trích xuất keypoints từ video tập luyện:
python frame.py🔹 Hệ thống sử dụng MediaPipe/OpenPose để trích xuất keypoints từ video.
Chạy script keypoints.py để xử lý dữ liệu keypoints trước khi đưa vào mô hình LSTM:
python keypoints.py🔹 Dữ liệu đầu ra sẽ là chuỗi thời gian (time series) dùng để huấn luyện mô hình LSTM.
Mở và chạy notebook train_lstm.ipynb để huấn luyện mô hình LSTM nhận diện số lần gập bụng.
Sau khi huấn luyện, mô hình sẽ được lưu dưới dạng:
Model_situp_lstm.h5
Chạy Flask API để khởi động hệ thống:
python app.pySau khi chạy, mở trình duyệt và truy cập:
http://localhost:5000
🔹 Giao diện chính của ứng dụng sẽ hiển thị tại đây.
| Endpoint | Phương thức | Mô tả |
|---|---|---|
/ |
GET | Trang chính |
/video_feed |
GET | Luồng video từ camera |
/confirm |
POST | Xác nhận người dùng |
/start_counting |
POST | Bắt đầu đếm số lần gập bụng |
/continue_set |
POST | Tiếp tục sang set tập mới |
/change_user |
POST | Đổi người dùng |
/save |
POST | Lưu số lần gập bụng vào database |
/status |
GET | Lấy trạng thái hiện tại |
/pause |
POST | Tạm dừng đếm |
/resume |
POST | Tiếp tục đếm sau khi tạm dừng |
/logout |
POST | Đăng xuất người dùng |
/user_history |
GET | Xem lịch sử tập luyện của người dùng |
✅ Kiểm tra webcam: Đảm bảo webcam đang hoạt động trước khi chạy hệ thống.
✅ Chạy MySQL Server: Hệ thống cần MySQL để lưu dữ liệu tập luyện.
✅ Điều chỉnh tham số: Có thể thay đổi thời gian chờ và các tham số khác trong app.py để phù hợp với yêu cầu thực tế.
1️⃣ Nhận diện người tập luyện (📷 Camera)
- Face Recognition để xác thực người dùng
- Nếu xác thực thành công → Tiếp tục sang bước đếm số lần gập bụng
- Nếu thất bại → Cho đếm số lần gập bụng nhưng không lưu vào cơ sở dữ liệu kết quả
2️⃣ Nhận diện động tác gập bụng
- Trích xuất keypoints từ video bằng MediaPipe/OpenPose
- Ghép thành dữ liệu chuỗi thời gian (time series)
- Đưa vào mô hình LSTM để đếm số lần gập bụng
3️⃣ Lưu kết quả vào MySQL
- Lưu thông tin người tập, số lần gập bụng, thời gian tập luyện
- Hiển thị lịch sử tập luyện khi cần
🔥 Chúc bạn triển khai thành công dự án SitUpFaceLogin! 🔥 🚀





