Xây dựng hệ thống chấm công bằng khuôn mặt

79 0 0
Tài liệu đã được kiểm tra trùng lặp
Xây dựng hệ thống chấm công bằng khuôn mặt

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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.

Trang 1

HỆ THỐNG CHẤM CÔNG BẰNG KHUÔN MẶT

Trang 2

4

MỤC LỤC

ĐẶT VẤN ĐỀ VÀ HƯỚNG GIẢI QUYẾT 8

CHƯƠNG 1 CƠ SỞ LÝ THUYẾT NHẬN DẠNG KHUÔN MẶT 11

1.1 Thuật toán nhận diện khuôn mặt 11

1.2 HOG – SVM 13

1.3 Convolutional Neural Network 16

1.4 Các thư viện sử dụng cho máy chấm công nhận diện khuôn mặt 19

CHƯƠNG 2 THIẾT KẾ VÀ XÂY DỰNG MÁY CHẤM CÔNG 21

2.1 Xây dựng nguyên lý hoạt động cho máy chấm công 21

Máy chụp ảnh liên tục 22

Ước tính mốc khuôn mặt, tách khuôn mặt 23

Mã hóa khuôn mặt 24

Gán nhãn tên cho khuôn mặt 25

Cơ chế tăng độ tin cậy cho kết quả chấm công 26

Ghi nhận kết quả chấm công 29

Báo lỗi chấm công 29

2.2 Người dùng tương tác với máy chấm công 29

2.3 Xử lý đa luồng 33

Tiến trình hiển thị video 33

Tiến trình hiển thị kết quả 34

Lưu trữ ảnh lịch sử chấm công 34

2.4 Chuẩn bị dữ liệu khuôn mặt 35

Chuẩn bị dữ liệu tổng hợp khuôn mặt 35

Chuẩn bị dữ liệu xác thực 35

2.5 Xử lý mất mạng 36

CHƯƠNG 3 XÂY DỰNG PHẦN MỀM QUẢN LÝ NHÂN SỰ 37

3.1 Các yêu cầu của hệ thống 37

Các yêu cầu chức năng 37

Các yêu cầu phi chức năng 37

3.2 Phân tích thiết kế hệ thống 38

Mô hình chức năng 38

Mô hình cấu trúc 50

Mô hình hành vi 57

Trang 3

5

3.3 Triển khai, lập trình hệ thống 64

Ngôn ngữ lập trình, framework và công cụ 64

Kiến trúc tổng thể 64

Công việc thực hiện 65

3.4 Một số hình ảnh về giao diện của Website 66

Trang Dashboard 66

Trang quản lý nhân viên 67

Trang quản lý chấm công 68

Trang cá nhân tài khoản 69

Trang đăng nhập 71

Trang đăng ký 72

Giao diện trang quản lý lỗi chấm công 73

CHƯƠNG 4 ĐÁNH GIÁ HIỆU NĂNG 74

4.1 Đánh giá máy chấm công 74

4.2 Đánh giá phần mềm quản lý 77

4.3 Đánh giá toàn hệ thống 78

KẾT LUẬN 79

HƯỚNG PHÁT TRIỂN TRONG TƯƠNG LAI 80

i, Hướng phát triển cải tiến máy chấm công 80

ii, Hướng phát triển nâng cấp hệ thống website quản lý 80

TÀI LIỆU THAM KHẢO 81

Trang 4

6

DANH MỤC HÌNH VẼ

Hình 1: Sơ đồ hệ thống quản lý nhân sự 10

Hình 2: Hình biểu diễn 68 điểm mốc cơ bản trên khuôn mặt 11

Hình 3: Phát hiện khuôn mặt sử dụng HOG-SVM (Xanh) và CNN (Đỏ) 13

Hình 4: Local Cell và Vector Gradient 14

Hình 5: Hình biểu diễn cách tính gradient 14

Hình 6: Kết quả phát hiện đối tượng bằng HOG 15

Hình 7: Convolution neural network 16

Hình 8: Phép toán nhân tích chập ma trận 17

