An open API service indexing awesome lists of open source software.

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

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.