Skip to content

danglehoanganh/SitUpFaceLogin

 
 

Repository files navigation

Poster_Nhom10 (1)Poster_Nhom10 (1)# Ứ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

DaiNam University Logo AIoTLab Logo

Made by AIoTLab Fit DNU DaiNam University

Giới thiệu

SitUpFaceLogin là một dự án sử dụng nhận diện khuôn mặtnhậ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ẾUNGUYỄN VĂN NHÂN thuộc KHOA CÔNG NGHỆ THÔNG TIN - ĐẠI HỌC ĐẠI NAM "Dainam University".

Thành viên tham gia

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 đặtchạy hệ thống.

Mô hình hoạt động

image


💡 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

Yêu cầu hệ thống

  • 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)

Hướng dẫn cài đặt

1. Cài đặt các thư viện cần thiết

Chạy lệnh sau để cài đặt các thư viện Python yêu cầu:

pip install -r requirements.txt

2. Thiết lập cơ sở dữ liệu MySQL

2.1. Cài đặt MySQL Server

  • Cài đặt MySQL Server (nếu chưa có).
  • Đảm bảo MySQL đang chạy trên hệ thống.

2.2. Tạo cơ sở dữ liệu

Mở MySQL và chạy lệnh sau để tạo cơ sở dữ liệu fitness_tracking:

CREATE DATABASE fitness_tracking;

2.3. Tạo các bảng cần thiết

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
);

2.4. Cấu hình kết nối MySQL trong app.py

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.


3. Thu thập dữ liệu khuôn mặt

Chạy script face_data_collector.py để thu thập dữ liệu khuôn mặt:

python face_data_collector.py

Hoặ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"}'

4. Huấn luyện mô hình nhận diện khuôn mặt

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.


5. Chuẩn bị video làm dataset

5.1. Thu thập video gập bụng

  • Ghi lại các video gập bụng từ 2 góc chính là góc 45 độ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 độ
Góc ngang Góc 45 độ

5.2. Lưu video vào thư mục dataset

  • 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ị: .mp4 hoặc .avi.

6. Trích xuất Keypoints từ video

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.


7. Chuẩn bị dữ liệu keypoints

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.


8. 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

9. Chạy ứng dụng

Chạy Flask API để khởi động hệ thống:

python app.py

Sau 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.


Các API Endpoint

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

Ghi chú quan trọ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ế.


Mô hình tổng quan của hệ thống

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

Poster

Poster_Nhom10 (1)

🔥 Chúc bạn triển khai thành công dự án SitUpFaceLogin! 🔥 🚀

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Jupyter Notebook 82.6%
  • Python 11.9%
  • HTML 5.5%