You are on page 1of 38

TRƯỜNG ĐẠI HỌC BÁCH KHOA

KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO
PBL5 - ĐỒ ÁN KỸ THUẬT MÁY TÍNH

HỆ THỐNG ĐIỂM DANH LỚP HỌC DÙNG NHẬN DIỆN


GƯƠNG MẶT

Cán bộ doanh nghiệp hướng dẫn: Trần Phương Nam – B.A.P


Giảng viên đồng hướng dẫn: TS. Ninh Khánh Duy

STT NHÓM: 24
LỚP HỌC PHẦN ĐỒ ÁN
HỌ VÀ TÊN SINH VIÊN
CHÂU TRƯỜNG LONG 18N14B
TRẦN CHÍ MINH 18N14B
LÊ ANH TUẤN 18N14B
HỒ NGUYÊN VŨ 18N14B

ĐÀ NẴNG, 06/2021
TÓM TẮT ĐỒ ÁN
Hiện nay, với tốc độ phát triển nhanh chóng của công nghệ thông tin và được
ứng dụng rộng rãi trong nhiều lĩnh vực của xã hội. Trong đó hệ thống tự động hóa là
một phần không thể thiếu.
Ở các trưởng học hiện nay, việc điểm danh trước mỗi giờ học không còn xa lạ.
Nhưng nó diễn ra một các thủ công, vì là thủ công nên mất khá nhiều thời gian 10 -15
phút cho việc điểm danh. Nắm bắt được yếu điểm đó nên ý tưởng cho việc điểm danh
tự động rất cần thiết.
Để xây dựng được hệ thống đó chúng ta cần các thành phần riêng biệt để xử lý
từng công việc một. Như camera cho việc ghi hình, server cho việc xử lý điểm danh,
cơ sở dữ liệu cho việc lưu trữ và một mobile app giao diện hoàn chỉnh để giáo viên
hoặc giảng viên có thể quản lý được.
Từ các hệ thống con đó, yêu cầu truyền thông kết nối giữa chúng cũng là một
vấn đề nan giải vì các hệ thống con này hoạt động nên các nền tảng riêng biệt. Do đó
giải pháp ở đây là sẽ cung cấp các API (giao diện lập trình ứng dụng) cho các hệ thống
con có thể kết nối với nhau.
Cuối cùng xin chân thành cảm ơn thầy TS. Ninh Khánh Duy và anh Trần
Phương Nam – Công ty B.A.P đã nhiệt tình hướng dẫn, gợi ý những giải pháp tuyệt
vời để chúng em có thể hoàn thành được dự án này.
BẢNG PHÂN CÔNG NHIỆM VỤ

Sinh viên thực hiện Các nhiệm vụ Kết quả


-Face Detection – Haarcascade , MTCNN  Đã hoàn thành
-Face Encoder – Facenet  Đã hoàn thành
-Face Identifier – SVM, KNN, FAISS  Đã hoàn thành
Châu Trường Long
-Backend API – Django  Đã hoàn thành
-Raspberry Server – Camera  Đã hoàn thành
-Data Augmentation  Đã hoàn thành
-Mockup GUI  Đã hoàn thành
-Mobile App  Đã hoàn thành
Trần Chí Minh
-API Connection  Đã hoàn thành
-SRS Document  Đã hoàn thành
-Crawl Data  Đã hoàn thành
-Mockup GUI  Đã hoàn thành
Lê Anh Tuấn -Mobile App  Đã hoàn thành
-API Connection  Đã hoàn thành
-Sequence Diagram  Đã hoàn thành
-Database – MySQL (Using)  Đã hoàn thành
-Database – MongoDB – NoSQL (Tested)  Đã hoàn thành
Hồ Nguyên Vũ -API – Django  Đã hoàn thành
-Usecase Diagram  Đã hoàn thành
-API document  Đã hoàn thành
MỤC LỤC

1. GIỚI THIỆU....................................................................................................................8
2. GIẢI PHÁP......................................................................................................................8
2.1. TỔ NG QUAN HỆ THỐ NG.........................................................................................................8
2.2. GIẢ I PHÁ P PHẦ N CỨ NG...........................................................................................................9
2.3. GIẢ I PHÁ P TRUYỀ N THÔ NG.................................................................................................11
2.3.1. Kết nối có dây.................................................................................................................. 11
2.3.2. RESTful API...................................................................................................................... 11
2.4. GIẢ I PHÁ P PHẦ N MỀ M..........................................................................................................12
2.4.1. Tổng quan về hệ thống nhận diện..........................................................................12
2.4.2. Face encoder.................................................................................................................... 12
2.4.3. Face detector................................................................................................................... 15
2.4.4. Face identifier................................................................................................................. 15
2.4.5. Database........................................................................................................................... 16
2.4.6. Raspberry.......................................................................................................................... 17
2.4.7. Server.................................................................................................................................. 17
2.4.8. Mobile:................................................................................................................................ 20
3. KẾT QUẢ.......................................................................................................................30
3.1. KẾ T QUẢ NHẬ N DIỆ N............................................................................................................30
3.1.1. Hiệu năng (FPS) của hệ thống nhận diện...........................................................30
3.1.2. Độ chính xác giữa các mô hình xác thực gương mặt....................................30
3.1.3. So sánh kết quả nhận diện của model Facenet 128d và 512d...................31
1.1. KẾ T QUẢ API.........................................................................................................................32
1.2. KẾ T QUẢ MOBILE..................................................................................................................33
2. KẾT LUẬN....................................................................................................................37
3. TÀI LIỆU THAM KHẢO.............................................................................................37
MỤC LỤC HÌNH ẢNH

