Professional Documents
Culture Documents
BÁO CÁO
PBL5 - ĐỒ ÁN KỸ THUẬT MÁY TÍNH
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Ụ
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
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
- Để 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.
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
-Camera xiaomi
Camera -Độ phân giải: 1080P
Hình 3. Camera
- 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
- 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
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.
- 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.
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.
- 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:
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
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ự.
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.
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à:
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:
- Sequence diagram:
Hình 16. Đăng ký sequence
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
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
- 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.
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