Hình 9: Sơ đồ nguyên lý hoạt động máy chấm công 21

Hình 10: Xây dựng nhiều virtual camera và chụp ảnh liên tiếp 22

Hình 11: HOG-SVM kết hợp 68 điểm mốc để tách khuôn mặt 23

Hình 12: Mã hóa khuôn mặt thành vector 128 chiều 24

Hình 13: Tìm khuôn mặt có độ tương đồng cao nhất 25

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 27

Hình 15: Người dùng giơ tay để thông báo lỗi cho hệ thống 31

Hình 16: Lỗi sau khi chụp lại sẽ được gửi lên API đến website quản lý 31

Hình 17: Ví dụ về những kết quả chấm công "Warning" 32

Hình 23: Sơ đồ phân rã ca sử dụng quản lý nhân viên 39

Hình 24: Sơ đồ phân rã ca sử dụng quản lý thông tin cá nhân 39

Hình 25: Sơ đồ phân rã ca sử dụng quản lý ghi chú 39

Hình 26: Biểu đồ lớp 55

Hình 27: Biểu đồ đối tượng 56

Hình 28: Biểu đồ tuần tự ca sử dụng đăng nhập 57

Hình 29: Biểu đồ tuần tự ca sử dụng đăng xuất 57

Hình 30: Biểu đồ tuần tự quản lý nhân viên 58

Hình 31: Biểu đồ tuần tự cập nhật thông tin nhân viên 58

Hình 32: Biểu đồ tuần tự ca sử dụng xem danh sách nhân viên 59

Hình 33: Biểu đồ tuần tự tìm kiếm nhân viên 59

Hình 34: Biểu đồ tuần tự quản lý chấm công 60

Hình 35: Biểu đồ tuần tự quản lý báo lỗi chấm công 60

Hình 36: Biểu đồ tuần tự ca sử dụng tạo ghi chú 61

Trang 5

7

Hình 37: Biểu đồ tuần tự cập nhật ghi chú 61

Hình 38: Biểu đồ tuần tự ca sử dụng đổi mật khẩu 62

Hình 39: Mô hình MVC 64

Hình 40: Giao diện trang dashboard 66

Hình 41: Giao diện mobile trang dashboard 66

Hình 42: Giao diện thanh công cụ 67

Hình 43: Giao diện trang quản lý nhân viên 67

Hình 44: Form chỉnh sửa thông tin nhân viên 68

Hình 45: Giao diện trang danh sách kết quả chấm công 68

Hình 46: : Giao diện trang thông tin tài khoản 69

Hình 47: Giao diện mobile trang thông tin tài khoản 69

Hình 48: Giao diện form chỉnh sửa thông tin cá nhân 70

Hình 49: Giao diện trang chat 70

Hình 50: Giao diện trang đăng nhập 71

Hình 51: Giao diện trang đăng ký 72

Hình 52: Giao diện trang quản lý lỗi chấm công 73

Hình 53: Môi trường khắc nghiệt, ánh sáng kém 74

Hình 54: Môi trường thông thường, ánh sáng tốt 75

Hình 55: So khớp khuôn mặt độ trùng khớp 60-70 % 76

Hình 56: Kết quả theo dõi độ chính xác của máy chấm công 77

Trang 6

Từ thực tế cho thấy, ở Việt Nam chúng ta hiện nay (kể cả trên thế giới)

phương pháp quản lý nhân viên, đặc biệt là khâu chấm công và ghi công cho

nhân viên vẫn còn nhiều hạn chế Ví dụ như phương pháp chấm công, ghi công bằng tay, điền timesheets còn quá thô sơ và hiệu quả không được cao Chúng ta có các giải pháp tân tiến hơn đó là sử dụng nhận diện vân tay Tuy đã có nhiều sự tiện dụng và thông minh hơn các phương pháp truyền thống nhưng những giải pháp sử dụng vân tay này vẫn còn tồn tại nhiều hạn chế đó là không chấm công được nhiều người cùng một lúc hoặc những khi trời lạnh một số máy chấm công vân tay sử dụng hồng ngoại không thể nhận dạng được vân tay Các máy chấm công bằng vân tay trên thị trường chưa giao tiếp tốt với hệ thống quản lý nhân sự (hoặc chưa có hệ thống quản lý nhân sự đi kèm) Một hạn chế khác mà ta có thể thấy ngay trong thời kỳ Covid-19 hoành hành đó là việc chạm lấy dấu vân tay trên máy có thể dẫn đến lan truyền virus