Hình 1. Tổng quan hệ thống..........................................................................................9


Hình 2. Raspberry pi 3.................................................................................................10
Hình 3. Camera............................................................................................................10
Hình 4. Thẻ nhớ...........................................................................................................10
Hình 5. Hệ thống nhận diện.........................................................................................12
Hình 6. Facenet layers [11]..........................................................................................13
Hình 7. Siam network..................................................................................................14
Hình 8. Triple loss.......................................................................................................14
Hình 9. Face detection.................................................................................................15
Hình 10. Database diagram..........................................................................................16
Hình 11. Mockup.........................................................................................................21
Hình 12. Mô hình MVVM [10]..................................................................................21
Hình 13. Sơ đồ thành phần [10]...................................................................................22
Hình 14. Cấu trúc thư mục...........................................................................................23
Hình 15. Use Case.......................................................................................................25
Hình 16. Đăng ký sequence.........................................................................................26
Hình 17. Đăng nhập sequence.....................................................................................26
Hình 18. Điểm danh sequence.....................................................................................27
Hình 19. Quản lý học sinh sequence............................................................................28
Hình 20. Xem lịch sử sequence...................................................................................29
Hình 21. Lấy lại mật khẩu sequence............................................................................29
Hình 22. Đồ thị accuracy.............................................................................................31
Hình 23. 512 chiều.......................................................................................................32
Hình 24. 128 chiều.......................................................................................................32
Hình 25. Login............................................................................................................. 34
Hình 26. Màn hình chính.............................................................................................35
Hình 27. Điểm danh.....................................................................................................35
Hình 28. Thống kê kết quả điểm danh.........................................................................36
Hình 29. Giao diện khác..............................................................................................37
MỤC LỤC BẢNG BIỂU

Bảng 1. Danh sách phần cứng......................................................................................10


Bảng 2. FPS khi sử dụng MTCNN..............................................................................30
Bảng 3. FPS khi sử dụng Haarcascade.........................................................................30
Bảng 4. Accuracy của SVM và KNN..........................................................................31
1. Giới thiệu
1.1. Lý do chọn đề tài
Hiện nay có rất nhiều loại hệ thống chấm công và điểm danh tự động khác nhau
như: vân tay, thẻ từ, đặc biệt trong đó là hệ thống nhận diện gương mặt sử dụng các
mô hình deep learning.
Các hệ thống này thường được đặt trước cửa ra vào, cự ly gần. Do đó dự án này sẽ
phát triển hệ thống chấm công dùng nhận diện gương mặt và cung cấp các giải pháp
nghiệp vụ để quản lý thông qua mobile app.

1.2. Mục đích của đề tài


 Áp dụng các kiến thức được học song hành đó là về: trí tuệ nhân tạo, vi điều
khiển và khoa học dữ liệu để xây dựng kiến trúc và hệ thống nhận diện
gương mặt.

 Vận dụng kiến thức cho việc thu thập dữ liệu là các hình ảnh của sinh viên.
Chuẩn hóa và làm sạch dữ liệu

 Tìm hiểu và triển khai mô hình nhận diện gương mặt từ các tập dữ liệu đó.
Sau đó tích hợp nó vào hệ thống backend service cung cấp các APIs cho
toàn bộ các thiết bị trong hệ thống.

 Phía giao diện người dùng sẽ là ứng dụng di động được phát triển dựa trên
công nghệ xamarin cho mục đích đa nền tảng, nhằm hỗ trợ nhiều người
dùng hơn.

2. Giải pháp

2.1. Tổng quan hệ thống


Hình 1. Tổng quan hệ thống

- Để giải quyết bài toán phức tạp: Từ một hệ thống lớn phức tạp, sẽ đi chia hệ thống
đó thành các hệ thống con nhỏ hơn, đơn giản hơn mỗi hệ thống đó sẽ đảm nhận
một phần công việc khác nhau.

- Như ở sơ đồ trên có thể thấy nó gồm 4 hệ thống con:


 Raspberry server
 Main server
 Mobile app
 Database

2.2. Giải pháp phần cứng

Tên linh kiện Hình ảnh Mô tả

Raspberry Pi 3 -Raspberry Pi có các thành phần


chính như:

