https://github.com/wijez/face_recognition_tool
Timekeeping
https://github.com/wijez/face_recognition_tool
computer-vision
Last synced: about 1 month ago
JSON representation
Timekeeping
- Host: GitHub
- URL: https://github.com/wijez/face_recognition_tool
- Owner: wijez
- Created: 2024-06-18T16:19:47.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-06-21T03:00:58.000Z (about 2 years ago)
- Last Synced: 2025-12-07T12:27:28.551Z (7 months ago)
- Topics: computer-vision
- Language: Python
- Homepage:
- Size: 43.9 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Face_Recognition_Tool
Một công cụ đơn giản bằng Python để nhận dạng khuôn mặt và điểm danh sử dụng thư viện `face_recognition` (dựa trên dlib) và OpenCV.
Nội dung
- main.py — so sánh hai ảnh tĩnh, hiển thị khung khuôn mặt và khoảng cách giữa 2 encoding
- attendance.py — mở webcam, nhận diện theo ảnh mẫu trong thư mục `training/` và ghi thời gian điểm danh vào `output/data.csv`
Yêu cầu
- Python 3.7+
- CPU có khả năng build C/C++ (nếu cần build dlib từ nguồn) hoặc dùng wheel/channels phù hợp
- Thư viện Python:
- numpy
- opencv-python
- face_recognition (cần dlib)
Cài đặt (khuyến nghị dùng virtualenv hoặc conda)
1. Tạo môi trường ảo (ví dụ với venv)
- python -m venv .venv
- source .venv/bin/activate (Linux/macOS) hoặc .venv\Scripts\activate (Windows)
2. Cài dependencies cơ bản
- pip install --upgrade pip
- pip install numpy opencv-python
3. Cài dlib / face_recognition
- Thử cài trực tiếp (nếu hệ thống có build tools):
- pip install dlib
- pip install face_recognition
- Nếu gặp lỗi khi build dlib:
- Trên Windows: cài Visual Studio Build Tools hoặc dùng wheel sẵn (tìm từ các nguồn wheel tương thích với phiên bản Python).
- Hoặc dùng conda: conda install -c conda-forge dlib face_recognition
- Lưu ý: face_recognition phụ thuộc nặng vào dlib; nếu bạn chỉ thử nghiệm, tìm wheel phù hợp thường nhanh hơn.
Cấu trúc thư mục mẫu
- training/
- alice.jpg
- bob.jpg
(Tên file không chứa phần mở rộng chính là tên đối tượng được sử dụng để ghi điểm danh)
- output/
- data.csv (script sẽ mở file này để ghi; tốt nhất tạo trước hoặc script sẽ ghi nếu file tồn tại)
- main.py
- attendance.py
- README.md
Chuẩn bị dữ liệu
- Đặt ảnh mẫu vào `training/`. Mỗi ảnh tương ứng 1 người (hiện tại code lấy encoding[0] — giả định mỗi ảnh chứa đúng 1 khuôn mặt).
- Tên file (không bao gồm phần mở rộng) sẽ là tên được hiển thị và ghi vào file CSV.
Cách chạy
- So sánh 2 ảnh tĩnh (main.py)
- python main.py
- main.py hiện tại sử dụng đường dẫn hardcode:
- "training/lizkimcuong.jpg" và "training/bichphuong2.jpg"
- Kết quả: hiển thị 2 cửa sổ ảnh với khung khuôn mặt và in kết quả so sánh + khoảng cách (face distance)
- Điểm danh realtime từ webcam (attendance.py)
- Đảm bảo có thư mục `training/` với ảnh mẫu và thư mục `output/` (với file data.csv)
- python attendance.py
- Mở webcam (device 0), nhận diện các khuôn mặt trên khung hình, nếu trùng khớp sẽ:
- Vẽ khung và tên lên khung hình
- Ghi một dòng mới vào `output/data.csv` theo định dạng: `Name,HH:MM:SS`
- Nhấn `q` để thoát
Giải thích kỹ thuật ngắn gọn
- face_recognition.face_locations: tìm vị trí khuôn mặt trong ảnh
- face_recognition.face_encodings: chuyển khuôn mặt thành vector đặc trưng (encoding)
- face_recognition.compare_faces: so sánh encoding để trả True/False
- face_recognition.face_distance: trả khoảng cách (số càng nhỏ => càng giống)
- attendance.py giảm kích thước khung hình xuống 0.25 trước khi xử lý để cải thiện tốc độ
Vấn đề thường gặp & khắc phục
- Lỗi cài đặt dlib: cần cài build tools (Windows: Visual C++ Build Tools; Linux: build-essential, cmake); hoặc dùng conda/ prebuilt wheel.
- Webcam không mở: kiểm tra device index (thay `cv2.VideoCapture(0)` thành `1` hoặc khác), kiểm tra quyền truy cập camera.
- Ảnh mẫu không có face => face_encodings trả rỗng. Kiểm tra ảnh, ánh sáng, góc chụp.
- Nhiều khuôn mặt trong ảnh mẫu: hiện tại code chỉ lấy encoding[0]; nếu ảnh có nhiều khuôn mặt, nên tách ảnh hoặc chọn chính xác khuôn mặt mẫu.
- Hiệu năng chậm: giảm kích thước ảnh, chạy trên máy có GPU/DNN hoặc dùng model nhẹ hơn.
Gợi ý cải tiến (nên làm)
- Chuyển đường dẫn ảnh sang tham số CLI hoặc config file (ví dụ argparse).
- Tự động tạo thư mục `output/` và file `data.csv` nếu chưa tồn tại.
- Thêm ngưỡng (threshold) cho face_distance để điều chỉnh độ chính xác.
- Thêm logging thay vì print.
- Hỗ trợ nhiều ảnh mẫu / đa encoding cho từng người để tăng độ chính xác.
- Xử lý trường hợp nhiều khuôn mặt trong 1 ảnh mẫu.
- Thêm unit tests và hướng dẫn deploy lên Raspberry Pi (nếu muốn dùng offline).
Mẫu file CSV (output/data.csv)
Name,Time
ALICE,08:45:12
BOB,08:47:02
Giấy phép
- Không có file LICENSE trong repo gốc. Nếu bạn muốn công khai/ sử dụng lại, hãy thêm file LICENSE phù hợp (ví dụ MIT).
Đóng góp
- Bạn có thể mở issue hoặc gửi PR để thêm tính năng: cấu hình, cải thiện cài đặt dlib, hỗ trợ nhiều khuôn mặt/multi-encoding, v.v.