Trên thị trường đã có nhiều sản phẩm mang giải pháp nhận diện khuôn mặt nhưng các mục tiêu mà chúng hướng đến khác nhau Ví dụ như đa số các giải pháp đều sử dụng sức mạnh từ mô hình AI bên trong máy để tăng độ chính xác Những giải pháp như trên có thể dẫn đến giá thành quá cao, không phù hợp với các công ty quy mô nhỏ và vừa (trong thời kỳ 4.0 có rất nhiều công ty khởi nghiệp dưới dạng doanh nghiệp nhỏ và vừa) Một số giải pháp đã có khác sử dụng camera IP và xử lý trên server có thể sẽ không điểm danh được khi mất mạng hoặc độ trễ nhận kết quả cao, đồng thời việc sử dụng camera IP sẽ khó để thiết kế một cách hợp lý cho việc giao tiếp với người dùng (chỉ dùng mỗi camera lấy hình ảnh truyền lên server xử lý, người dùng thậm chí còn không biết mình đang được điểm danh)

Thêm một phần nữa là các sản phẩm nhận diện khuôn mặt đang được sử dụng nhiều cho nhiệm vụ an ninh, bảo mật chứ chưa tập trung chính vào mục đích chấm công điểm danh nhân viên Cùng với việc sử dụng giải pháp nhận diện khuôn mặt ấy, khách hàng cần phải sử dụng luôn cả dịch vụ lưu trữ và quản lý khuôn mặt do bên cung cấp dịch vụ đưa ra dẫn đến giá thành rất cao (Có thể tham khảo bảng giá dịch vụ của công ty Harnet, hay bảng giá và tính năng của giải pháp quản lý nhân sự ứng dụng nhận diện khuôn mặt của công ty Hikvision)

b, Hướng giải quyết

Từ những phân tích từ thực tế ở trên chúng ta đã có thể thấy được tính ứng dụng, thực tiễn của chủ đề ứng dụng công nghệ thông tin vào quản lý nhân sự

Trang 7

9 này Vì vậy nhiệm vụ đặt ra cho đồ án là tìm hiểu và nghiên cứu, phát triển ra một hệ thống quản lý nhân sự ứng dụng giải pháp nhận diện bằng khuôn mặt với giá thành thấp, có tính khả thi nhưng sẽ phải đảm bảo những tiêu chí sau:

- Độ tin cậy cao: Giảm thiểu tối đa các trường hợp lỗi Vì nhiệm vụ mà chúng ta thực hiện là điểm danh và ghi công làm việc cho nhân viên nên cần thực sự chính xác và tin cậy (Vì đó là đồng lương và cả cuộc sống của nhân viên)

- Thân thiện với người dùng: Có nhiều tính năng thông minh để tương tác với người dùng, tăng trải nghiệm người dùng, ghi nhận các trường hợp sai lỗi từ người dùng

- Hệ thống hoàn chỉnh và có thể đưa ra hoạt động ngoài thực tế

- Giải quyết tốt các nhiệm vụ đề ra của bài toán điểm danh chấm công Để đáp ứng được các nhiệm vụ trên thì hệ thống được sinh ra sẽ cần có hai thành

phần, một thành phần chịu trách nhiệm điểm danh chấm công được gọi là Máy chấm công và một phần chịu trách nhiệm quản lý nhân sự, đặc biệt là quản lý kết quả chấm công (nhiệm vụ được tập trung chính) – được gọi là phần mềm quản lý nhân sự

Máy chấm công là một thiết bị phần cứng được đặt ở cửa ra vào của văn