1. CPU ARM Cortex-A53
Quadcore 1.2GHz
2. GPU
3. RAM 1GB
4. Khe cắm thẻ microSD
5. Wifi 802.11n
Hình 2. Raspberry pi 3
6. Bluetooth 4.1
7. 4 cổng USB

-Hệ điều hành: Raspbian 64 bit

-Camera xiaomi
Camera -Độ phân giải: 1080P

-Kết nối: USB, Wifi

Hình 3. Camera

Thẻ nhớ Sandisk Ultra 32 GB.


Thẻ nhớ
Dùng để lưu trữ OS và dữ liệu

Hình 4. Thẻ nhớ

Bảng 1. Danh sách phần cứng

2.3. Giải pháp truyền thông


2.3.1. Kết nối có dây

- Camera kết nối với raspberry thông qua cổng dây USB
- Raspberry kết nối với server thông dây ethernet
2.3.2. RESTful API

API (Application Programming Interface) là một tập các quy tắc và cơ chế mà theo
đó, một ứng dụng hay một thành phần sẽ tương tác với một ứng dụng hay thành phần
khác. API có thể trả về dữ liệu mà bạn cần cho ứng dụng của mình ở những kiểu dữ
liệu phổ biến như JSON hay XML [8].
REST (REpresentational State Transfer) là một dạng chuyển đổi cấu trúc dữ liệu,
một kiểu kiến trúc để viết API. Nó sử dụng phương thức HTTP đơn giản để tạo cho
giao tiếp giữa các máy. Vì vậy, thay vì sử dụng một URL cho việc xử lý một số thông
tin người dùng, REST gửi một yêu cầu HTTP như GET, POST, DELETE, vv đến một
URL để xử lý dữ liệu [8].
RESTful API là một tiêu chuẩn dùng trong việc thiết kế các API cho các ứng dụng
web để quản lý các resource. RESTful là một trong những kiểu thiết kế API được sử
dụng phổ biến ngày nay để cho các ứng dụng (web, mobile…) khác nhau giao tiếp với
nhau [8].
REST hoạt động chủ yếu dựa vào giao thức HTTP. Các hoạt động cơ bản nêu trên
sẽ sử dụng những phương thức HTTP riêng [8]:
 GET (SELECT): Trả về một Resource hoặc một danh sách Resource.
 POST (CREATE): Tạo mới một Resource.
 PUT (UPDATE): Cập nhật thông tin cho Resource.
 DELETE (DELETE): Xoá một Resource.
2.4. Giải pháp phần mềm
2.4.1. Tổng quan về hệ thống nhận diện

Hình 5. Hệ thống nhận diện

2.4.2. Face encoder

- Face encoder: là một module trong hệ thống được dùng để trích xuất đặc trưng
của một gương mặt có trong bức ảnh.
- Sử dụng model facenet để đi trích xuất đặc trưng. Facenet gồm có hai thành
phần chính đó là siam network và triple loss function
- Layers của Facenet [11]:
Hình 6. Facenet layers [11]

- Siam network:
 Siam network [9] với tên đầy đủ là Siamese Neural Network, dựa trên một
mạng nơron tích chập (CNN) đã lược bỏ đi output layer. Kiến trúc mạng này
sinh ra với mục đích giải quyết bài toán liệu từ hai bức ảnh chứa mặt người
chụp trong hoàn cảnh khác nhau thì có phải cùng một người không.
 Siam network được ứng dụng cho các bài toán thực tế như: điểm danh,
chấm công, hay mở chức năng mở khóa điện thoại bằng gương mặt, …
Siam network được giới thiệu lần đầu trong bài báo [1] “DeepFace: Closing
the Gap to Human-Level - Yaniv Taigman. elt.”
 Input của mạng Siam là hai bức ảnh bất kì, Output là hai vector đặc trưng
của bức ảnh. Mà vector đặc trưng biểu diễn ở dạng số học nên có thể sử
dụng chúng để kiểm tra xem độ tương đồng giữa các bức ảnh bằng cách đưa
vào một loss function. Hàm loss thường được dùng là một norm bậc 2.
2
 Công thức Norm bậc 2 có dạng:¿∨f ( x 1 )−f (x 2)∨¿2
Hình 7. Siam network

- Triple loss function [9]:


 Triple loss sử dụng một khái niệm gọi là anchor. Cụ thể trong hệ thống này
sẽ là anchor image. Anchor image này sẽ là các bức ảnh gốc của sinh viên
như ảnh thẻ 3x4, nói chúng bức ảnh này là cố định.
 Như tên của loss function này là triple nên sẽ cần đến 3 bức ảnh: một là
anchor, hai là positive và ba là negative.

Hình 8. Triple loss

 Mục tiêu là tối thiểu hóa khoảng cách giữa 2 ảnh khi chúng là negative và
tối đa hóa khoảng cách khi chúng là positive. Thật ra có thể hiểu đơn giản là
triple loss có thể kết hợp từ hai norm loss function. Do đó công thức là:
n
L( A , P , N )=∑ max ⁡(¿∨f ( A i )−f (Pi)∨¿22−¿∨f ( A i)−f (N i)∨¿ 22+ α , 0)
i=0
 Do đó khi đưa lần lượt bộ ba hình ảnh vào train model thì model sẽ học
