Bằng việc sử dụng một số thư viện về nhận dạng khuôn mặt đồng thời thêm vào một số cơ chế nhằm tăng độ tin cậy của kết quả, đồ án đã hoàn thành một sản phẩm có thể sử dụng ngay trong các doanh nghiệp vừa và nhỏ hoặc quy mô điểm danh lớp học. Đồng thời với nó website quản lý nhân sự tốt sẽ giúp cải thiện tối đa hiệu năng làm việc của doanh nghiệp, giảm bớt công việc chân tay để tập trung vào phát triển những giá trị tri thức.
CƠ SỞ LÝ THUYẾT NHẬN DẠNG KHUÔN MẶT
Thuật toán nhận diện khuôn mặt
Phát hiện khuôn mặt là giai đoạn đầu tiên của một thuật toán nhận diện khuôn mặt Phương pháp được lựa chọn cho nhiệm vụ này đó là HOG-SVM (sẽ được đề cập trong phần tiếp theo) Đầu vào của bước này là một khung hình ảnh, theo đó các khuôn mặt trong một khung hình sẽ được tách ra đề làm tiền đề cho những bước xử lý tiếp theo b, Ước tính cột mốc khuôn mặt
Một vấn đề chúng ta gặp phải đó là hướng khuôn mặt và góc khuôn mặt có thể xoay theo nhiều hướng (mặt nghiêng ngả xiêu vẹo) sẽ làm ảnh hưởng đến kết quả mã hóa và nhận dạng Vì vậy chúng ta cần có bước tiền xử lý đó là xoay lại hướng khuôn mặt và cắt khuôn mặt cho phù hợp Chúng ta có thể sử dụng một thuật toán được gọi là đánh giá điểm mặt để thực hiện việc này Phương pháp được tạo ra bởi Vahid Kazemi và Josephine Sullivan năm 2014, khái niệm cơ bản là chúng ta sẽ có 68 điểm mốc cụ thể cho mọi khuôn mặt Thuật toán sẽ phát hiện
68 điểm này để làm dấu mốc xoay và cắt khuôn mặt cho một người Hình bên dưới mô tả 68 điểm mốc cơ bản của khuôn mặt con người, có thể thấy dựa vào các điểm này có thể xác định được gần như chính xác trục của khuôn mặt từ đó có thể xoay khuôn mặt theo hướng thuận lợi nhất cho việc tính toán
Hình 2: Hình biểu diễn 68 điểm mốc cơ bản trên khuôn mặt
12 c, Mã hóa khuôn mặt Để xác định và nhận dạng một khuôn mặt thì ta cần một chỉ số đặc trưng cho mỗi khuôn mặt Để thực hiện nhiệm vụ này ta cần một thuật toán, phương pháp trích suất đặc trưng khuôn mặt, điều này có thể thực hiện được bằng mạng tích chập CNN (sẽ đề cập ở phần tiếp theo) Đặc trưng của khuôn mặt sau khi mã hóa thường được biểu diễn ở dạng vector để thuận tiện cho việc so sánh d, Phân loại các khuôn mặt chưa biết dựa trên những khuôn mặt đã biết Đến đây còn một bước đơn giản đó là sử dụng những vector đặc trưng khuôn mặt để so sánh và tìm ra các khuôn mặt mẫu có nhiều điểm tương đồng nhất với ảnh mẫu để gán nhãn cho ảnh mẫu Thế là hoàn thành cho một thuật toán nhân diện khuôn mặt
HOG – SVM
Histogram of Oriented Gradients (HOG) – Support Vector Machine (SVM) là công cụ được sử dụng cho việc phát hiện khuôn mặt Khi sử dụng openCV với thư viện face_recognition ta sẽ có 2 lựa chọn cho việc sử dụng phương pháp nhằm phát hiện khuôn mặt đó là HOG_SVM và CNN (sẽ nhắc đến trong mục sắp tới) Đối với nhiệm vụ phát hiện khuôn mặt trong frame ảnh, việc sử dụng mạng CNN cho kết quả gần như chính xác tuyệt đối còn HOG-SVM cho kết quả không được tốt bằng nhưng bù lại tốc độ xử lý của HOG-SVM là nhanh vượt trội hơn hẳn Thêm vào đó với những khuôn mặt khi chấm công sẽ đứng đủ khoảng cách với máy chấm công vì vậy chất lượng hình ảnh khuôn mặt là vô cùng tốt nên việc sử dụng HOG-SVM hay CNN không mang lại hiệu quả lớn hơn về mặt hiệu năng, nên ta sẽ dùng HOG-SVM để đạt được tốc độ xử lý nhanh hơn
Hình ảnh bên dưới cho thấy, có một vài khuôn mặt (màu đỏ) CNN có thể phát hiện ra nhưng HOG-SVM không phát hiện ra
Hình 3: Phát hiện khuôn mặt sử dụng HOG-SVM (Xanh) và CNN (Đỏ) Đầu tiên ta có thể nói đến HOG là một mô tả tính năng được sử dụng trong computer vision và xử lý ảnh với mục đích phát hiện đối tượng HOG biểu diễn đường nét của đối tượng thông qua phương và độ lớn gradient trên mỗi Local Cell của hình ảnh như hình đang được mô tả bên dưới Với gradient là đạo hàm vector cường độ màu sắc giúp phát hiện hướng di chuyển của các vật thể trong hình ảnh Và mỗi Local Cell là một phần nhỏ của bức ảnh (một bức ảnh được chia thành nhiều cell bằng nhau bởi một lưới, mỗi ô trong lưới như vậy gọi là một Local Cell)
Hình 4: Local Cell và Vector Gradient
- Gradient Magnitude: Độ lớn gradient
Hình 5: Hình biểu diễn cách tính gradient Để tính được vector gradient tại một điểm, ta cần biết giá trị màu sắc của 4 điểm hàng xóm xung quanh nó
Ví dụ như trong hình ta có:
Do đó ta có: Độ lớn vector gradient bằng !(−50) ! + 50 ! = 70.7107
Có thể chia các bước tính HOG như sau: a, Chuẩn hóa màu sắc hình ảnh và tính toán gradient Đây là bước đầu tiên thường thấy trong các thuật toán xử lý ảnh ví dụ như các thuật toán phát hiện biên như Cannel, Sobel … b, Thống kê các giá trị độ lớn gradient (thống kê để tính histogram)
Vì biểu đồ HOG chính là một dạng biểu đồ thống kê sự phân bố màu sắc c, Chuẩn hóa vector histogram
Chúng ta có thể thấy rằng vector histogram bị phụ thuộc vào cường độ các pixels của một bức ảnh Với 2 bức ảnh có cùng nội dung nhưng bức ảnh biến thể tối hơn được tạo thành từ ma trận ảnh gốc nhân 1/2 Khi đó giá trị vector histogram của ảnh gốc cũng sẽ gấp đôi véc tơ histogram của ảnh biến thể Chính vì thế cần chuẩn hóa véc tơ histogram để cả 2 bức ảnh có cùng một véc tơ biểu diễn d, Biểu diễn phân phối HOG trên ảnh Đối với mỗi một ô trên lưới ô vuông, chúng ta biểu diễn phân phối HOG bao gồm nhóm 9 vector chung gốc chiều dài bằng độ lớn gradient và góc bằng phương gradient
Kết quả của việc biểu diễn các vector phân phối gradien chúng ta có thể thấy như trong ảnh
Hình 6: Kết quả phát hiện đối tượng bằng HOG
Convolutional Neural Network
Thư viện face_recognition sử dụng CNN ở bước mã hóa khuôn mặt và sử dụng kết quả mã hóa khuôn mặt cho việc đối sánh 2 bức ảnh khuôn mặt xem độ trùng khớp là bao nhiêu
Mạng nơ ron CNN hay còn được gọi là mạng tích chập là một mạng nơ ron giúp chúng ta xây dựng một hệ thống thông minh có sự phản ứng nhanh với độ chính xác cao và có tác dụng lớn trong những nhiệm vụ như nhận dạng và phân loại hình ảnh
Giả sử chúng ta có một mạng nơ ron nhận diện hình ảnh và đầu vào của mỗi ảnh là 1000x1000 như thế thì khối lượng công việc tính toán rất nhiều điều đó dẫn đến chi phí tính toán là vô cùng lớn khiến thời gian tính toán vô cùng chậm
Từ đó chúng ta có thể sử dụng CNN với mục đích nén dữ liệu đầu vào lại và đồng thời tổng hợp các thồn tin rời rạc thành thông tin cô đọng hơn và có ích hơn
Một mạng CNN thì sẽ được tạo thành bởi 4 lớp a, Convolution Layer
Convolution Layer là lớp quan trọng nhất và cũng là lớp đầu tiên của một mô hình mạng nơ ron CNN.Lớp này sẽ phát hiện ra các đặc trưng của ảnh đầu vào Ở lớp này chúng ta cần quan tâm đến bốn đối tượng đó là:
Convolution layer nhận đầu vào là một ma trận 3 chiều (ví dụ như tương ứng với hệ màu RGB ta sẽ có 3 lớp màu là R G và B chồng lên nhau tạo nên màu sắc của bức ảnh) và một số bộ filters cần phải học Các ma trận bộ lọc này sẽ tịnh tiến ngang và dọc, di chuyển qua các vị trí ô vuông tương ứng trên ảnh để tính toán
17 tích chập Phần ô vuông tương ứng có kích thước bằng kích thước ma trận bộ lọc trên ảnh được gọi là receptive field Như vậy vùng mà một nơ ron có thể nhìn thấy để đưa ra quyết định được gọi là feature map
Hình 8: Phép toán nhân tích chập ma trận b, Pooling Layer
Pooling Layer là lớp thực hiện chức năng làm giảm số chiều không gian của đầu vào và giảm độ phức tạp tính toán của model Thông thường, pooling layer có nhiều nhình thức khác nhau để phù hợp với bài toán ví dụ như:
Tuy nhiên Max Pooling là loại được sử dụng nhiều và phổ biến hơn cả vì nó được xây dựng với ý tưởng rất sát với thực tế con người đó là: giữu lại chi tiết quan trọng hay hiểu ở trong bài toán này đó là giữ lại pixel có giá trị lớn nhất
Ví dụ: Max pooling với bộ lọc 2x2 và bước nhảy stride = 2
Bộ lọc sẽ chạy dọc theo ảnh và với mỗi vùng ảnh được chọn, sẽ có một giá trị lớn nhất được chọn ra và giữ lại
Activate Layer là lớp mà tại đó một số hàm Rectified Linear Unit (ReLU) được sử dụng để chuẩn hóa đẩu ra ReLU là một hàm phi tuyến với đầu ra là f(x) = max(x,0)
Tại sao hàm ReLU lại quan trọng, đó là bởi vì dữ liệu chúng ta tìm hiểu là các giá trị tuyến tính không âm, bên cạnh đó tính phi tuyến sẽ giúp tạo ra cá kết quả tốt đột biến trong deep learning d, Fully Connected Layer
Fully Connected Layer là một lớp làm phẳng ma trận của chúng ta thành vector thẳng và đưa vào một lớp được kết nối như một mạng lưới thần kinh Với fully connected layer thì layer được kết hợp với các tính năng lại với nhau để tạo ra mô hình Cuối cùng là sử dụng softmax hoặc signmoid để phân loại đầu ra như xe hơi, xe tảu, vv …
Một số mô hình mạng CNN phổ biến:
Các thư viện sử dụng cho máy chấm công nhận diện khuôn mặt
a, Thư viện nhận dạng khuôn mặt Face_recognition
Thư viện được sử dụng trong những bước đầu trong nguyên lý hoạt động của máy chấm công ứng dụng nhận diện khuôn mặt
Thư viện face_recognition là một thư viện cung cấp cho chúng ta rất nhiều phương thức hỗ trợ cho việc phát triển giải pháp nhận diện khuôn mặt Nguyên lý hoạt động của thư viện khá đơn giản đó là chúng ta đưa và một ảnh có một số khuôn mặt, thư viện sẽ hỗ trợ chúng ta trong việc phát hiện tất cả những khuôn mặt có trong ảnh đó, sau đó mỗi khuôn mặt sẽ được mã hóa thành một vector 128 chiều và vector này là cơ sở cho việc so sánh và nhận dạng khuôn mặt Thư viện này cung cấp cho ta một giải pháp rất nhanh và đơn giản cài đặt cho một giải pháp nhận diện khuôn mặt, tuy nhiên với một cố nhiệm vụ như chấm công để trả lương nhân viên thì những tính năng trên dường như là chưa đủ, việc thư viện chỉ mã hóa một ảnh thành một vector và dùng vector đó để làm cơ sở đối chiếu là không đủ tin cậy và độ chính xác, các khuôn mặt không có sự liên kết thông tin vì vậy ứng dụng không “thông minh” lên theo thời gian Vấn đề độ chính xác và độ tin cậy chưa cao của thư viện khiến chúng ta không thể sử dụng mỗi thư viện cho nhiệm vụ chấm công và trả lương nhân viên Vì vậy trong sản phẩm này, đồ án muốn chú trọng vào việc thêm những cơ chế làm tăng độ tin cậy cho kết quả nhận diện khuôn mặt (sử dụng đầu ra từ thư viện) để lấy đó làm kết quả chấm công nhân viên, đồng thời phát triển những tính năng tương tác với người dùng, giao diện thân thiện với người dùng, để khi hoàn thành nó đúng nghĩa là một sản phẩm dùng được chứ không chỉ dừng lại ở việc những cải tiến trên lí thuyết Một số hàm của thư viện face_recognititon
- Hàm tìm kiếm khuôn mặt face_locations() : đầu vào là một ảnh, nó sẽ trả về một mảng các tọa độ của khuôn mặt có trong bức ảnh dạng (top, right, bottom, left)
- Hàm mã hóa khuôn mặt face_encodings(): là một hàm mã hóa khuôn mặt, nó trả về một vector 128 chiều cho mỗi khuôn mặt khi mã hóa Hàm thường được sử dụng sau khi sử dụng hàm face_locations() vì đầu vào của hàm này là một ảnh đi kèm với tọa độ của các khuôn mặt có trong ảnh
- Hàm so sánh khuôn mặt face_distance(): đầu vào là một dữ liệu mã hóa của một ảnh cần so sánh và một mảng các vector khác Hàm trả về một mảng các số thực là phần trăm khớp của ảnh với mỗi ảnh trong mảng Nguồn thư viện: https://github.com/ageitgey/face_recognition
Tài liệu tham khảo: [2] b, Thư viện OpenCV
- Là thư viện điều kiện cần cài để thư viện face_recognition ở trên chạy được
- Là một thư viện mã nguồn mở
- Xử lý thị giác máy tính
- Được viết bằng C++ nên tốc độ tính toán rất nhanh
- Có Interface cho C++, Python, Java
- Hỗ trợ Window, Linux, OSX, Android, IOS
- Khoảng 50 ngàn người dùng và lượng download vượt 6 triệu lần
- Được khởi đầu phát triển từ intel năm 1999 bởi Gary Bradsky
Nguồn thư viện: https://opencv.org c, Ngôn ngữ lập trình Python
Ngôn ngữ lập trình bậc cao được thiết kế bởi Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991 Python được thiết kết với những ưu điểm như dễ đọc, dễ hiểu và dễ nhớ d, Tkinter
- Là thư viện hỗ trợ tạo giao diện cho màn hình máy chấm công
- Sử dụng ngôn ngữ lập trình python
- Là bộ công cụ GUI tiêu chuẩn
Nguồn: https://docs.python.org/3/library/tkinter.html
THIẾT KẾ VÀ XÂY DỰNG MÁY CHẤM CÔNG
Xây dựng nguyên lý hoạt động cho máy chấm công
Nguyên lý hoạt động của máy chấm công bằng khuôn mặt được thực hiện dựa trên cơ sở là quy trình của một thuật toán nhận diện khuôn mặt Nhưng khi chạy bên ngoài thực tế, tác giả đồ án có thêm vào một số bước trong đó có bước kiểm tra xác thực để tăng độ tin cậy cho kết quả nhận diện khuôn mặt và bước báo lỗi cho hệ thống khi máy chấm công gặp lỗi kết quả nhận dạng khuôn mặt Có thể nói nguyên lý nhận diện khuôn mặt và thư viện nhận diện khuôn mặt là cơ sở lý thuyết còn quy trình và cách sử dụng chúng mà đồ án đưa ra sắp tới sẽ tạo thành một ứng dụng, một sản phẩm dùng được Dưới đây là chi tiết cho từng bước trong quy trình hoạt động
1 Máy chụp ảnh liên tục
2 Ước tính mốc khuôn mặt, tách khuôn mặt
7 Người dùng tương tác, báo lỗi với máy
Xác thực để tăng độ tin cậy
Ghi nhận kết quả chấm công
Hình 9: Sơ đồ nguyên lý hoạt động máy chấm công
Máy chụp ảnh liên tục
Máy chấm công sẽ liên tục chụp ảnh để phát hiện xem có khuôn mặt trong khung hình (frame) hay không Tốc độ chụp ảnh của máy phụ thuộc vào cài đặt và sức mạnh của máy Với phần mềm chấm công này chúng ta sẽ tạo ra nhiều tiến trình (lý do tại sao cần dùng nhiều tiến trình sẽ trình bày trong phần xử lý đa tiến trình) và có một vài trong số đó cần tài nguyên là hình ảnh từ camera Đối với máy chấm công chạy Linux Hệ điều hành Linux hiện tại chưa hỗ trợ cho nhiều chương trình hoặc tiến trình đồng thời sử dụng hình ảnh từ một camera Vì vậy chúng ta cần sử dụng thêm một thư viện ngoài với mục đích tạo ra nhiều virtual camera cho nhiều tiến trình của chương trình Ở đây chúng ta dùng V4l2loopback Với virtual camera được tạo ra bởi V4l2loopback ta có thể sử dụng nhiều tiến trình trên nó tuy nhiên chúng ta không nên làm như vậy vì khi một virtual camera bị giải phóng, chương trình sẽ buộc dừng tất cả những tiến trình đang sử dụng camera đó Vậy nên với mỗi tiến trình sử dụng camera ta nên tạo ra cho nó một virtual camera (trừ trường hợp 2 tiến trình chạy song hành thì ta có thể cho chúng dùng chung camera Ở đây chúng ta có tiến trình hiển thị video và tiến trình nhận dạng khuôn mặt dùng chung một virtual camera)
Hình 10: Xây dựng nhiều virtual camera và chụp ảnh liên tiếp
23 Ước tính mốc khuôn mặt, tách khuôn mặt
Với mỗi frame được chụp từ máy chấm công, ta sẽ đem phân tích nó để kiểm tra xem có khuôn mặt nào xuất hiện trong khung hình hay không
Có 2 cách được sử dụng:
- Sử dụng hàm face_locations() để phát hiện và lấy tọa độ của các khuôn mặt có trong frame (khung hình)
- Sử dụng openCV với harrcascade file để phát hiện khuôn mặt theo tùy chọn
Như cơ sở lý thuyết đã nói, hàm face_locations() có sử dụng HOG – SVM kết hợp với 68 điểm mốc khuôn mặt của Vahid Kazemi và Josephine Sullivan Vì vậy chúng ta sẽ sử dụng hàm này để phát hiện các khuôn mặt có trong khung hình Đầu ra của hàm là tập hợp các tọa độ khuôn của các khuôn mặt có trong khung hình dưới dạng Array với mỗi struct Face Location bao gồm 4 giá trị tọa độ left right top và down của khuôn mặt
Mảng dữ liệu này sẽ được dùng để cắt khuôn mặt ra khỏi khung hình và khuôn mặt này được đưa vào bước tiếp theo là mã hóa khuôn mặt, đông thời khuôn mặt cũng sẽ được lưu lại để sau này dùng trong việc hiển thị kết quả cho người dùng
Hình 11: HOG-SVM kết hợp 68 điểm mốc để tách khuôn mặt
Hình 12: Mã hóa khuôn mặt thành vector 128 chiều
Thông qua hàm face_encoding() chúng ta có thể mã hóa được phần khuôn mặt có được từ bước tách khuôn mặt trước đó.Đầu ra của hàm mã hóa khuôn mặt sẽ là một vector 128 chiều mô tả đặc trưng của khuôn mặt đó Việc mã hóa khuôn mặt như thế này sẽ được dùng trong lúc phân tích chấm công và cả lúc chuẩn bị cơ sở dữ liệu để so sánh (cho bước gán nhãn khuôn mặt)
Cơ sở dữ liệu tổng hợp tất cả các khuôn mặt sẽ là một mảng các giá trị dạng key – value với key là nhãn tên của khuôn mặt và value là giá trị mã hóa của khuôn mặt đó Chỉ khi khuôn mặt được đem đi so sánh và các khuôn mặt có trong cơ sở dữ liệu tổng hợp được mã hóa với cùng một hàm mã hóa thì việc so sánh mới có ý nghĩa
Gán nhãn tên cho khuôn mặt
Hình 13: Tìm khuôn mặt có độ tương đồng cao nhất
Ta cần gán nhãn cho từng khuôn mặt phát hiện được trong khung hình để lấy đó làm dữ liệu cho việc ghi nhận chấm công Để gán nhãn được khuôn mặt ta cần có một file chứa dữ liệu đã được mã hóa (cùng phương pháp mã hóa với bước chụp ảnh và phát hiện khuôn mặt, file encodings.pickle) File dữ liệu mã hóa này cũng được sử dụng trong pha xác thực 1 nên dữ liệu cần được chuẩn và giảm nhiễu Với mỗi dữ liệu mã hóa khuôn mặt lấy từ pha trước, ta đem so sánh với tất cả các khuôn mặt trong mảng dữ liệu được đọc ra từ file encodings.pickle và tìm khuôn mặt có độ trùng khớp cao nhất Việc chuẩn bị dữ liệu encodings.pickle sẽ được nói đến trong phần chuẩn bị dữ liệu khuôn mặt Ở đây ta đặt một ngưỡng để xem có chấp nhận hay không chấp nhận kết quả gán nhãn Khi khuôn mặt có độ trùng khớp cao nhất với khuôn mặt được so sánh và vượt ngưỡng thì nhãn được chấp nhận
Nếu không có khuôn mặt nào có độ trùng khớp vượt ngưỡng thì khuôn mặt so sánh sẽ được gán nhãn unknown (Cho việc gán nhãn nhanh vì có rất nhiều khuôn mặt và frame trong một giây, ta nên đặt ngưỡng ở mức 0.5, vẫn còn 2 bước xác thực)
Cơ chế tăng độ tin cậy cho kết quả chấm công
Như đã nói xuyên xuốt cả đồ án, vì chương trình chấm công có ảnh hưởng tới tiền lương và cuộc sống của nhân sự trong công ty nên chương trình cần có độ tin cậy cao và khả năng báo lỗi khi cần thiết
Trong trường hợp thực tế sử dụng, đối với thư viện face_recognition, nếu chỉ lấy kết quả so sánh một lần làm kết quả ghi nhận chấm công thì kết quả này là không đáng tin vì khi thực hiện thử nghiệm ở điều kiện tốt nhất, các kết quả tương thích nhiều nhất vào khoảng 80% (hai khuôn mặt có độ trùng khớp cao nhất) nhưng vẫn luôn luôn tồn tại những lần kết quả nhảy nhầm sang một người khác, và trong điều kiện chạy thực tế nhiều khó khăn hơn (ví dụ như điều kiện ánh sáng, hiệu năng máy chấm công ,… ) thì việc nhảy nhầm sang người khác là liên tục xảy ra (độ khớp các khuôn mặt ở điều kiện xấu chỉ ở 50% - 55%, các kết quả dựa trên thống kê thử nghiệm) Đây là một điểm yếu của thư viện khi nó chỉ mã hóa một khuôn mặt sang một vector 128 chiều và không có sự liên kết hay kiểm tra Trường hợp lỗi như trên xảy ra khi một khuôn mặt “phổ thông” đứng trướng máy chấm công Vì vậy ở đây là vấn đề đầu tiên đồ án tập trung trong bài đồ án, đó là tăng độ tin cậy và tính chính xác của kết quả Tác giả đồ án đã thêm vào quy trình chấm công cho máy hai bước xác thực Bước xác thực đầu tiên với mục đích loại bỏ những trường hợp “nhấp nháy” sang khuôn mặt người khác Ở bước xác thực này thuật toán sẽ kiểm tra sự ổn định của kết quả trong một chu kỳ thời gian (như vậy những sự nhầm lẫn chớp nhoáng và nhấp nháy sẽ bị loại bỏ) Bước xác thực thứ 2 được tạo ra nhằm mục đích chắc chắn cho kết quả nhận được từ bước xác thực 1 bằng cách liên kết thông tin nhiều khuôn mặt để đưa ra kết luận Phương pháp này phần nào đã giảm đi hạn chế của thư viện face_recognition và khiến kết quả đưa ra thực sự đáng tin cậy hơn
Hình 14: Kết quả từ thư viện bị nhầm lẫn khi 2 người có nhiều điểm chung a, Đếm số kết quả ổn định để xác thực lần 1
Từ kết quả thử nghiệm thư viện ta thấy với năng lực của máy chấm công thử nghiệm máy có thể chụp và xử lý 20-50 khung hình trên giây (tùy thuộc vào số khuôn mặt xuất hiện trong khung hình) Tức là trong một giây máy sẽ in ra màn hình 20-50 cái nhãn tên tương ứng với mỗi khuôn mặt đang đứng trước máy chấm công Việc làm của bước xác thực này là đếm số nhãn tên ổn định Một nhãn tên ổn định là một nhãn tên xuất hiện nhiều và vượt một ngưỡng quy định trong một chu kỳ Ví dụ ta có 30 cái nhãn tên hiện lên trong vòng 1 giây và ta có một ngưỡng là 10 chẳng hạn Trong 30 cái tên đó ví dụ tên “Nguyễn Hữu Tráng” xuất hiện nhiều nhất và tới 28 lần thì tên đó đã vượt qua ngưỡng 10 và dưới 3s nên nó sẽ vượt qua bước xác thực 1 Hoặc trong 30 cái nhãn tên đó cái nhiều nhất mới đạt tần suất xuất hiện là 7 thì tất cả những nhãn tên đó đều chưa vượt qua ngưỡng 10 và chúng sẽ lưu tần suất và cộng dồn tần suất với những giây tiếp theo (nếu trong tối đa 3s mà số lượng đạt được vượt ngưỡng thì tên được coi là ổn định và được vượt qua bước xác thực 1 để đến bước xác thực 2 Nếu qua 3 giây mà không có nhãn tên nào vượt ngưỡng thì lịch sử tần xuất suất hiện sẽ bị xóa bỏ
- tức là mảng đếm số lần suất hiện của nhãn tên đó trong 3s sẽ bị xóa trắng và đếm lại từ đầu Cứ sau mỗi chu kỳ là 3s hoặc theo cài đặt của bạn, lịch sử sẽ bị xóa)
Nhãn tên xuất hiện không cần nhiều nhất mà chỉ cần đủ điều kiện là vượt ngưỡng quy định thì sẽ thông qua bước xác thực 1 Điều này hỗ trợ việc điểm danh cho
28 nhiều khuôn mặt cùng một lúc Nhãn tên vượt qua bước kiểm tra số một sẽ được đưa sang bước kiểm tra số 2 (Khi đưa ra nhãn tên ta có lưu lại theo cặp FaceInfo [nhãn tên, thông tin mã hóa khuôn mặt]) thế nên dữ liệu đầu vào của bước kiểm tra thứ hai là những FaceInfo vượt bước kiểm tra một Việc xóa lịch sử còn giúp giải phóng bộ nhớ sau mỗi chu kỳ vì mỗi giây số thông tin nhãn tên và thông tin mã hóa khuôn mặt được sinh ra rất nhiều nếu không xóa đi sẽ gây ra tràn bộ nhớ chương trình b, So sánh với nhiều hướng khuôn mặt để xác thực lần 2
Người dùng tương tác với máy chấm công
Như đã nói ở mục “báo lỗi chấm công” đó là mọi thứ trên thế giới này là tương đối vì vậy dù ta có cố gắng đến đâu thì đôi khi máy chấm công vẫn sẽ điểm danh sai Có 2 lỗi sai chính thường xảy ra khi nhân viên chấm công đó là:
- Đứng quá lâu mà máy chấm công không thể phân tích ra khuôn mặt bạn là ai (Lỗi không điểm danh được)
- Máy chấm công nhận nhầm mặt bạn thành mặt người khác (Lỗi điểm danh nhầm) Để khắc phục lỗi trên thì ta sẽ tạo thêm một cơ chế báo lỗi cho phép người dùng tương tác với máy chấm công và thông báo lỗi để máy chấm công tự động sửa lỗi hoặc quản lý nhân sự sẽ can thiệp giải quyết nếu cần thiết
Thứ mà người dùng nhìn thấy ở máy chấm công chỉ là màn hình chấm công (giấu hết các thiết bị khác) vậy nên cần có một cơ chế báo lỗi đơn giản cho người dùng để báo lỗi lên hệ thống Đầu tiên với lỗi không điểm danh được ta cần xây dựng cơ chế thông báo tự động tới hệ thống hoặc người quản lý nhân sự rằng có khuôn mặt mới chưa có trong hệ thống và cần được thêm vào danh sách điểm danh Cơ chế này được xây dựng như sau:
Khi người dùng đứng trước máy chấm công nhưng không chấm công được là do máy vẫn phát hiện ra khuôn mặt nhưng thông tin của khuôn mặt không tạo ra độ trùng khớp đủ để vượt qua hai bước xác thực nên kết quả điểm danh không được ghi nhận Để thông báo về việc có khuôn mặt mới này, ta chỉ cần đợi trong vòng
3 - 4 chu kỳ điểm danh nếu như vẫn phát hiện khuôn mặt trước máy chấm công nhưng không có kết quả nào được ghi nhận thì thông tin về khuôn mặt đó, ảnh chụp màn hình máy chấm công tại thời điểm đó sẽ được ghi lại và gửi lên hệ thống, thông báo tới người quản lý nhân sự Việc thêm mới khuôn mặt có thể để cho người dùng tự thực hiện bằng thao tác đơn giản với máy chấm công nhưng về vấn đề an ninh, nhân sự, … thì khuôn mặt nhân viên nên được thêm dưới sự giám sát của người quản lý nhân sự nên hệ thống chỉ cần gửi thông báo tới người quản lý nhân sự là đủ
Thứ hai đó là lỗi điểm danh nhầm thành người khác (Khi có hai khuôn mặt na ná giống nhau, mặc dù ta đã thêm 2 lần kiểm tra xác thực xem thông tin liệu đã đúng chưa nhưng lỗi này vẫn thỉnh thoảng xảy ra) Giải pháp thông báo lỗi điểm danh nhầm mà hệ thống sử dụng đó là để người dùng sử dụng cử chỉ bàn tay.Để thông báo về lỗi điểm danh nhầm này đồ án đã xây dựng một chương trình con lắng nghe sự kiện giơ bàn tay của người dùng, khi người dùng giơ bàn tay báo lỗi, máy sẽ hỏi lại xem có chắc chắn muốn báo lỗi này hay không Nếu có người dùng chỉ việc giơ lại bàn tay để xác thực (trong khoảng thời gian quy định) và kết quả điểm danh nhầm sẽ bị xóa đi, đông thời gửi lỗi điểm danh nhầm tới hệ thống Khi báo lỗi và gửi lỗi lên hệ thống thành công, màn hình máy sẽ hiển thị thông báo màu vàng như hình bên dưới
Hiện tại để thực hiện chức năng này đồ án đang sử dụng thư viện OpenCV với Haarcascade classifier để nhận diện bàn tay Điều này đang thực hiện khá tốt nhưng chúng ta có thể sử dung nhiều phương pháp hơn ví dụ như dùng HOG- SVM để nhận diện bàn tay và đếm ngón tay cho việc tương tác với máy trở nên dễ dàng và thú vị hơn
Hình 15: Người dùng giơ tay để thông báo lỗi cho hệ thống
Hình 16: Lỗi sau khi chụp lại sẽ được gửi lên API đến website quản lý
Hiện tại đối với việc xử lý báo lỗi trên hệ thống chúng ta sẽ có thêm một tùy chọn khác cho việc xử lý đó là:
Khi hệ thống nhận được request báo lỗi từ người dùng hệ thống sẽ ghi nhận thời gian và hình ảnh báo lỗi
Hệ thống tìm kiếm toàn bộ kết quả điểm danh gần nhất trong khoảng 15 giây đó và gán nhãn là “Warning”
Khi tổng kết chấm công hàng tháng, người tổng kết có thể lọc xem lại hình ảnh và những báo lỗi liên quan để quyết định xóa hay giữ lại kết quả điểm danh Điều này có vẻ phiền hơn khi vẫn phải để con người can thiệp vào kết quả nhưng với số lượng lỗi ít khi gặp phải và việc quyết định bởi con người có thể đem lại kết quả chấm công chính xác 100% cho hệ thống
Phương pháp này cũng tỏ ra hiệu quả hơn trong việc báo lỗi khi có nhiều người cùng điểm danh một lúc nhưng chỉ có một người trong số họ là bị điểm danh nhầm
Hình 17: Ví dụ về những kết quả chấm công "Warning"
Có thể thấy trong hình, những kết quả bị nghi ngờ là điểm danh sai sẽ có thêm nút màu đỏ để tùy chọn quyết định (Trường hợp trên xảy ra khi 3 người cùng đứng trước máy chấm công và một người thông báo lỗi Do kết quả cả 3 được nhận gần như đồng thời nên máy không biết phải xóa kết quả nào nên đã gửi Warning lên hệ thống)
Nút màu đỏ như trong hình còn có thể bấm đề tùy chọn giữ hay bỏ kết quả điểm danh
Hình 18: Tùy chọn xử lý Warning
Xử lý đa luồng
Đầu tiên với mỗi máy chạy chấm công được sử dụng thì công việc duy nhất của nó là chấm công và không nhiều nhiệm vụ khác nên có thể rất nhiều tiến trình bị bỏ phí gây lãng phí tài nguyên máy tính Bên cạnh đó nếu chúng ta xử lý tất cả các công việc chấm công lên một tiến trình (process) thì chương trình chạy sẽ chậm về hiệu năng và giảm cảm giác trải nghiệm người dùng Thể hiện cụ thể ở việc nếu chạy trên một luồng thì do xử lý tuần tự nên đầu tiên là tốc độ nhận diện chậm, hai là video hiển thị trên màn hình cho người dùng cũng sẽ giật lác, tốc độ frame thấp
Tiến trình hiển thị video
Như đã đề cập ở ban đầu nếu như sản phẩm đồ án chỉ dừng lại ở việc nghiên cứu làm sao để tăng tính chính xác và tăng độ tin cậy của thuật toán nhận diện khuôn mặt (nhanh và chính xác nhưng trên những con số, trên những màn hình console) thì việc tạo ra tiến trình hiển thi này là không cần thiết Nhưng sản phẩm mà chúng ta đang hướng đến có quan tâm đến cả tương tác với người dùng, trải nghiệm người dùng vì vậy ta phải quan tâm đến cả vấn đề giao diện, UI/UX, cảm xúc của người dùng khi sử dụng hệ thống
Vì nguyên lý hoạt động của máy chấm công là cứ chụp ảnh từ camera sau đó xử lý ảnh ( Vẽ thêm khung bo quanh khuôn mặt để người dùng biết được hệ thống đã phát hiện được khuôn mặt và đang xử lý xem khuôn mặt đứng trước khung hình là ai) sau đó hiển thị từng ảnh đã xử lý lên màn hình , việc hiển thị liên tục các hình trên màn tạo nên video, FPS là số hình hiển thị trên một giây Vì vậy FPS càng cao thì độ mượt mà của video càng tốt Do đó việc tách phần hiển thị video ra thành một tiến trình sẽ giúp video không bị giật lác vì quá trình đợi phân tích khuôn mặt Tiến trình này chỉ thực nhiệm vụ phát hiện khuôn mặt sau đó vẽ khung bao quanh khuôn mặt hiển thị lên cho người dùng
Hình 19: Khuôn mặt được phát hiện và đóng khung trên màn hình chấm công
Tiến trình hiển thị kết quả
Sau khi một khuôn mặt được gán nhãn tên và được ghi nhận là điểm danh thành công thì dữ liệu khuôn mặt đó sẽ được ghi lại thành một file ảnh PNG vào folder lịch sử chấm công để phục vụ cho việc hiện thị ra màn hình
Hình 20: Ảnh PNG được tạo ra khi chấm công thành công
Tên ảnh PNG được lưu sẽ bao gồm cả thông tin tên người điểm danh thành công và thời điểm điểm danh thành công giúp người dùng hệ thống dễ dàng nhìn thấy và biết được kết quả điểm danh
Hình 21: Cột hiển thị kết quả chấm công nằm bên trái
Lưu trữ ảnh lịch sử chấm công
Ta chỉ cần hiển thị 7 lần (hoặc số lần cảm thấy sao cho hợp lý) điểm danh mới nhất nên những kết quả lần điểm danh thành công cũ có thể xóa đi hoặc lưu vào một folder để lưu lịch sử Nếu ảnh đã được gửi thành công và lưu trữ trên server thì ảnh cũ trong máy chấm công có thể xóa Việc giữ lại ảnh điểm danh là cần thiết cho việc xử lý thắc mắc từ nhân viên Ngoài ra những hình ảnh kết quả này cũng là một phần công cụ giúp phân tích, đánh giá hiệu năng của máy
Chuẩn bị dữ liệu khuôn mặt
Bước chuẩn bị dữ liệu này cần thực hiện ngay từ lần đầu triển khai, đầu tiên là dữ liệu tổng hợp tất cả các khuôn mặt (mỗi khuôn mặt sẽ được lưu trữ 2 – 3 tấm hình cho bộ dữ liệu này) và sau đó dữ liệu xác thực (8 – 10 tấm cho mỗi bộ)
Dữ liệu tổng hợp khuôn mặt sẽ được dùng cho việc gán nhãn khuôn mặt ban đầu và dữ liệu xác thực thì sẽ được dùng cho lần xác thực thứ 2 (sử dụng nhiều khuôn mặt) Mỗi khuôn mặt cũng sẽ có một bộ dữ liệu xác thực tương ứng Việc chuẩn bị dữ liệu còn diễn ra khi ta muốn thêm khuôn mặt vào máy khi có nhân viên mới Phần mềm chấm công đã thêm chức năng thêm khuôn mặt cho máy chấm công với mục đích để những người quản lý nhân sự (không cần chuyên sâu về công nghệ) cũng có thể thêm khuôn mặt cho máy
Dưới đây là chi tiết các bước thực hiện của việc chuẩn bị dữ liệu khuôn mặt (chỉ trình bày tuần tự quá trình thực hiện Khi cài đặt ngoài thực tế, mọi công việc đã được lập trình và hoàn toàn chạy tự động, chỉ cần một click chuột để hoàn thành)
Chuẩn bị dữ liệu tổng hợp khuôn mặt
Với mỗi một nhân viên ta sẽ tạo một thư mục trong thư mục dataset với tên có định dạng staffID_staffName Bên trong thư mục ta để 2 – 3 ảnh của nhân viên đó (tránh việc có khuôn mặt của người khác lạc vào trong khung hình) Chạy chương trình encoding_face để mã hóa ảnh và nhãn tên vào file pickle Để thuận tiện cho việc thêm nhân viên mới chúng ta sẽ thêm tính năng thêm mặt cho chương trình chấm công Đầu tiên ta sẽ điền tên và mã nhân viên vào form Chương trình sẽ tự động tạo thư mục có tên theo định dạng vào thư mục dataset và tạo luôn thư mục data validate với tên là ID của nhân viên Click chụp 2-3 ảnh của nhân viên và lưu vào thư mục dataset vừa tạo và click thêm cho đủ 8 – 10 ảnh làm dữ liệu validate (nên là nhiều góc độ khác nhau của khuôn mặt) Cuối cùng click train để nạp dữ liệu khuôn mặt vào file encodings.pickle, dữ liệu mới sẽ thêm vào cuối file
Chuẩn bị dữ liệu xác thực
Dữ liệu xác thực được tạo ra cho bước xác thực 2 Trong folder data_validate ta tạo những thư mục con có tên là StaffID Với mỗi thư mục này sau khi chạy chương trình build validate data sẽ sinh ra một file pickle validate và file pickle validate này chính là cơ sở để xác thực mỗi nhãn tên trong pha xác thực 2
Xử lý mất mạng
Hệ thống của chúng ta hoạt động có tương tác với một website chạy trực tuyến Vì vậy chúng ta cần có một cơ chế xử lý khi hệ thống internet xảy ra trục trặc, đảm bảo rằng khi đó công việc chấm công và điểm danh vẫn được diễn ra bình thường
Ban đầu khi xây dựng hệ thống này tác giả đã từng nghĩ đến giải pháp sử dụng camera IP kết nối với một máy chủ xử lý thay vì sử dụng hẳn một máy chấm công như vậy nhưng vấn đề đường truyền chính là một vấn đề lớn Việc tạo riêng một máy chấm công có thể sẽ tốn kém hơn một chút nhưng bù lại ngoài việc trải nghiệm người dùng tốt hơn ta còn có thể khiến hệ thống hoạt động bình thường khi lỗi đường truyền internet, kết quả chấm công cung phản hồi nhanh hơn mà không cần phụ thuộc vào tốc độ đường truyền
Cách xử lý khi hệ thống internet gặp trục trặc là vẫn để máy chấm công một cách bình thường Sau đó khi dữ liệu chấm công gửi lên API không thành công thì ta lưu tạm dữ liệu đó vào file tạm và cứ mỗi một chu kỳ thời gian nào đó Ta lại ping mạng internet một lần, nếu kết nối ổn thì dữ liệu sẽ được gửi lại một lần nữa
XÂY DỰNG PHẦN MỀM QUẢN LÝ NHÂN SỰ
Các yêu cầu của hệ thống
Các yêu cầu chức năng
Hệ thống được xây dựng dành cho hai tác nhân chính đó là người quản trị và nhân viên của công ty
Quản lý thông tin nhân viên: Hệ thống có nhiệm vụ lưu trữ thông tin nhân viên của doanh nghiệp, tổ chức Cho phép người quản trị xem và sửa thông tin của nhân viên đồng thời cho phép nhân viên quản lý thông tin cá nhân của mình Quản lý kết quả chấm công: Hệ thống sẽ nhận kết quả chấm công từ máy chấm công ở phần 1 Từ đó lưu lại lịch sử chấm công của nhân viên (bao gồm cả lỗi chấm công) Cho phép người quản trị theo dõi quá trình ra vào của toàn bộ nhân viên và cho phép nhân viên xem lại kết quả làm việc của mình
Quản lý công việc: Thêm một số chức năng như tạo ghi chú cũng như nhắc nhở công việc giúp hỗ trợ công việc cho nhân viên và người quản lý
Các yêu cầu phi chức năng a, Yêu cầu vận hành:
- Hệ thống chạy trên website
- Tương thích với nhiều nền tảng như PC, Mobile, Tablet
- Dễ dàng sử dụng và thân thiện với người dùng b, Yêu cầu hiệu năng:
- Thời gian phản hồi các request nhỏ hơn 2s
- Có thể hoạt động 24/24 c, Yêu cầu bảo mật: Hệ thống yêu cầu đăng nhập để phân quyền với từng tác nhân (nhân viên hay người quản lý)
- Nhân viên có thể xem sửa một số thông tin cá nhân cơ bản và xem lịch sử chấm công của mình để có thể khiếu nại với người quản lý trong trường hợp có sai sót về lương, nghỉ phép, đi muộn …
- Người quản lý có thể xem danh sách toàn bộ nhân viên dưới quyền quản lý của mình, có thể sửa một số thông tin cá nhân của nhân viên và của mình Người quản lý có thể xem toàn bộ lịch sử chấm công để phục vụ cho việc trả lương d, Yêu cầu về văn hóa – chính trị: Không có yêu cầu về văn hóa – chính trị
Phân tích thiết kế hệ thống
Mô hình chức năng a, Tập các ca sử dụng (usecase) của hệ thống
Hình 22: Sơ đồ ca sử dụng của hệ thống
39 b, Tập các sơ đồ phân rã usercase
Hình 23: Sơ đồ phân rã ca sử dụng quản lý nhân viên
Hình 24: Sơ đồ phân rã ca sử dụng quản lý thông tin cá nhân
Hình 25: Sơ đồ phân rã ca sử dụng quản lý ghi chú
Trong mô hình website trên ta có các ca sử dụng của hệ thống sẽ bao gồm Đăng nhập/Đăng xuất
Tên ca sử dụng: Đăng nhập/Đăng xuất
- Mô tả khái quát: Ca sử dụng mô tả việc người dùng phải đăng nhập để được cấp quyền thực hiện các tác vụ
- Tên ca sử dụng: Quản lý nhân viên
- Mô tả khái quát: Mô tả việc người quản lý quản lý danh sách thông tin nhân viên
Xem danh sách nhân viên
- Tên ca sử dụng: Xem danh sách nhân viên
- Mô tả khái quát: Mô tả việc người quản lý vào trang quản lý nhân viên để xem danh sách nhân viên
Chỉnh sửa thông tin nhân viên
- Tên ca sử dụng: Chỉnh sửa thông tin nhân viên
- Mô tả khái quát: Mô tả việc người quản lý quản lý cập nhật thông tin cho nhân viên
- Tên ca sử dụng: Tìm kiếm nhân viên
- Mô tả khái quát: Mô tả việc người quản lý quản lý tìm kiếm nhân viên, lọc nhân viên theo phòng ban …
- Tên ca sử dụng: Quản lý chấm công
- Mô tả khái quát: Mô tả việc người quản lý quản lý kết quả chấm công hàng ngày của nhân viên, dựa vào kết quả chấm công để đánh giá nhân viên
Xem kết quả chấm công
- Tên ca sử dụng: Xem kết quả chấm công
- Mô tả khái quát: Mô tả việc người quản lý và nhân viên xem kết quả chấm công, người quản lý thì xem được danh sách toàn bộ kết quả chấm công còn nhân viên thì xem được kết quả chấm công của mình
Quản lý báo lỗi chấm công
- Tên ca sử dụng: Quản lý báo lỗi chấm công
- Mô tả khái quát: Mô tả việc người quản lý xem và đưa ra quyết đinh sử lý với những lỗi chấm công được máy ghi nhận (tự động hoặc thông báo từ nhân viên)
- Tên ca sử dụng: Quản lý ghi chú
- Mô tả khái quát: Mô tả chức năng ghi chú công việc của hệ thống Người quản lý và nhân viên đều có thể sử dụng website như một công cụ để lưu ghi chú công việc
- Tên ca sử dụng: Thêm ghi chú
- Mô tả khái quát: Người dùng hệ thống thêm ghi chú công việc
- Tên ca sử dụng: Cập nhật ghi chú
- Mô tả khái quát: Khi ghi chú công việc được hoàn thành hoặc thay đổi trạng thái người dùng hệ thống sẽ cập nhật trạng thái cho ghi chú
- Tên ca sử dụng: Xóa ghi chú
- Mô tả khái quát: Người dùng xóa ghi chú khi không cần dùng đến nữa
Quản lý thông tin cá nhân:
- Tên ca sử dụng: Quản lý thông tin cá nhân
- Mô tả khái quát: Mô tả việc người quản lý và nhân viên có thể quản lý thông tin cá nhân cơ bản của mình như tên, này tháng năm sinh, mật khẩu
Cập nhật tin cá nhân:
- Tên ca sử dụng: Cập nhật thông tin cá nhân
- Mô tả khái quát: Người dùng hệ thống thay đổi thông tin cá nhân Đổi mật khẩu:
- Tên ca sử dụng: Đổi mật khẩu
- Mô tả khái quát: Người dùng hệ thống thay đổi mật khẩu đăng nhập
43 b, Mô tả các ca sử dụng
Ca sử dụng Đăng nhập/đăng suất
Tên ca sử dụng: Đăng nhập/ Đăng suất Mã định danh: 1
Tác nhân chính: Người quản lý, Nhân viên
Mô tả: Ca sử dụng mô tả việc người dùng phải đăng nhập để được cấp quyền thực hiện các tác vụ
Kích hoạt: Khi nhân viên hoặc người quản lý có nhu cầu thực hiện một tác vụ bất kỳ với hệ thống
1 Người quản lý hoặc nhân viên đăng nhập vào hệ thống để thực hiện tác vụ:
- Nhập đúng thông tin thì vào được hệ thống
- Nhập sai thông tin thì nhảy vào luồng S-1
2 Người quản lý hoặc nhân viên có thể đăng suất khi cần
S-1: Quên thông tin đăng nhập:
1 Người dùng chọn vào phần quên mật khẩu
2 Điền Email để lấy lại mật khẩu
3 Hệ thống gửi thông tin tài khoản cho email và yêu cầu đổi lại mật khẩu Luồng sự kiện ngoại lệ hoặc tương đương: Không có
Ca sử dụng Quản lý nhân viên
Tên ca sử dụng: Quản lý nhân viên Mã định danh: 2
Tác nhân chính: Người quản lý
Mô tả: Mô tả việc người quản lý quản lý danh sách thông tin nhân viên
Kích hoạt: Khi người quản lý có nhu cầu thực hiện một tác vụ liên quan đến nhân viên của mình ví dụ như sửa chữa thông tin, tra cứu …
1 Người quản lý xem thông tin nhân viên
2 Người quản lý thay đổi thông tin nhân viên
3 Người quản lý xóa nhân viên khỏi hệ thống
Luồng sự kiện con: Không có
Luồng sự kiện ngoại lệ hoặc tương đương: Không có
Ca sử dụng Xem danh sách nhân viên
Tên ca sử dụng: Xem danh sách nhân viên Mã định danh: 3
Tác nhân chính: Người quản lý, nhân viên
Mô tả: Mô tả việc người quản lý, nhân viên vào xem danh sách nhân viên
Kích hoạt: Khi người dùng hệ thống muốn tìm kiếm thông tin hoặc thông tin liên lạc của một người dùng khác trong hệ thống
1 Người dùng vào mục danh sách nhân viên để xem danh sách nhân viên
2 Hệ thống trả về danh sách nhân viên để hiển thị cho người dùng Luồng sự kiện con: Không có
Luồng sự kiện ngoại lệ hoặc tương đương: Không có
Ca sử dụng Chỉnh sửa thông tin nhân viên
Tên ca sử dụng: Chỉnh sửa thông tin nhân viên Mã định danh: 4
Tác nhân chính: Người quản lý
Mô tả: Mô tả việc người quản lý thay đổi thông tin cho nhân viên của mình
Kích hoạt: Khi nhân người quản lý có nhu cầu thay đổi các thông tin của nhân viên (có thể là nhân viên không đủ quyền thay đổi, hoặc người quản lý thay đổi hộ)
1 Người quản lý truy cập trang danh sách nhân viên
2 Người quản lý tìm kiếm nhân viên cần thay đổi thông tin
3 Người quản lý thay đổi thông tin cho nhân viên
4 Hệ thống thông báo cập nhật thành công
Luồng sự kiện con: Không có
Luồng sự kiện ngoại lệ hoặc tương đương: Không có
Ca sử dụng Tìm kiếm nhân viên
Tên ca sử dụng: Tìm kiếm nhân viên Mã định danh: 5
Tác nhân chính: Người quản lý
Mô tả: Mô tả việc người quản lý muốn tìm kiếm hoặc lọc nhân viên
Kích hoạt: Trước khi người quản lý thực hiện các tác vụ liên quan đến nhân
45 viên, người quản lý có thể tìm kiếm hoặc lọc nhân viên theo một số điều kiện để dễ dàng truy cập đến thông tin của nhóm nhân viên đó
1 Người quản nhập thông tin cần lọc hoặc tìm kiếm
2 Người quản lý tìm kiếm nhân viên
3 Hệ thống trả về kết quả thông tin tra cứu
Luồng sự kiện con: Không có
Luồng sự kiện ngoại lệ hoặc tương đương: Không có
Ca sử dụng Quản lý chấm công
Tên ca sử dụng: Quản lý chấm công Mã định danh: 6
Tác nhân chính: Người quản lý, Nhân viên
Mô tả: Mô tả việc người quản lý quản lý kết quả chấm công hàng ngày của nhân viên, dựa vào kết quả chấm công để đánh giá nhân viên
Kích hoạt: Khi người quản lý có nhu cầu giám sát tính hình ra vào đi làm của nhân viên
1 Người quản lý xem kết quả chấm công toàn công ty
2 Người quản lý lọc kết quả chấm công theo trạng thái
3 Người quản lý đánh giá và phản hồi nhân viên qua kết quả chấm công Luồng sự kiện con: Không có
Luồng sự kiện ngoại lệ hoặc tương đương: Không có
Ca sử dụng Xem kết quả chấm công
Tên ca sử dụng: Xem kết quả chấm công Mã định danh: 7
Tác nhân chính: Người quản lý, Nhân viên
Mô tả: Mô tả việc người quản lý và nhân viên xem kết quả chấm công, người quản lý thì xem được danh sách toàn bộ kết quả chấm công còn nhân viên thì xem được kết quả chấm công của mình
Kích hoạt: Khi người dùng hệ thống có nhu cầu xem kết quả chấm công
1 Người quản lý xem toàn bộ kết quả chấm công
2 Nhân viên xem kết quả chấm công của mình
Luồng sự kiện con: Không có
Luồng sự kiện ngoại lệ hoặc tương đương: Không có
Ca sử dụng Quản lý báo lỗi chấm công
Tên ca sử dụng: Quản lý báo lỗi chấm công Mã định danh: 8
Tác nhân chính: Người quản lý
Mô tả: Mô tả việc người quản lý xem và đưa ra quyết đinh sử lý với những lỗi chấm công được máy ghi nhận (tự động hoặc thông báo từ nhân viên)
Kích hoạt: Khi có nhân viên báo lỗi
1 Hệ thống nhận báo lỗi từ máy chấm công
2 Người quản lý vào xem lỗi, lọc lỗi
3 Người quản lý ghi chú để quyết định xử lý lỗi
Luồng sự kiện con: không có
Luồng sự kiện ngoại lệ hoặc tương đương: Không có
Ca sử dụng Quản lý ghi chú
Tên ca sử dụng: Quản lý ghi chú Mã định danh: 9
Tác nhân chính: Người quản lý, Nhân viên
Mô tả: Mô tả chức năng ghi chú công việc của hệ thống Người quản lý và nhân viên đều có thể sử dụng website như một công
Kích hoạt: Khi nhân viên hoặc người quản lý có nhu cầu ghi chú công việc
1 Người dùng thêm ghi chú
2 Người dùng cập nhật ghi chú
Luồng sự kiện con: Không có
Luồng sự kiện ngoại lệ hoặc tương đương: Không có
Ca sử dụng Thêm ghi chú
Tên ca sử dụng: Thêm ghi chú Mã định danh: 10
Tác nhân chính: Người quản lý, nhân viên
Mô tả: Mô tả việc người dùng hệ thống thêm ghi chú vào bảng công việc
Kích hoạt: Khi người dùng hệ thống muốn ghi chú lại công việc cần làm sắp tới
2 Người hệ thống thêm ghi chú
3 Hệ thống thông báo thêm ghi chú thành công
Luồng sự kiện con: Không có
Luồng sự kiện ngoại lệ hoặc tương đương: Không có
Ca sử dụng Cập nhật ghi chú
Tên ca sử dụng: Cập nhật ghi chú Mã định danh: 11
Tác nhân chính: Người quản lý, Nhân viên
Mô tả: Mô tả việc người dùng quản lý thay đổi trạng thái, thông tin và nội dung ghi chú
Kích hoạt: Khi ngườ dùng hệ thống muốn thay đổi trạng thái ghi chú
1 Người dùng hệ thống xem danh sách các ghi chú
2 Người dùng hệ thống thay đổi thông tin ghi chú
3 Hệ thống thông báo thay đổi thông tin thành công
Luồng sự kiện con: Không có
Luồng sự kiện ngoại lệ hoặc tương đương: Không có
Ca sử dụng Xóa ghi chú
Tên ca sử dụng: Xóa ghi chú Mã định danh: 12
Tác nhân chính: Người quản lý, Nhân viên
Mô tả: Mô tả việc người dùng hệ thống xóa bỏ các ghi chú cũ
Kích hoạt: Khi người dùng hệ thống muốn xóa một vài ghi chú có giá trị lịch sử thấp
1 Người quản lý xem danh sách các ghi chú
2 Người quản lý xóa ghi chú cần xóa
3 Hệ thống thông báo xóa ghi chú thành công
Luồng sự kiện con: Không có
Luồng sự kiện ngoại lệ hoặc tương đương: Không có
Ca sử dụng Quản lý thôn tin cá nhân
Tên ca sử dụng: Quản lý thông tin cá nhân Mã định danh: 13
Tác nhân chính: Người quản lý, Nhân viên
Mô tả: Mô tả việc người quản lý và nhân viên có thể quản lý thông tin cá nhân cơ bản của mình như tên, này tháng năm sinh, mật khẩu …
Kích hoạt: Khi nhân viên hoặc người quản lý có nhu cầu thực hiện một tác vụ thay đổi thông tin cá nhân
1 Người dùng quản lý thông tin cá nhân
Luồng sự kiện con: Không có
Luồng sự kiện ngoại lệ hoặc tương đương: Không có
Ca sử dụng Cập nhật thông tin cá nhân
Tên ca sử dụng: Cập nhật thông tin cá nhân Mã định danh: 14
Tác nhân chính: Người quản lý, nhân viên
Mô tả: Mô tả việc người dùng hệ thống muốn thay đổi những thông tin cá nhân cơ bản trong quyền của mình
Kích hoạt: Khi người dùng hệ thống muốn cập nhật, thay đổi thông tin cá nhân của mình
1 Người dùng hệ thống vàp phần thông tin cá nhân và chọn cập nhật thông tin cá nhân
2 Người dùng hệ thống nhập thông tin vào form cập nhật
3 Người dùng hệ thống xác nhận cập nhật thông tin cá nhân
4 Hệ thống thông báo cập nhật thành công
Luồng sự kiện con: Không có
Luồng sự kiện ngoại lệ hoặc tương đương: Không có
Ca sử dụng Đổi mật khẩu
Tên ca sử dụng: Đổi mật khẩu Mã định danh: 15
Tác nhân chính: Người quản lý, Nhân viên
Mô tả: Mô tả việc người dùng hệ thống thay đổi mật khẩu đăng nhập
Kích hoạt: Khi người dùng hệ thống muốn thay đổi mật khẩu đăng nhập để gia tăng bảo mật
1 Người dùng hệ thống vào phần quản lý thông tin tài khoản và chọn đổi mật khẩu
2 Người dùng hệ thống nhập mật khẩu cũ và nhập mật khẩu mới
3 Người dùng hệ thống xác nhận đổi mật khẩu
4 Hệ thống thông báo đổi mật khẩu thành công
Luồng sự kiện con: Không có
Luồng sự kiện ngoại lệ hoặc tương đương: Không có
Dựa vào các yêu cầu đặt ra, hệ thống sẽ được thiết kế với một lớp trừu tượng đó là lớp Person hai lớp tiếp theo là Admin (Người quản lý) và Staff (Nhân viên), được kế thừa từ lớp Person ,cùng với các lớp như: Department (Phòng ban), TimeKeeping (Kết quả điểm danh), Todo (Ghi chú)
Ngoài ra đối với tính năng quản lý báo lỗi không có tương tác nhiều với các thành phần khác trong hệ thống ta sẽ thêm cho nó lớp ErrorLog
Dưới đây là sự mô tả về thẻ CRC (Class responsibility collaboration) mô tả chi tiết từng lớp có trong hệ thống, biểu đồ lớp và biểu đồ đối tượng mô tả trực quan các mối quan hệ của các lớp. a, Thẻ CRC
Thẻ CRC cho lớp Person
Mô tả: Là lớp người dùng của hệ thống
Ca sử dụng có liên quan: 1, 2, 3, 4, 5, 6, 7,
Quản lý thông tin cá nhân
Các lớp có liên quan
Thuộc tính: id (int) name (string) phone number (int) email (string) date of birth (datetime) avatar image (string) address (string)
Liên quan Staff, Admin, Todo
Mô tả: Cá nhân điều hành và quản lý hệ thống.
Ca sử dụng có liên quan: 1, 2, 3, 4, 5, 6,
Các lớp có liên quan:
Thẻ CRC cho lớp Staff
Mô tả: Nhân viên của công ty, tổ chức
Ca sử dụng có liên quan: 1, 3, 5, 7, 9, 10,
Xem kết quả chấm công
Các lớp có liên quan:
Thuộc tính: position (string) department (string)
Thẻ CRC cho lớp Department
Mô tả: Phòng ban nơi phân chia nhân viên thành các nhóm theo từng nhiệm vụ
Ca sử dụng có liên quan: 2, 5, 14
Các lớp có liên quan
Thuộc tính: id (int) name (string) description (string)
Thẻ CRC cho lớp TimeKeeping
Mô tả: Cá nhân điều hành và quản lý hệ thống Ca sử dụng có liên quan: 6, 7, 8
Trách nhiệm: Các lớp có liên quan:
Go Out Time (datetime) Image Out URL (string)
Thẻ CRC cho lớp Todo
Mô tả: Đối tượng thể hiện cho những ghi chú của người dùng hệ thống.
Ca sử dụng có liên quan: 9, 10, 11, 12
Trách nhiệm Các lớp có liên quan
Thuộc tính: create time deadline (string) content (string) status (string)
Thẻ CRC cho lớp ErrorLog
Mô tả: Đối tượng lỗi chấm công người dùng máy chấm công gửi lên
Ca sử dụng có liên quan: 8
Trách nhiệm Các lớp có liên quan
Thuộc tính: status (string) detail (string) image (string) createTime (string)
Từ biểu đồ lớp đã phân tích ở trên ta có thể xây dựng biểu đồ đối tượng như sau
Hình 27: Biểu đồ đối tượng
Mô hình hành vi a, Biểu đồ tuần tự Đăng nhập
Hình 28: Biểu đồ tuần tự ca sử dụng đăng nhập Đăng xuất
Hình 29: Biểu đồ tuần tự ca sử dụng đăng xuất
Hình 30: Biểu đồ tuần tự quản lý nhân viên
Chỉnh sửa thông tin nhân viên
Hình 31: Biểu đồ tuần tự cập nhật thông tin nhân viên
Xem danh sách nhân viên
Hình 32: Biểu đồ tuần tự ca sử dụng xem danh sách nhân viên
Hình 33: Biểu đồ tuần tự tìm kiếm nhân viên
Hình 34: Biểu đồ tuần tự quản lý chấm công
Quản lý báo lỗi chấm công
Hình 35: Biểu đồ tuần tự quản lý báo lỗi chấm công
Hình 36: Biểu đồ tuần tự ca sử dụng tạo ghi chú
Hình 37: Biểu đồ tuần tự cập nhật ghi chú
Hình 38: Biểu đồ tuần tự ca sử dụng đổi mật khẩu
Admin CRUD CRUD RUD RUD CRUD CRUD
Triển khai, lập trình hệ thống
Ngôn ngữ lập trình, framework và công cụ a, Front-end: HTML, CSS, JS, Bootstrap, Jquery, AngularJS, AdminLTE b, Back-end: Php, Sql, Laravel c, Công cụ: Visual Studio Code, Postman, Mysql Workbench
Hệ thống được thiết kế và phát triển dựa trên mô hình MVC
Các thành phần chính của hệ thống bao gồm:
- Request: là một yêu cầu từ người dùng tới hệ thống để yêu cầu truy cập tới một chức năng, đối tượng nào đó
- Model: Chứa các đối tượng được mô tả trong hệ thống, bao gồm các lớp và các phương thức thao tác với dữ liệu trên các lớp.
- View: Là giao diện cho người dùng tương tác với các thành phần trong hệ thống
- Controller: Thiết lập mối quan hệ và kết nối Model với View.
- Database: cơ sở dữ liệu của hệ thống, chứa toàn bộ thông tin và dữ liệu của hệ thống
- Tạo một số API cho máy chấm công gửi dữ liệu kết quả chấm công
- Xây dựng trang sử dụng theme của AdminLTE
- Tạo database cho trang web dựa trên biểu đồ lớp và biểu đồ đối tượng đã phân tích
- Framework Laravel được sử dụng để xây dựng website có kiến trúc MVC như đã nói ở trên và framework này đã hỗ trợ nhằm tránh đối tượng xấu sử dụng SQL injection để lấy cắp thông tin từ database
- Xây dựng các trang Dashboard, Staff List, Account Information, … cho website
- Kiểm thử các tính năng trước khi sử dụng
Một số hình ảnh về giao diện của Website
Hình 40: Giao diện trang dashboard
Hình 41: Giao diện mobile trang dashboard
Hình 42: Giao diện thanh công cụ
Trang quản lý nhân viên
Hình 43: Giao diện trang quản lý nhân viên
Hình 44: Form chỉnh sửa thông tin nhân viên
Trang quản lý chấm công
Hình 45: Giao diện trang danh sách kết quả chấm công
Trang cá nhân tài khoản
Hình 46: : Giao diện trang thông tin tài khoản
Hình 47: Giao diện mobile trang thông tin tài khoản
Hình 48: Giao diện form chỉnh sửa thông tin cá nhân
Hình 49: Giao diện trang chat
Hình 50: Giao diện trang đăng nhập
Hình 51: Giao diện trang đăng ký
Giao diện trang quản lý lỗi chấm công
Hình 52: Giao diện trang quản lý lỗi chấm công
ĐÁNH GIÁ HIỆU NĂNG
Đánh giá máy chấm công
Máy hoạt động tương đối tốt dưới điều kiện sử dụng thực tế (ánh sáng vừa đủ, điều kiện môi trường thông thường)
Máy đã được thử nghiệm trên hai môi trường:
- Môi trường thông thường: ánh sáng vừa đủ, năng lực phần cứng cao (Máy tính Linux, RAM 8GB, CPU i5, camera độ phân giải HD, Full HD)
- Môi trường khắc nghiệt (trên thực tế các doanh nghiêp sẽ cung cấp môi trường tốt cho việc sử dụng vì yêu cầu về chi phí và điều kiện thấp): ánh sáng kém, camera chất lượng kém
Bộ dữ liệu thử nghiệm: máy được đặt ở cửa ra vào của công ty có 100 nhân viên và theo dõi trong 1 tháng 10 ngày
Quy trình theo dõi Trong một tháng 10 ngày chúng ta sẽ có khoảng 10000 kết quả được ghi lại (cả ra cả vào, cả những thời điểm giữa buổi) Chúng ta sẽ đếm số kết quả bị nhầm để tính toán độ chính xác của máy chấm công
Hình 53: Môi trường khắc nghiệt, ánh sáng kém
Hình 54: Môi trường thông thường, ánh sáng tốt a, Đánh giá trước khi có hai bước xác thực
Như đã nói ở trên nếu chỉ sử dụng kết quả đầu ra từ thư viện mà không có một cơ chế xác thực nào thì độ chính xác của đầu ra là không đáng tin và không đủ điều kiện cho nhiệm vụ chấm công điểm danh Độ chính xác của thư viện (tác giả công bố) là trên 90% nhưng đó là kết quả khi phân tích ảnh và chất lượng tốt Trong điều kiện chạy video realtime với hai trường hợp điều kiện môi trường ở trên ta có kết quả sau:
Với 100 khuôn mặt nhân viên trên, chương trình chạy thử nghiệm và lấy 1000 kết quả trong một phút chạy (độ trung khớp khi so sánh hai khuôn mặt 60-70%, kết quả in ra dưới video realtime) Tương ứng với đó là ta chỉ có hơn 600 kết quả nhận diện khuôn mặt chính xác Không thể sử dụng cho mục đích điểm danh chấm công trả lương được Điều kiện Độ chính xác Điều kiện thông thường 635/1000 Điều kiện khắc nghiệt 477/1000
Hình 55: So khớp khuôn mặt độ trùng khớp 60-70 % b, Đánh giá sau khi có hai bước xác thực
Có thể nói hai bước xác thực sinh ra không nhằm mục đích tăng độ chính xác từ thư viện, mà nó chọn lọc những kết quả chính xác trong tập kết quả đầu ra của thư viện
Ta có kết quả chạy thử trong hai trường hợp điều kiện môi trường
- Trong điều kiện thông thường: (không có những phụ kiện gây nhiễu hay camera bị mờ) thì kết quả nhận dạng gần như chính xác tuyệt đối, với những trường hợp thông thường như vậy thì khi chất lượng phần cứng có thấp hơn một chút (tốc độ xử lý chậm), kết quả chấm công vẫn chính xác chỉ là có chậm hơn chút
- Trong điều kiện khắc nghiệt: (ánh sáng kém, camera mờ) kết quả ghi nhận chấm công vẫn ghi nhận chính xác như điều kiện thông thường (vì thuật toán sinh ra với mục đích chỉ ghi nhận những kết quả đủ điều kiện) nhưng nhiều khuôn mặt không được điểm danh do không đủ điều kiện thông qua hai bước xác thực
Vì vậy máy đủ độ tin cậy trong mọi trường hợp, nhưng để công việc chấm công và điểm danh nhanh chóng và hợp lý thì môi trường cung cấp cho máy nên là môi trường lý tưởng
Thống kê kết quả chạy: Điều kiện Điều kiện thông thường 9600 Kết quả đúng / 10000 Kết quả ghi nhận được Điều kiện khắc nghiệt 7630 Kết quả đúng / 8000 kết quả ghi nhận được
Với những khuôn mặt bị mờ hoặc có phụ kiện làm nhiễu kết quả thì lâu lâu sẽ có kết quả điểm danh bị nhầm (nhầm khoảng 4-5%) Vì vậy để cải thiện kết quả này đồ án đã thêm phần báo lỗi
Phần báo lỗi sinh ra không làm tăng độ chính xác của máy chấm công nhưng nó có thể tăng độ tin cậy cho toàn hệ thống vì vậy phần đánh giá hệ thống sau khi có chức năng báo lỗi sẽ được trình bày sau
Như vậy tựu chung lại, khi hoàn thành máy chấm công đã đáp ứng đủ các yêu cầu sau:
- Chấm công được nhiều khuôn mặt cùng một lúc
- Kết quả chấm công có độ tin cậy cao (95-96% kết quả cho cả hai điều kiện hoạt động dựa trên theo dõi và thống kê hoạt động của máy – hình bên dưới)
- Giao diện thông minh, người dùng có thể dễ dàng sử dụng và theo dõi tiến độ hoạt động của máy
- Có cơ chế tương tác với người dùng, chức năng báo lỗi lên hệ thống
Hình 56: Kết quả theo dõi độ chính xác của máy chấm công
Đánh giá phần mềm quản lý
Phần mềm quản lý nhân sự đã bao quát đủ các các yêu cầu ban đầu lúc thiết kế đặt ra, đặc biệt là nó đã đáp ứng tốt nhu cầu của bài toán chấm công và điểm danh nhân viên
Các cơ chế bảo toàn cơ sở dữ liệu hoạt động tốt, thông báo rõ ràng, dễ dàng sử dụng
Framework laravel đã hỗ trợ phòng chống SQL innjection tốt
Giao diện đẹp, thông minh và dễ sử dụng
Tuy vậy vẫn còn một số tính năng chưa được test nhiều bởi những những chuyên gia đánh giá và kiểm thử hệ thống nên chưa phát hiện ra lỗi, do đó cần theo dõi trong quá trình chạy thực tế để phát hiện và sửa chữa.
Đánh giá toàn hệ thống
Hệ thống bao gồm cả máy chấm công và phần mềm quản lý đã đáp ứng được những yêu cầu sau:
- Thân thiện, có tương tác với người dùng: Hệ thống đã có giao diện khá dễ dàng sử dụng,
- Độ tin cậy cao: Hệ thống (đặc biệt là phần máy chấm công) sau khi có thêm hai bước xác thực và báo lỗi từ phía người dùng thì hoạt động gần như chính xác tuyệt đối, vì lỗi sau khi phát sinh sẽ có cơ chế sửa chữa để phục hồi tính chính xác của hệ thống
Hệ thống đã chạy cơ bản tốt và có thể chạy thực tế