Nhận biết khuôn mặtnhân viên để điểm danh thông qua công nghệ nhận diện hình ảnh không chỉ giúptăng cường tính bảo mật mà còn giúp tối ưu hóa quá trình quản lý nhân viên mộtcách hiệu quả
Trang 1ỦY BAN NHÂN DÂN THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC SÀI GÒN KHOA CÔNG NGHỆ THÔNG TIN
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
BÁO CÁO ĐỒ ÁN MÔN HỌC
XÂY DỰNG PHẦN MỀM QUẢN LÝ NHÂN VIÊN BẰNG
NHẬN DIỆN KHUÔN MẶT BẰNG OPENCV
Giảng viên hướng dẫn: Trương Tấn Khoa
Nhóm thực hiện: 14 Danh sách thành viên:
Diệp Thụy An 3122410001 Nguyễn Duy Thái 3122410380 Phan Cảnh Tuấn Đạt 3122410076 Trần Khánh Huyền 3122410156
Thành phố Hồ Chí Minh, năm 2024
Trang 2Lời Mở Đầu
Tiện dụng, nhanh chóng, hiệu quả, chính xác là những yếu tố quan trọng cho việcquản lý nhân lực Việc áp dụng công nghệ thông tin vào quản lý hỗ trợ doanhnghiệp rất nhiều trong vấn đề quản lý nhân lực của mình Nhận biết khuôn mặtnhân viên để điểm danh thông qua công nghệ nhận diện hình ảnh không chỉ giúptăng cường tính bảo mật mà còn giúp tối ưu hóa quá trình quản lý nhân viên mộtcách hiệu quả và tiện lợi
Việc điểm danh để chấm công cho nhân viên bằng hình ảnh khuôn mặt thay vì sửdụng thẻ từ hay vân tay sẽ mang lại độ chính xác cao, giải quyết được vấn đề đểquên thẻ nhân viên, đồng thời công cụ cũng có thể đồng bộ với các phần mềmkhác
Trong đồ án này, chúng em việc xây dựng một phần mềm quản lý nhân viên sửdụng công nghệ nhận diện khuôn mặt, với sự hỗ trợ của thư viện mã nguồn mởOpenCV Phần mềm này không chỉ giúp tự động hóa quy trình ghi danh nhân viên
mà còn cung cấp các tính năng quản lý thông tin cá nhân, chấm công, và kiểm soát
ra vào hiệu quả
Bằng việc kết hợp giữa ứng dụng thực tế và công nghệ tiên tiến, chúng em hy vọngrằng đồ án này sẽ đem lại tính năng, giải pháp hữu ích cho việc quản lý nhân viêntrong các tổ chức và doanh nghiệp, cũng như mở ra tiềm năng phát triển trong lĩnhvực công nghệ nhận diện khuôn mặt và ứng dụng AI vào cuộc sống hiện nay
Trang 3Lời Cảm Ơn
Trong thời gian thực hiện dự án, nhóm 14 xin gửi cảm ơn tới giảng viên TrươngTấn Khoa đã dành thời gian và hướng dẫn, hỗ trợ kiến thức trong quá trình thựchiện phần mềm này Sự hướng dẫn của thầy đã giúp cho nhóm phát triển kỹ nănglập trình và hiểu hơn về ngôn ngữ lập trình Python
Đặc biệt cảm ơn các thành viên trong nhóm đã nỗ lực, đóng góp chia sẻ ý tưởng,dành thời gian công sức để làm việc, tìm tài liệu, các kiến thức hỗ trợ trong việcphát triển nhân diện khuôn mặt, giúp cho đồ án trở nên hoàn thiện và hoàn thành
đồ án thành công
Chúng tôi gửi lời tri ân đến với những người sẽ đọc và đánh giá dự án này Sựquan tâm, đóng góp ý kiến của các bạn là động lực để giúp chúng tôi hoàn thiện,phát triển dự án này tốt hơn sau này
Xin chân thành cảm ơn!
Trang 4Mục Lục
Chương 1 Tổng Quát
1 Giới thiệu
2 Mục tiêu và phạm vi đề tài
2.1 Mục tiêu
2.2 Phạm vi đề tài
3 Khảo sát hệ thống
3.1 Giới thiệu sơ lược
3.2 Nghiệp vụ
Chương 2 Giới Thiệu Python Và Thư Viện OpenCV
1 Giới thiệu ngôn ngữ Python
1.1 Python
1.2 Lịch sử
1.3 Đặc điểm Python
1.3.1 Ưu điểm
1.3.2 Nhược điểm
2 Thư viện OpenCV
3 Thư viện face_recognition
4 Hướng dẫn cài đặt
4.1 Cài đặt Python trên Visual Studio Code (VSCode)
4.2 Cài đặt phiên bản Python về máy
4.3 Cài đặt anaconda dành cho dự án
4.4 Install các module cần thiết đối với dự án
Chương 3 Phân Tích Thiết Kế Hệ Thống
1 Phân tích hệ thống
1.1 Hệ thống chương trình
1.2 Các bảng trong cơ sở dữ liệu
1.2.1 Bảng nhân viên
1.2.2 Bảng kỳ công
1.2.3 Bảng công nhân viên
1.2.4 Bảng kỳ công chi tiết
2 Thiết kế mô hình dữ liệu
2.1 Mô hình hoạt động
2.2 Mô hình thực thể kết hợp ERD
2.3 Mô hình Use Case
2.4 Mô hình quy trình nhận diện khuôn mặt
Chương 4 Xây Dựng Phần Mềm Quản Lý Chấm Công
Chương 5 Kết Luận
1 Kết quả đạt được
2 Các vấn đề đã thực hiện trong đề tài
3 Hướng phát triển
Tài liệu tham khảo
Trang 5Chương 1 Tổng Quát
Công nghệ nhận diện khuôn mặt AI là bước tiến lớn trong lĩnh vực khoa họccông nghệ, được ứng dụng trong nhiều ngành nghề và đem lại nhiều lợi íchtiện dụng, sự chính xác cao, bảo mật tốt
Từ đó nhóm dùng ngôn ngữ Python và ứng dụng công nghệ nhận diện nàyvới đề tài ”Xây dựng phần mềm quản lý nhân viên bằng nhận diện khuônmặt”
3.1 Giới thiệu sơ lược
Phần mềm nhận diện được thiết kế dành cho người quản lý nhân sự sửdụng Phần mềm cho phép nhân viên điểm danh ra vào mỗi ngày làmviệc, thống kê được số ngày đi làm trong tháng của từng nhân viêntheo mỗi kỳ công
Trang 63.2 Nghiệp vụ
Quản lý nhân viên:
Thêm nhân viên mới
Xóa nhân viên
Chỉnh sửa nhân viên
Tìm kiếm nhân viên
Xem thông tin nhân viên
Quản lý kỳ công:
Thêm kỳ công mới
Xóa kỳ công
Tìm kiếm kỳ công
Quản lý lịch làm việc nhân viên:
Xem chi tiết thời gian ra vào
Xem điểm danh của nhân viên theo tháng
Trang 7Chương 2 Giới Thiệu Python Và Thư Viện OpenCV
Python 3.0: phát hành năm 2008, có sự thay đổi trong cú pháp và thiết kế cảithiện sự đơn giản Hiện nay phiên bản của Python là Python 3.7
Bản phân phối Python Anaconda: Python Anaconda thuộc Python 3 nhưngvới Python Anaconda được hỗ trợ nhiều thư viện tiện ích(numpy, scipy,matplotlib, sklearn) Đặc biệt được dùng nhiều trong machine learning, datascience, AI vì cung cấp môi trường phát triển với nhiều thư viện
Thư viện hỗ trợ: Python có nguồn thư viện vô cùng phong phú với số
Trang 8lượng khổng lồ giúp tăng cường khả năng phát triển.
1.3.2 Nhược điểm
Python không có hỗ trợ vùng lặp do…while và switch…case do đókhi giải quyết phức tạp thì việc dùng if else rất nhiều
Python có tốc độ xử lý nhanh nhưng vẫn kém hơn Java, C++
OpenCV ( Open Source Computer Vision Library ) được bắt đầu từ Intel năm 1999bởi Gary Bradski là thư viện nguồn mở cho Computer Vision và MachineLearning
Cộng đồng sử dụng và phát triển OpenCV khá lớn trên toàn cầu Với nhu cầu thếgiới đang tăng dần với xu hướng về sử dụng computer vision các công ty côngnghệ Cộng đồng OpenCV có số lượng đông đảo hơn 47 nghìn người dùng Điềunày chứng tỏ việc các ứng dụng, khả năng của OpenCV mang lại cho nhiều lậptrình viên cơ hội phát triển các sản phẩm với nhiều lĩnh vực, công nghệ mới
OpenCV cung cấp các công cụ và thư viện để phân tích và xử lý ảnh, video Được
sử dụng trong nhiều lĩnh vực về thị giác máy tính, robot và xe tự động hiện nay.Đặc điểm:
OpenCV được hỗ trợ trên nhiều ngôn ngữ lập trình khác nhau như C++,Python, Java
OpenCV được ứng dụng nhiều trong việc kiểm tra và giám sát tự động, pháttriển các công nghệ phân tích hình ảnh, tìm kiếm và phục hồi hìnhảnh/video
Thư viện OpenCV hỗ trợ:
VideoCapture(0): dùng để đọc các khung hình từ một tệp video hoặc từ mộtthiết bị đầu vào hình ảnh như camera trên máy, trả về 2 tham số là biến xácđịnh kiểm tra boolean và cửa sổ hiển thị, read() dùng để đọc khung hình từVideoCapture(); release() để đóng VideoCapture(), giải phóng tài nguyên.Imread(path, flag): đọc đường dẫn và tham số flag (-1,0,1) đại diện cho ảnh
có màu hoặc không và kênh alpha (RGB/RGBA)
Imshow(title,img): xuất hình ảnh ra màn hình
Imwrite(path,img): đưa các hình ảnh vào folder đường dẫn
Resize(frame,size): thay đổi kích thước ảnh được truyền vào
CvtColor(image,change): đổi định dạng hình ảnh được truyền vào
PutText(frame,text,location): hiển thị text lên cửa sổ hình ảnh
Trang 9Rectangle(frame,location,border): vẽ hình vuông lên vị trí đã xác định lêncửa sổ hình ảnh.
Face-recognition là thư viện nhận diện và xử lý khuôn mặt bằng ngôn ngữ Python.Đây là thư viện dễ sử dụng với độ chính xác cao 99,38% theo LFW ( LabeledFaces in the Wild) Thư viện face-recognition sử dụng C++ DLib kết hợp với côngnghệ nhận diện và công nghệ máy học (Machine learning)
Phiên bản mới nhất của Face-recognition hiện tại là opencv-face-recognition 1.1.1vào 25/2/2024 với các khả năng mới và kỹ thuật nhận diện nâng cao, bảo mật và cómức độ chính xác cao so với 99,99%, đứng thứ 8 trong top đánh giá của NIST tínhđến năm 2022
Face-recognition hiện có rất nhiều khóa học vì thế nên rất dễ học, sử dụng, dễ tiếpcận đối với người mới học lập trình nhận diện bằng Python
Face-recognition hỗ trợ các phương thức cho việc nhận diện:
load_image_file(path): Tải hình ảnh từng file trên máy có chứa khuôn mặtcần nhận dạng
face_encodings(image): Giúp mã hóa hình ảnh gửi vào phương thức và trả
về mã hóa các điểm trên khuôn mặt
face_locations(image): Xác định vị trí khuôn mặt trong ảnh trả về tọa độhình chữ nhật của khuôn mặt
compare_faces(imgEncodeCheck, imgEncode): So sánh hai phần mã hóagiữa ảnh gốc và ảnh hiện tại đang xét để kiểm tra đúng khuôn mặt
face_distance(imgEncodeCheck, imgEncode): Cho biết khoảng cách (sai số)giữa các bức ảnh, mức sai số càng thấp thì độ chính xác giữa các bức ảnhđang xét sẽ càng cao
4.1 Cài đặt Python trên Visual Studio Code (VSCode)
Bước 1: Truy cập vào https://code.visualstudio.com/download và chọn càiđặt phù hợp với hệ điều hành của máy
Bước 2: Thực hiện quá trình Set up và đường dẫn cho VSCode để tiến hànhcài đặt Khởi động VSCode lên với màn hình ban đầu như hình
Trang 10Bước 3: Vào mục Extensions (Ctrl+Shift+X) và gõ từ khóa Python vào ô tìmkiếm, tải các extensions hỗ trợ cho Python trên VScode
4.2 Cài đặt phiên bản Python về máy
Bước 1: Truy cập vào https://ww.python.org/ và tải phiên bản python3.10.11 về máy ( các phiên bản mới hơn hiện chưa hỗ trợ cho việc sử dụng thưviện OpenCV và các thư viện khác)
Bước 2: Mở và thực hiện quá trình cài đặt phiên bản Python
Trang 114.3 Cài đặt anaconda dành cho dự án
Bước 1: truy cập vào https://www.anaconda.com/download/success để tảianaconda về máy
Bước 2: Mở file đã tải và bắt đầu thực hiện quá trình cài đặt
Trang 12Bước 3: Thay đổi lựa chọn thành All Users và tiếp tục next.
Trang 13Bước 4: chọn đường dẫn cài đặt và tích chọn Register Anaconda as thesystem Python 3.10 để tiếp tục install.
Trang 144.4 Install các module cần thiết đối với dự án
Bước 1: Mở VSCode đã tải từ trước và chọn More ở phần Welcome, sau đónhập Python vào thanh tìm kiếm và chọn “Get started with Python”
Trang 15Bước 2: Chọn Create a Python Evironment và chọn create với Conda.
Trang 16Bước 3: Lựa chọn phiên bản Python đã tải từ trước và chờ hệ thống tạo môitrường.
Sau khi tạo thành công, 1 file conda sẽ xuất hiện Việc Setup môi trườnganaconda đã thành công
Bước 4: Ở phần terminal của VSCode thực hiện quá trình tải các thư việncần thiết đối với dự án
pip install cmake
conda install -c conda-forge dlib
conda install -c menpo opencv
pip install face_recognition
Trang 17pip install opencv-pythonpip install tk
pip install mysql-connector-pythonViệc sử dụng môi trường Anaconda thay cho lập trình tạo file py bình thường trênVSCode là bởi Anaconda hỗ trợ rất nhiều tính năng chuyên dụng dành cho DataScience và được cài sẵn rất nhiều thư viện, đặc biệt là các thư viện liên quan đếnMachine Learning, Data Science như numpy, matplotlib, nên môi trườngAnaconda rất thích hợp cho việc xây dựng các hệ thống, dự án cần các thư việnnày
Trang 18Chương 3 Phân Tích Thiết Kế Hệ Thống
Nhân viên của công ty sẽ đăng ký thông tin làm việc với người quản lý, mỗi ngày
sẽ thực hiện việc chấm công của hệ thống bằng cách nhân diện qua khuôn mặtnhân viên
Các file chính của hệ thống gồm: main.py, ThongTinDiemDanh.py,DangKyGUI.py, QuanLyGUI.py, ThongKeGUI.py, LichChamCongGUI.py,capCheck.py, database_manager.py
Bên cạnh các file chính trên là thư mục chứa hình ảnh của từng nhân viên, fileđiểm danh
File main.py: là file chính chứa phần giao diện đăng nhập, giao diện chấm công vàgiao diện chính của hệ thống Giao diện đăng nhập cho phép người quản lý truycập vào hệ thống khi nhập đúng tài khoản và mật khẩu Giao diện chấm công dànhcho nhân viên khi thực hiện điểm danh mỗi ngày và hiện các thông tin xác thựcđúng là nhân viên
File DangKyGUI.py: chứa giao diện đăng ký thông tin cho nhân viên khi mới vào
hệ thống, tạo folder chứa ảnh nhân viên cho quá trình nhận diện
File QuanKyGUI.py: chứa giao diện thông tin của nhân viên đã đăng ký, gồm cácchức năng chỉnh sửa, cập nhật, tìm kiếm nhân viên hiện có trong hệ thống, xemảnh của nhân viên đã chụp lúc đăng ký
File ThongKeGUI.py: Xem được trong tháng đó nhân viên đã làm được bao giờgiờ làm việc, tổng thời gian làm việc và trung bình cộng thời gian của các nhânviên trong công ty, biết được tỉ lệ đi trễ chiếm bao nhiêu phần trăm trong tháng
File LichChamCongGUI.py: chứa giao diện lịch chấm công của hệ thống đã khởitạo, các lịch này sẽ cố định việc bắt đầu điểm danh vào ngày nào trong tháng và tạo
kỳ công dành cho nhân viên
File ThongTinDiemDanh.py: chứa giao diện nhân viên chấm công ra, vào mỗingày trong tháng Có thể tìm kiếm theo thông tin nhân viên đã chấm công
Trang 19File database_manager.py: file xây dựng chứa các câu lệnh truy xuất dữ liệu từdatabase và kết nối các dữ liệu trong bảng để thực hiện quá trình xây dựng các thaotác quản lý.
1.2 Các bảng trong cơ sở dữ liệu
Cơ sở dữ liệu của hệ thống quản lý chấm công gồm 4 bảng dữ liệu chính:
1.2.1 Bảng nhân viên
Hình 1 Dữ liệu bảng nhân viên
1.2.2 Bảng kỳ công
Hình 2 Dữ liệu bảng kỳ công
1.2.3 Bảng công nhân viên
Hình 3 Dữ liệu bảng công nhân viên
Trang 201.2.4 Bảng kỳ công chi tiết
Hình 4 Dữ liệu bảng kỳ công chi tiết
2.1 Mô hình hoạt động
Mô hình hoạt động của quá trình chấm công nhân viên gồm quy trình chính
là xử lý thông tin của nhân viên khi bắt đầu làm việc Nhân viên sẽ đăng kýcác thông tin cá nhân vào hệ thống, thực hiện chụp ảnh nhận diện để đưa vàokho dữ liệu
Đối với nhân viên đã có trong hệ thống nhưng thông tin cá nhân sai, hoặcảnh có vấn đề thì có thể chỉnh sửa lại thông tin cá nhân, hoặc chụp lại ảnhnếu ảnh chụp đang không rõ nét
Khi nhân viên thực hiện chấm công thì thông tin thời gian vào sẽ được đưavào dữ liệu của hệ thống Với trường hợp nhân viên xin phép nghỉ và đượcduyệt, sẽ tính công làm việc cho nhân viên để xác định ngày nghỉ đó có phép
và tính lại công cá nhân của nhân viên đó
Trang 21Hình 5 Mô hình hoạt động chấm công
Kỳ công: thông tin của kỳ công vào mỗi tháng trong năm, số lượng ngày cóthể làm việc trong tháng
Kỳ công chi tiết: thông tin các ngày đi làm trong mỗi tháng của nhân viên,lưu trữ những ngày đi đủ, ngày nghỉ có phép và số ngày công của nhân viên.Công nhân viên: thông tin của nhân viên vào mỗi ngày làm việc trong tháng,
Trang 22lưu trữ thời gian ra, thời gian vào trong quá trình làm việc tại doanh nghiệp,công ty.
Hình 6 Mô hình thực thể kết hợp ERD
2.3 Mô hình Use Case
Trang 23Hình 7 Mô hình Use Case
2.4 Mô hình quy trình nhận diện khuôn mặt
Quy trình chấm công chia làm hai giai đoạn Giai đoạn đăng ký, người nhân viênthực hiện việc chụp ảnh trên camera và hệ thống đưa ảnh vào kho dữ liệu ảnh Mỗinhân viên sẽ có 5 bức ảnh của bản thân, ảnh trên cam vào lúc đăng ký được xử lýbằng face_locations() đảm bảo việc lưu ảnh sẽ chắc chắn có chứa khuôn mặt, giúpgiảm số lượng tạo hình ảnh quá nhiều để tối ưu dữ liệu lưu trữ
Giai đoạn chấm công, hình ảnh từ kho ảnh sẽ đưa vào danh sách và thực hiện việcxác định khuôn mặt lần nữa để đảm bảo sự chính xác của dữ liệu Face_locations()chuyển đổi ảnh màu khuôn mặt về màu xám, sau đó mạng noron tích chập(Convolution) sẽ phát hiện đặc điểm khuôn mặt trong ảnh, với các đặc điểm củakhuôn mặt, thuật toán sẽ xác định vị trí của khuôn mặt như mắt, mũi, miệng,khoảng cách giữa các bộ phận đó và trả về tọa độ 4 điểm giúp xác định hình chữnhật bao quanh khuôn mặt
Sau khi đã có dữ liệu vị trí của khuôn mặt của từng bức ảnh, face_encoding() sẽthực hiện mã hóa hình ảnh khuôn mặt, phương thức trả về mã hóa là dạng vectorchứa 128 chiều là các giá trị đặc trưng khuôn mặt, đưa các ảnh khuôn mặt trongkho ảnh thành các vector mã hóa là các giá trị số, sau đó lần lượt so sánh với ảnh
từ camera được chụp và mã hóa liên tục bằng compare_faces() và tính độ sai số vớiface_distance() để tìm ra ảnh có độ chính xác cao nhất với người đang thực hiệnnhân dạng
Hình 8 Mô hình quy trình nhận diện khuôn mặt