được cả trường hợp sai lẫn đúng.
2.4.3. Face detector

- Face detection là một module trong hệ thống dùng để xác định các gương mặt
có trong bức ảnh và đánh dấu bằng bounding box.
- Sử dụng hai model chính đó là Haarcascade và MTCNN.

Hình 9. Face detection

2.4.4. Face identifier

- Face identifier là một module trong hệ thống dùng để nhận dạng một gương
mặt đó là ai hay thuộc về một nhãn nào đó, sau khi đã trích xuất được đặc trưng
của gương mặt thành vector 128 chiều hoặc 512 chiều.
- Sử dụng ba classifier model SVM, KNN và FAISS (Facebook AI Similarity
Search)

- SVM [12] là một thuật toán giám sát, nó có thể sử dụng cho cả việc phân loại
hoặc đệ quy. Tuy nhiên nó được sử dụng chủ yếu cho việc phân loại. Trong
thuật toán này, chúng ta vẽ đồ thị dữ liệu là các điểm trong n chiều ( ở đây n là
số lượng các tính năng bạn có) với giá trị của mỗi tính năng sẽ là một phần liên
kết. Sau đó chúng ta thực hiện tìm "đường bay" (hyper-plane) phân chia các
lớp. Hyper-plane nó chỉ hiểu đơn giản là 1 đường thẳng có thể phân chia các
lớp ra thành hai phần riêng biệt.
Support Vectors hiểu một cách đơn giản là các đối tượng trên đồ thị tọa độ quan
sát, Support Vector Machine là một biên giới để chia hai lớp tốt nhất.

- KNN (K-Nearest Neighbors) [13] là một trong những thuật toán học có giám
sát đơn giản nhất được sử dụng nhiều trong khai phá dữ liệu và học máy. Ý
tưởng của thuật toán này là nó không học một điều gì từ tập dữ liệu học (nên
KNN được xếp vào loại lazy learning), mọi tính toán được thực hiện khi nó cần
dự đoán nhãn của dữ liệu mới.
Lớp (nhãn) của một đối tượng dữ liệu mới có thể dự đoán từ các lớp (nhãn) của
k hàng xóm gần nó nhất.

- Facebook AI Similarity Search (FAISS) [14] là một thư viện sử dụng


similarity search cùng với clustering các vector. Faiss được nghiên cứu và phát
triển bởi đội ngũ Facebook AI Research; được viết trong C++ và đóng gói trên
môi trường Python. Bộ thư viện bao gồm các thuật toán tìm kiếm vector đa
chiều trong similarity search

2.4.5. Database

- Database sử dụng là dạng truy vấn có cấu trúc SQL, trên nền tảng MySQL.

Hình 10. Database diagram


2.4.6. Raspberry

- Raspberry là thành phần phần cứng kết nối trực tiếp với camera. Để có thể điều
khiển được camera thì raspberry bắt buộc phải có một module server chạy trong
nó nhằm cung cấp các API cho các thành phần khác trong hệ thống có thể kết
nối đến.
- Xây dựng API cho raspberry sẽ sử dụng django framework, restful API.
 http://host:port/raspberry/camera/open/<int:id>/
 Method: GET
 Parameters: <int:id> “id của camera”
 Function: Mở camera sẵn sàng cho việc ghi hình

 http://host:port/raspberry/camera/capture/
 Method: GET
 Parameters: None
 Function: Đọc frame từ camera

 http://host:port/raspberry/camera/close/
 Method: GET
 Parameters: None
 Function: Tắt camera
2.4.7. Server

- Server là thành phần chính cực kỳ quan trọng trong hệ thống. Nó sẽ cung cấp
các API chính cho toàn bộ hệ thống, các API này sẽ được gọi ở phía client là
mobile app.
- Xây dựng API cho server sẽ sử dụng django framework, restful API. Các API
chia theo các chức năng của cùng một đối tượng.
Account (5 APIs)
 http://host:port/account/login/
 Method: POST
 Parameters: None
 Function: Đăng nhập
 http://host:port/account/password/update/
 Method: PUT
 Parameters: None
 Function: Đổi mật khẩu
 http://host:port/account/password/reset/<str:email>/
 Method: GET
 Parameters: <str:email> “email”
 Function: Gửi yêu cầu reset mật khẩu
 http://host:port/account/password/reset/<str:email_b64>/<str:toke
n>/
 Method: GET, POST
 Parameters: <str:email_b64> “email mã hóa base 64”,
<str:token> “chuỗi ngẫu nhiên”
 Function: Link tạm thời dẫn đến form đổi mật khẩu
 http://host:port/account/signup/<str:email_b64>/<str:token>/
 Method: POST
 Parameters: <str:email_b64> “email mã hóa base 64”,
<str:token> “chuỗi ngẫu nhiên”
 Function: Link để kích hoạt tài khoản
Lecturer (2 APIs)
 http://host:port/lecturer/detail/<str:lecturer_id>/
 Method: GET
 Parameters: <str:lecturer_id> “id giảng viên”
 Function: Lấy thông tin giảng viên
 http://host:port/lecturer/update/
 Method: PUT
 Parameters: None
 Function: Cập nhật thông tin giảng viên

Subject (3 APIs)
 http://host:port/subject/list/<str:lecturer_id>/<str:day>/
 Method: GET
 Parameters: <str:lecturer_id> “id giảng viên”, <str:day>
“thứ muốn lấy”
 Function: Danh sách môn học
 http://host:port/subject/create/
 Method: POST
 Parameters: None
 Function: Tạo môn học mới
 http://host:port/subject/time_slot/list/<str:room_id>/<str:day>/
 Method: GET
 Parameters: <str:room_id> “id phòng học”, <str:day> “thứ
muốn lấy”
 Function: Lấy slot của phòng học trong ngày hôm đó
Student (1 API)
 http://host:port/student/list/<str:subject_id>/
 Method: GET
 Parameters: <str:subject_id> “id môn học”
 Function: Lấy danh sách sinh viên
Room (3 APIs)
 http://host:port/room/list/
 Method: GET
 Parameters: None
 Function: Lấy danh sách phòng học
 http://host:port/room/update/
 Method: PUT
 Parameters: None
 Function: Cập nhật phòng học
 http://host:port/room/create/
 Method: POST
 Parameters: None
 Function: Tạo phòng
Process (2 APIs)
 http://host:port/attendance/process/create/<str:subject_id>/
 Method: GET
 Parameters: <str:subject_id> “id môn học”
 Function: Tạo process điểm danh
 http://host:port/attendance/process/state/<str:process_id>/
 Method: GET
 Parameters: <str:process_id> “id process”
 Function: Lấy trạng thái của process
Attendance (6 APIs)
 http://host:port/attendance/list/<str:process_id>/
 Method: GET
 Parameters: <str:process_id> “id process”
 Function: Lấy danh sách điểm danh
 http://host:port/attendance/update/<str:subject_id>/<str:process_i
d>/
 Method: PUT
 Parameters: <str:subject_id> “id môn học”,
<str:process_id> “id process”
 Function: Cập nhật tiến trình điểm danh
 http://host:port/attendance/history/list/<str:subject_id>/<str:date>/
 Method: GET
 Parameters: <str:subject_id> “id môn học”, <str:date>
“ngày muốn lấy”
 Function: Lấy lịch sử điểm danh
 http://host:port/attendance/history/latest/<str:subject_id>/<str:date>/
 Method: GET
 Parameters: <str:subject_id> “id môn học”, <str:date>
“ngày muốn lấy”
 Function: Lấy lịch sử điểm danh gần nhất
 http://host:port/attendance/history/detail/<str:subject_id>/
 Method: GET
 Parameters: <str:subject_id> “id môn học”
 Function: Chi tiết lịch sử điểm danh
 http://host:port/attendance/history/subject/<str:subject_id>/
 Method: GET
 Parameters: <str:subject_id> “id môn học”
 Function: Lấy file PDF thống kê danh sách điểm danh
2.4.8. Mobile:

- Bài toán cần giải quyết:


Xây dựng app mobile dành cho giáo viên tương tác với hệ thống gồm
những chức năng sau:
 Hiển thị lịch dạy của giáo viên theo thứ ngày trong tuần (Bao gồm
các thông tin chi tiết của môn học và danh sách sinh viên)
 Kích hoạt camera yêu cầu hệ thống điểm danh tự động.
 Xem lịch sử điểm danh bao gồm số sinh viên có mặt/vắng trong
lớp học, chỉnh sửa thủ công qua danh sách Known/Unknown, lưu
kết quả quá trình.
 Hiển thị đồ thị pie-chart, bảng biểu về số lượng sinh viên tham gia
môn học trong các tuần liên tiếp, cảnh báo cho giáo viên các sinh
viên thường xuyên vắng mặt.
 Xem, sửa thông tin cá nhân người dùng.

- Công nghệ sử dụng: Xamarin (android)


- Đối tượng người dùng: Giảng viên.
- Triển khai ý tưởng
 Mockup

Hình 11. Mockup

- Mô hình triển khai ứng dụng: Mô hình MVVM (Model – View-


ViewModel).
a. Giới thiệu:

Hình 12. Mô hình MVVM [10]

Hiện nay, đã có nhiều thay đổi trong việc xử lý sự kiện và binding dữ liệu, giữa
các tầng của ứng dụng với nhau. Qua đó, hầu hết các công việc của tầng kết hợp
với lớp presentation. Điều này làm nảy sinh ra nhu cầu phải có một mô hình phát
triển ứng dụng mới phù hợp hơn. Và do đó, Model – View – ViewModel
(MVVM) pattern ra đời và ngày càng trở nên phổ biến [10].
Đa số các ứng dụng thuộc bất kỳ nền tảng nào cũng có thể chia thành hai phần:
giao diện (View) và dữ liệu (Model). Vì việc tách riêng các phần này, cần phải
có một phần trung gian nào đó nối kết hai phần này lại, và chúng tạo nên một
mô hình (pattern).