phòng, doanh nghiệp, lớp học để phục vụ cho việc điểm danh nhân viên, học sinh… Máy là một máy tính sử dụng hệ điều hành linux hoặc OSX hoặc Window, có màn hình, có camera, có loa phát thông báo và có kết nối internet (một tổ hợp thiết bị như vậy ta tạm gọi nó là máy chấm công) Máy chấm công này sẽ được cài đặt phần mềm chấm công bằng nhận diện khuôn mặt (được thiết kế, xây dựng và triển khai trong đồ án này) Với ý tưởng cho mỗi ca chấm công là:

Mỗi khi có nhân viên đi qua, máy sẽ chụp ảnh khuôn mặt nhân viên đồng thời ghi lại thời điểm đó và gửi thông tin đến phần mềm quản lý nhân sự Trong một ngày, máy chỉ lưu lại thời điểm đầu tiên và thời điểm cuối cùng đi qua máy, các thời điểm giữa sẽ bị ghi đè bởi thời điểm sau

Yêu cầu đối với máy chấm công khi hoàn thành đó là: - Nhận diện khuôn mặt nhanh, chính xác,

- Nhận diện được nhiều khuôn mặt cùng một thời điểm - Liên kết, trao đổi tốt với phần mềm quản lý nhân sự - Tương tác được với người dùng để báo lỗi chấm công

Bên cạnh về những yêu cầu về tính chính xác, yêu cầu chức năng thì máy cũng phải đảm bảo các yêu cầu phi chức năng như UI/UX, phải để người dùng biết được máy đang làm gì (ví dụ như máy sẽ vẽ khung lên khuôn mặt để người dùng

Trang 8

10 biết là máy đã phát hiện khuôn mặt và đang tiến hành xử lý, hay khi nào là điểm danh thành công cũng cần được thiết kế để dễ dàng nhận biết)

Phần mềm quản lý nhân sự sẽ là một ứng dụng dưới dạng giao diện web, nó

sẽ cung cấp API để máy chấm công có thể truyền thông tin chấm công và đồng thời là cả những lỗi chấm công để lưu trữ Người quản lý có thể dễ dàng xem lại và kiểm tra kết quả chấm công hay những lỗi chấm công Ngoài mục đích chính ban đầu là lưu trữ, quản lý kết quả chấm công ra thì đây cũng là một môi trường cung cấp nhiều chức năng quản lý khác dành cho người quản lý và cũng là trang thông tin, công cụ để nhân viên có thể thực hiện một số công việc hàng ngày

Hình 1: Sơ đồ hệ thống quản lý nhân sự

Sự kết hợp hài hòa giữa Máy chấm công và phần mềm quản lý nhân sự sẽ tạo ra một hệ thống quản lý nhân sự hoàn chỉnh, việc chấm công hàng ngày sẽ trở nên dễ dàng hơn, thông minh hơn và thú vị hơn Nhân viên đi làm sẽ được đánh giá trả lương một cách chính xác minh bạch, họ có kết quả thống kê các ngày đi làm để được trả lương xứng đáng Còn đối với doanh nghiệp, họ sẽ tiết kiệm rất nhiều thời gian và công sức trong việc chấm công nhân viên cũng như là giải quyết các khiếu nại về lương, đồng thời khi nhân viên thoải mái làm việc thì năng xuất cũng được tăng đáng kể Chúng ta sẽ cùng kiểm tra và xem kết quả hoạt động của hệ thống trong phần đánh giá ở phần sau của đồ án

Còn tiếp đây đồ án sẽ trình bày từng bước từng bước, từ việc tìm hiểu cơ sở của bài toán nhận diện khuôn mặt đến việc xây dựng máy chấm công và sau đó là phân tích thiết kế phần mềm quản lý nhân sự Rồi các thành phần trong hệ thống giao tiếp như thế nào, tương tác với người dùng ra làm sao, tất cả sẽ được trình bày ngay sau đây

Trang 9

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

Trang 10

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

Trang 11

13

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

Trang 12

14

Hình 4: Local Cell và Vector Gradient

Nói về vector gradient:

- Gradient Direction: Phương 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ó:

Trang 13

15 ∆𝑓 = $𝑓(𝑥 + 1, 𝑦) − 𝑓(𝑥 − 1, 𝑦)𝑓(𝑥, 𝑦 + 1) − 𝑓(𝑥, 𝑦 − 1) = /55 − 105

90 − 404 = /−5050 4 Do đó ta có:

Độ lớn vector gradient bằng !(−50)!+ 50! = 70.7107 Hướng vector gradient: arctan("#$

#$ ) = −45$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

Trang 14

16

1.3 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

Hình 7: Convolution neural network

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à:

- Ma trận đầu vào - Bộ lọc (filters) - Receptive field - Feature map

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

Trang 15

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ư:

- Max Pooling - Average Pooling - Sum Pooling

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

Trang 16

18 c, Activate Layer

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: - LeNet-5

- AlexNet - GoogleNet - ResNet

Trang 17

19

1.4 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

Trang 18

20 - Là thư viện điều kiện cần cài để thư viện face_recognition ở trên chạy

- 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ớ

Trang 19

3456

Trang 20

22

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

Trang 21

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

Đầ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<Face Location> 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

Trang 22

24

Mã hóa 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

Trang 23

25

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)

Trang 24

26

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

Trang 25

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

Trang 26

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

Ta có dữ liệu khuôn mặt cùng với nhãn tên được lấy từ bước xác thực 1 chuyển đến Bước này được sinh ra nhằm một lần nữa chắc chắn kết quả nhận được ở bước xác thực 1 là chính xác Trong bước xác thực này ta sẽ sử dụng nhiều khuôn mặt hơn của mỗi người cho việc kiểm tra Đầu tiên với mỗi mẫu khuôn mặt của nhân viên, ta sẽ lấy mỗi khuôn mặt từ 8-10 bức ảnh khuôn mặt ở nhiều góc độ khác nhau Ta đem mã hóa khuôn mặt này bằng hàm mã hóa đã sử dụng ở các bước trước (tất cả các bước đều dùng chung 1 hàm mã hóa) Sau khi mã mã hóa các bức ảnh đó ta sẽ lưu mảng 8-10 bản thông tin mã hóa khuôn mặt đó vào một file pickle và đặt tên trùng với ID của nhân viên Như vậy mỗi một khuôn mặt nhân viên sẽ có một file pickle này để dùng cho bước xác thực thứ 2 Tất cả các file này sẽ được lưu vào một thư mục để chuẩn bị cho pha xác thực 2

Đầu vào của pha thứ 2 là kết quả của pha 1 ở dạng:

FaceInfo [nhãn tên, thông tin mã hóa khuôn mặt]) ký hiệu là F (N, E)

- Dựa vào N (trong N có bao gồm thông tin về ID và tên nhân viên) ta sẽ tìm file pickle có tên trùng với ID trong N

- Đọc file pickle tìm được để lấy mảng dữ liệu để kiểm tra (mảng P) - So sánh thông tin mã hóa E với từng phần tử trong P

- Gọi Q là một thông tin mã hóa khuôn mặt trong mảng P

Để phục vụ cho bước xác thực 2 này ta đặt ra 2 giá trị ngưỡng X và Y - X là ngưỡng để 2 phần tử được coi là giống nhau Tức là thông tin

E và thông tin Q có độ trùng khớp vượt qua X thì hai thông tin này được coi là đang mô tả cùng một khuôn mặt Nếu X quá thấp thì việc tạp ra bước xác thực 2 này là vô dụng còn X quá cao thì có thể nhân viên phải mất cả phút để đợi điểm danh thành công nên không thực tế

- Y là ngưỡng để F được thông qua và được ghi nhận là điểm danh thành công với Y là số phần tử trong P trùng khớp với E

Nhận thấy việc chọn ngưỡng phù hợp có thể tăng tối đa hiệu năng của máy chấm công Vì vậy để xác định chính xác hai ngưỡng X và Y phù hợp nhất thì cần cài đặt hệ thống chạy thử trong thực tế một thời gian và từ kết quả thực tế ta tối ưu giá trị của X và Y