Quen thuộc và phổ biến nhất với chúng ta là mô hình MVC (Model – View –
Controller) . Có thể nói MVC là một mô hình tiêu chuẩn bởi sự logic và hợp lý
của nó. Điều này làm cho việc xuất hiện một mô hình phát triển ứng dụng mới
có thể khiến bạn bỡ ngỡ.

Trước khi tìm hiểu về mô hình MVVM này, ta cùng điểm qua một số tính năng
mới trong xu hướng phát triển ứng dụng hiện nay.

b. Cấu trúc
 Data binding là gì
Binding Data trong MVVM là điều không bắt buộc, một số implement chỉ
đơn giản làm ViewModel như một lớp trung gian giữa Model-View, lớp này
giữ nhiệm vụ format data hoặc mapping trạng thái của View. Tuy nhiên cách
này theo mình khiến cho ViewModel trở thành Presenter và đưa kiến trúc
này về MVP.

 Sơ đồ thành phần

Hình 13. Sơ đồ thành phần [10]

View [10]: Tương tự như trong mô hình MVC, View là phần giao diện
của ứng dụng để hiển thị dữ liệu và nhận tương tác của người dùng. Một
điểm khác biệt so với các ứng dụng truyền thống là View trong mô hình
này tích cực hơn. Nó có khả năng thực hiện các hành vi và phản hồi lại
người dùng thông qua tính năng binding, command.

Model [10]: Cũng tương tự như trong mô hình MVC. Model là các đối
tượng giúp truy xuất và thao tác trên dữ liệu thực sự.

ViewModel [10]: Lớp trung gian giữa View và Model. ViewModel có


thể được xem là thành phần thay thế cho Controller trong mô hình MVC.
Nó chứa các mã lệnh cần thiết để thực hiện data binding, command. Mối
quan hệ giữa View và View-Model là View sẽ được ánh xạ tới View-
Model nhưng View-Model lại không biết thông tin gì về View. Nó được
ẩn dấu qua cách sử dụng Data-binding và cơ chế của mô hình Observer.
Một View-Model có thể được ánh xạ từ nhiều View.

 Cấu trúc thư mục

Thông thường khi sử dụng với MVVM chúng ta nên tạo 3 thư mục
chính chứa các file code liên quan.

Hình 14. Cấu trúc thư mục

View:
1. Trong thư mục Views chứ các file giao diện. Và mỗi file giao diện đều
có class code-behind đi kèm. Đặc biệt file code-behind ta sẽ không sử dụng
đến, mọi điều cần làm sẽ chuyển xuống class ViewModel. Tất nhiên là bạn
có thể code trong file code-behind của XAML nhưng điều đó sẽ phá vỡ quy
ước MVVM. Bạn có thể khai báo thuộc tính datacontext hoặc vài thiết lập
khác nhưng nên hạn chế tối thiểu code ở đây. Views được sử dụng để kết
hợp với các mô hình MVVM… Nó dùng để cung cấp một sự chia tách gọn
gàng của khái niệm giữa UI và presentation logic và data.

Model
2. Trong thư mục Models trong đó tạo các class chứa data và bất kỳ liên kết
validation, logic nghiệp vụ để chắc chắn tính toàn vẹn của data, bạn có thể
tách ra thư mục Repositories khác. Chúng được dùng như một phần của mô
hình MVVM.

ViewModel:
3. Tương tự ta cũng tạo một thư mục ViewModels. Thông thường một file
giao diện thì ta tạo một class ViewModels tương ứng (có đôi lúc ta tạo nhiều
class phụ giúp tinh giản file code và gọi chúng trong class ViewModels
chính).
4. ViewModels sẽ sử dụng các model nếu cần định nghĩa dữ liệu. Sự liên
kết giữa View-ViewModel giúp chúng gửi và nhận dữ liệu, để hiểu rõ ta cần
tìm hiểu các khái niệm về Binding, DataContext, Behaviors SDK. Nhờ đó ta
tách code-behind của View và đưa xuống View Model.

5. Ngoài ra một lớp ViewModels chứa presentation logic và state của ứng
dụng. ViewModels cần chứa các chức năng của ứng dụng. ViewModels
định nghĩa properties, commands, và events, để chuyển đổi controls trong
view cần data-bind.

c. Đánh giá
MVVM [10] có thể nói là mô hình kiến trúc được rất nhiều các cư dân
trong cộng đồng ưa chuộng. Điểm tinh hoa của kiến trúc này là ở
ViewModel, mặc dù rất giống với Presenter trong MVP tuy nhiên có 2
điều làm nên tên tuổi của kiến trúc này đó là:

 ViewModel không hề biết gì về View, một ViewModel có thể


được sử dụng cho nhiều View (one-to-many)
 ViewModel sử dụng Observer design pattern để liên lạc với
View (thường được gọi là binding data, có thể là 1 chiều hoặc 2
chiều tùy nhu cầu ứng dụng).

Chính đặc điểm này MVVM thường được phối hợp với các thư viện hỗ
trợ Reactive Programming hay Event/Data Stream, đây là triết lý lập trình
hiện đại và hiệu quả phát triển rất mạnh trong những năm gần đây.
- Usecase diagram:

Hình 15. Use Case

- Sequence diagram:
Hình 16. Đăng ký sequence

Hình 17. Đăng nhập sequence


Hình 18. Điểm danh sequence
Hình 19. Quản lý học sinh sequence
Hình 20. Xem lịch sử sequence

Hình 21. Lấy lại mật khẩu sequence


3. Kết quả

3.1. Kết quả nhận diện


3.1.1. Hiệu năng (FPS) của hệ thống nhận diện

Tốc độ khung hình FPS của SVM, KNN và FAISS

 Sử dụng MTCNN detector

SVM KNN FAISS


128 Dim 11 FPS 12 FPS 6 FPS
128 Dim (PCA) 10 FPS 10 FPS 5 FPS
512 Dim 10 FPS 9 FPS 6 FPS
Bảng 2. FPS khi sử dụng MTCNN

 Sử dụng Haarcascade detector

SVM KNN FAISS


128 Dim 17 FPS 16 FPS 10 FPS
128 Dim (PCA) 15 FPS 15 FPS 9 FPS
512 Dim 15 FPS 14 FPS 9 FPS
Bảng 3. FPS khi sử dụng Haarcascade

Kết quả cho thấy hiệu năng của hai mô hình SVM và KNN là vượt trội hơn so với
FAISS. Để lựa chọn tiếp mô hình phù hợp, sẽ tiếp tục so sánh độ chính xác của SVM
và KNN.

3.1.2. Độ chính xác giữa các mô hình xác thực gương mặt

Kết quả thử nghiệm dựa trên tập dữ liệu của 43 sinh viên với 30,524 bức ảnh. Lưu
ý do tập dữ liệu thu thập từ việc cắt frame từ các video cận mặt của các sinh viên, nên
giữa các bức ảnh của mỗi sinh viên có độ tương đồng rất cao. Có thể do đó mà chúng
cho kết quả accuracy khá cao. Tuy nhiên chỉ để tham khảo, kết quả chạy thực tế có thể
khác.
SVM KNN
Test size = 0.99 0.9231 0.7310
Test size = 0.9 0.9862 0.9787
Test size = 0.5 0.9958 0.9869
Test size = 0.3 0.9960 0.9882
Bảng 4. Accuracy của SVM và KNN

Hình 22. Đồ thị accuracy

Có thể thấy mỗi khi giảm test size đi, đồng nghĩa với việc tăng training size lên thì
accuracy của mỗi mô hình SVM và KNN để tăng. Nhưng với test size là 0.99 thì SVM
lại cho độ chính xác cao hơn ngay khi dữ liệu training thấp.
3.1.3. So sánh kết quả nhận diện của model Facenet 128d và 512d

So sánh độ chính xác của hai model facenet 128 chiều và 512 chiều
- Với cùng một bức ảnh thì kết quả nhận diện của face encoder khi sử dụng
model 128 chiều cho kết quả tốt hơn 512 chiều.
- Giải thích: vì đối với các bức ảnh có quá nhiều người thì khi crop một gương
mặt ra thì hình sẽ bị bể do độ phân giải thấp dẫn đến bị nhiễu.
Hình 23. 512 chiều

Hình 24. 128 chiều

- Có thể thấy cùng một bức ảnh model 512 chiều cho kết quả sai 4 người. Nhưng
128 chiều cho độ chính xác cao hơn và nhận diện đúng hoàn toàn.

1.1. Kết quả API


 Server cung cấp 23 APIs cho phía Mobile có thể sử dụng đến.
 Raspberry cung cấp 3 APIs với các chức năng chính như đóng-mở
camera, đọc hình ảnh từ camera.

1.2. Kết quả mobile


 Hoàn thành xong giao diện.
 Giao diện đăng nhập
 Giao diện đăng ký
 Giao diện trang chính
 Giao diện lớp học phần
 Giao diện xem lịch sử lớp học phần
 Giao diện thông tin cá nhân giảng viên
 Giao diện thông tin cá nhân học sinh
 Giao diện danh sách unknown
 Giao diện danh sách phòng học
 Giao diện lấy lại mật khẩu
 Giao diện đồ thị
 Hoàn thành các chức năng chính
 Đăng ký, Đăng nhập, Lấy lại mật khẩu
 Tạo môn học
 Điểm danh lớp học
 Cập nhật trạng thái cho học sinh
 Xem lịch sử lớp học
 Thay đổi thông tin cá nhân
- Giao diện app:
 Giao diện đăng ký:
 Trước tiên giảng viên cần nhập thông tin bắt buộc: Email và
Password và các thông tin cơ bản (Name, Phone, Faculty) để hoàn
thành thủ tục đăng ký tài khoản.
 Sau khi đăng ký, giảng viên cần active account với Email vừa
đăng ký
 Giao diện đăng nhập:
 Tại đây giảng viên cần nhập Email và Password đã được đăng ký
để đăng nhập vào hệ thống.

Hình 25. Login

 Giao diện chính


 Tại đây sẽ hiển thị danh sách các lớp học phần có theo thời khóa
biểu của giảng viên cũng như danh sách tất cả các lớp học phần
hiện có của giảng viên đó
 Giảng viên có thể thêm một môn học mới bằng cách upload file
excel danh sách danh sinh viên của lớp và chọn thời khóa biểu
phù hợp
 Có Menu điều hướng giữa các màn hình
Hình 26. Màn hình chính


Giao diện lớp học
 Danh sách học sinh của lớp học phần sẽ được hiển thị ở đây
 Giảng viên thao tác với danh sách học sinh qua việc điểm danh
lớp học. Sau khi quá trình điểm danh diễn ra, danh sách sinh viên
có mặt sẽ được hiển thị lên
 Giảng viên tiến hành so sánh và chỉnh sửa trạng thái cho những
sinh viên nhận diện sai và lưu lại lớp học

Hình 27. Điểm danh


 Giao diện lịch sử lớp học
 Tại đây giảng viên có thể xem lại danh sách học sinh của tất cả
các lớp học phần của mình đã dạy qua file PDF
 Giảng viên có thể tải file về điện thoại theo nhu cầu

Hình 28. Thống kê kết quả điểm danh



Một số giao diện khác:
 Giao diện thông tin cá nhân
 Giao diện danh sách phòng học
 Biểu đồ danh sách học sinh tham gia lớp học
 Giao diện lấy lại mật khẩu

Hình 29. Giao diện khác


2. Kết luận
2.1. Kết luận
- Phần face encoding sẽ sử dụng model facenet 128 chiều dữ liệu để có thể giảm
nhiễu của 1 bức ảnh khi trích xuất đặc trưng
- Phần classifier model sẽ sử dụng mô hình SVM vì nó cho độ chính xác và tốc
độ thực thi tốt nhất so với KNN và FAISS
2.2. Hướng phát triển
- Để có thể cải thiện được độ chính xác của hệ thống nhận diện thì 3 hướng để
phát triển và triển khai:
 Chọn camera phù hợp có độ phân giải cao.
 Giảm chiều dữ liệu để có thể giảm được nhiễu.
 Sử dụng một model deep learning để có thể nâng cao độ phân giải
của hình ảnh cực cao. Đề xuất ESRGAN model.
- Sử dụng một model encoding khác sao cho yêu cầu đầu vào của bức ảnh nhỏ, ví
dụ như 20x20, 30x30, …

3. Tài liệu tham khảo

[1] Source code, https://github.com/chautruonglong/NHOM_14


[2] davidsandberg(2018), Facenet, https://github.com/davidsandberg/facenet
[3] Vũ Hữu Long(2017), Principal Component Analysis,
https://machinelearningcoban.com/2017/06/15/pca/
[4] Vũ Hữu Long(2018), Norm, https://machinelearningcoban.com/math/
[5] Yaniv Taigman, Ming Yang, Marc’Aurelio Ranzato and Lior Wolf, “DeepFace:
Closing the Gap to Human-Level – Yaniv Taigman,
https://www.cs.toronto.edu/~ranzato/publications/taigman_cvpr14.pdf
[6] xinntao(2020), ESRGAN, https://github.com/xinntao/ESRGAN
[7] Xamarin.Forms Documentation, Microsoft,
https://docs.microsoft.com/en-us/xamarin/xamarin-forms/
[8] RESTful API, https://topdev.vn/blog/restful-api-la-gi/
[9] Phạm Đình Khánh, Mô hình Facenet trong face recognition
https://phamdinhkhanh.github.io/2020/03/12/faceNetAlgorithm.html
[10] Phạm Văn Thịnh, Cơ bản về MVVM (Model–View–ViewModel) Pattern
https://viblo.asia/p/co-ban-ve-mvvm-model-view-viewmodel-pattern-
Do754wdWlM6
[11] Florian Schroff - Dmitry Kalenichenko - James Philbin, FaceNet: A Unified
Embedding for Face Recognition and Clustering
https://arxiv.org/pdf/1503.03832.pdf
[12] SVM, https://viblo.asia/p/gioi-thieu-ve-support-vector-machine-svm-
6J3ZgPVElmB
[13] KNN, https://viblo.asia/p/knn-k-nearest-neighbors-1-djeZ14ejKWz
[14] FAISS, https://viblo.asia/p/image-retrieval-voi-thu-vien-faiss-LzD5ddJo5jY

You might also like