Trang 27

29

Ghi nhận kết quả chấm công

a, Báo chấm công thành công

Với mỗi khuôn mặt được phát hiện trong pha phát hiện khuôn mặt chúng ta sẽ vẽ một khung hình bao quanh khuôn mặt đó để báo cho người dùng rằng việc phân tích khuôn mặt đang diễn ra và hiển thị hình ảnh có vẽ khung mặt dưới dạng video

Khi có một dữ liệu khuôn mặt và nhãn tên được truyền đến từ pha xác thực 2 (điểm danh thành công) Ta sẽ sử dụng hàm imwrite() của openCV để export ảnh từ dữ liệu khuôn mặt với tên ảnh chứa thông tin về nhãn tên và thời điểm chấm công được ghi nhận để luồng hiển thị kết quả chấm công lấy thông tin hiển thị Dùng thư viện GTTS để chuyển đổi nhãn tên được ghi nhận thành âm thanh để phát lên và thông báo với người dùng Đây cũng là một cách để tăng trải nghiệm người dùng, người dùng có thể nghe thấy máy đọc tên mình khi điểm danh thành công

b, Gửi dữ liệu chấm công lên API

Song song với việc ghi nhận chấm công trên máy, với mỗi lần chấm công thành công, thông tin về thời điểm chấm công và nhãn tên (tên nhân viên) sẽ được ghi nhận và gửi lên website quản lý nhân sự của công ty để ban quản lý công ty quản lý

Máy chấm công có thể điểm danh lại một người sau 20 giây nếu người đó lại đi qua máy chấm công nên có 2 thời điểm sẽ được ghi nhận trên hệ thống đó là lần điểm danh đầu tiên và lần điểm danh cuối cùng của một nhân viên trong một ngày

Điều này yêu cầu chúng ta cần xây dựng một website với những API được xây dựng với mục đích nhận kết quả điểm danh để hiển thị cho người dùng

Báo lỗi chấm công

Vì là máy móc nên vẫn sẽ tồn tại những trường hợp lỗi điểm danh và có 2 lỗi phổ biến đó là:

- Không điểm danh được - Nhận nhầm thành người khác

Các lỗi này thường xảy ra khi điều kiện ánh sáng không tốt, các khuôn mặt na ná nhau và có sử dụng nhiều phụ kiện làm nhiễu như (Kính, lens … )

Những phương thức báo lỗi cụ thể cho hai lỗi trên sẽ được trình bày trong phần tương tác với người dùng ở mục 2.3 Việc thêm cơ chế báo lỗi như vậy vừa có thể đem lại sự chính xác cho việc chấm công trả lương thưởng, vừa cải thiện hiệu năng và độ chính xác cho những lần sử dụng sau Tuy vậy chúng ta cần thiết kế một phương thức báo lỗi đơn giản, nhanh chóng và vừa tăng sự thích thú và trải nghiệm của người dùng máy chấm công

2.2 Người dùng tương tác với máy chấm công

Trang 28

30 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

Trang 29

31 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ý

Trang 30

32 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

Trang 31

33

2.3 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

Trang 32

34

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

Trang 33

35

2.4 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

Trang 34

36

2.5 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

Trang 35

37

CHƯƠNG 3 XÂY DỰNG PHẦN MỀM QUẢN LÝ NHÂN SỰ

3.1 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ị

Trang 36

38

3.2 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

Trang 37

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ú

Trang 38

40 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ã Định danh: 1

- 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ụ

Quản lý nhân viên

- Tên ca sử dụng: Quản lý nhân viên - Mã Định danh: 2

- 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ã Định danh: 3

- 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ã Định danh: 4

- 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ì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

- 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 …

Trang 39

41

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

- 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ã Định danh: 8

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

- 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ú

Xóa ghi chú:

- Tên ca sử dụng: Xóa ghi chú - Mã định danh: 12

- 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ã định danh: 13

Ngày đăng: 16/05/2024, 11:47

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan