You are on page 1of 11

NGHIÊN CỨU XÂY DỰNG HỆ THỐNG ĐĂNG NHẬP TỰ ĐỘNG BẰNG NHẬN

DIỆN KHUÔN MẶT


Bùi Việt Hoàng, Trần Khắc Bình Dương,
Nguyễn Đình Huân, Nguyễn Lương Hùng*
* Khoa Công nghệ thông tin, Đại học Công nghiệp Hà Nội
Email: ngluonghung2611@gmail.com
0904063064

TÓM TẮT

Hệ thống nhận dạng khuôn mặt là một ứng dụng máy tính tự động xác định hoặc nhận dạng
một người nào đó từ một bức hình ảnh kỹ thuật số hoặc một khung hình video từ một nguồn
video. Một trong những cách để thực hiện điều này là so sánh các đặc điểm khuôn mặt chọn
trước từ hình ảnh và một cơ sở dữ liệu về khuôn mặt. Hệ thống này thường được sử dụng
trong các hệ thống an ninh và có thể được so sánh với các dạng sinh trắc học khác như các
hệ thống nhận dạng vân tay hay tròng mắt. Khi đối tượng lọt vào tầm quét của camera, hệ
thống sẽ tự động xác định chính xác vị trí khuôn mặt và thực hiện các thuật toán để trích xuất
các dữ liệu trên khuôn mặt. Trong quá trình di chuyển, đối tượng sẽ giúp hệ thống dễ dàng
xác nhận khuôn mặt hơn. Tất cả các quá trình trên diễn ra trong vòng chưa đầy 2 giây. Sau
khi thu thập được ảnh đầu vào thì hình ảnh sẽ được đưa vào thuật toán Local Binary Pattern
để trích xuất đặc trưng và thu được các vecto feature. Công nghệ nhân diện khuôn mặt là
công nghệ sinh trắc học ít tác động đến người dùng nhất và là công nghệ sinh trắc học nhanh
nhất.

Từ khóa: Machine Learning, Deep Learning, Face-rcognition, Feature extraction, Object


detection, Face detection, Local Binary Pattern.

ABSTRACT

Facial recognition is an automatic computer application that identifies someone from a


digital image or a video frame from a video source. One of the ways to do this is to compare
the face features of the selected face and a face database. this system is used in security
systems and can be compared to other types of biometrics such as fingerprint recognition or
mắt. When the object gets into the scan of the camera, the system automatically determines
the face position and performs the algorithms to extract the data on the face. in the course of
movement, the object makes it easier to confirm the face. All the processes on the stage are
less than two seconds. Once the image is collected, the image will be included in the local
binary pattern algorithm to extract the characteristic and obtain the vecto features. Facial
recognition technology is a low - impact biometrics technology that affects the most users and
is the fastest biometric technology. 

Keyword: Machine Learning, Deep Learning, Face-rcognition, Feature extraction, Object


detection, Face detection, Local Binary Pattern

1. GIỚI THIỆU

1
Khuôn mặt là một trong những sinh trắc học quan trọng nhất vì các tính năng độc
đáo của nó đóng một vai trò quan trọng trong việc cung cấp danh tính và cảm xúc của
con người. Các tình huống thay đổi gây ra các tâm trạng khác nhau, dẫn đến thể hiện
các cảm xúc khác nhau và cuối cùng là thay đổi biểu hiện trên khuôn mặt. Các biểu
hiện khác nhau của cùng một cá nhân là một yếu tố quan trọng khác cần được tính
đến. Biểu hiện của con người là những biểu hiện đặc biệt vĩ mô, đó là hạnh phúc, buồn
bã, tức giận, ghê tởm, sợ hãi, ngạc nhiên. Biểu cảm vi mô là biểu hiện cho thấy các
kiểu khuôn mặt nhanh chóng và xảy ra một cách không chủ ý.Các biểu hiện vĩ mô và
vi mô tìm thấy vị trí của chúng trên khuôn mặt của một người nào đó do những thay
đổi trong trạng thái cảm xúc của một người và khi có những cảm xúc như vậy - vốn có
rất nhiều - việc nhận dạng hiệu quả trở nên khó khăn. Trong khi xác định và tìm kiếm
những người mất tích và tội phạm được cho là những lợi ích quan trọng nhất của nhận
dạng khuôn mặt, chúng còn vượt ra ngoài sự an toàn cho sự tiện lợi. Thay vì mua hàng
bằng tiền mặt hoặc tín dụng tại các cửa hàng, công nghệ nhận dạng khuôn mặt có thể
nhận dạng khuôn mặt của bạn và tính phí hàng hóa vào tài khoản của bạn. Việc sử
dụng công nghệ này tăng lên trong thời kỳ đại dịch để phục vụ cả mục đích tiện lợi và
an ninh, cũng như giúp quản lý tỷ lệ nhân viên so với khách hàng nhỏ hơn, nhưng các
nhà bán lẻ cũng nhận thấy công nghệ được sử dụng trong tương lai để nhận biết và
quảng cáo cho các thành viên câu lạc bộ khách hàng thân thiết và nhân viên đồng hồ
trong và ngoài. Nhận dạng khuôn mặt cũng giúp cải thiện độ an toàn và bảo mật trong
các không gian không bán lẻ, như sân bay và ngân hàng. Đây là một phần thường
xuyên của việc kiểm tra an ninh sân bay trong nhiều năm. Tương tự như xác định tội
phạm xâm nhập vào cửa hàng, phần mềm đã giúp xác định tội phạm và các mối đe dọa
tiềm ẩn đối với các hãng hàng không và hành khách. Cơ quan Hải quan và Bảo vệ
Biên giới Hoa Kỳ (CBP) đã hứa sẽ sử dụng tính năng nhận dạng khuôn mặt trên 97%
hành khách quốc tế vào năm 2023. Một lợi ích khác là nó chạy kiểm tra biên giới
nhanh hơn và chính xác hơn nhiều so với mọi người có thể.Các tổ chức như ngân hàng
sử dụng phần mềm theo cách tương tự để ngăn chặn gian lận, xác định những người
trước đây đã bị buộc tội và cảnh báo cho ngân hàng để họ biết phải chú ý hơn đến hoạt
động kinh doanh của người đó tại ngân hàng. Nhận dạng khuôn mặt cũng giúp cải
thiện độ an toàn và bảo mật trong các không gian không bán lẻ, như sân bay và ngân
hàng. 
Trong bài báo này, sau khi thực hiện demo các chương trình bằng mobileNetV2,
một kiến trúc mạng nhẹ và nhanh, có thể chạy trên các thiết bị di động, để làm tiền đề
giải quyết các bài toán về nhận diện trong hệ thống, nhưng cũng mất thời gian thực
hiện cũng như quá trình dự đoán mất khá nhiều thời gian. Vì vậy, chúng tôi đã chuyển
hướng tìm hiểu sang 1 hướng mới mới mẻ hơn, tiết kiệm thời gian cũng như cách vận

2
hành bài toán. Sử dụng thuật toán Local Binary Pattern để sau khi trích suất được đặc
trưng của các bức hình thu được được các vecto đặc trưng, rồi đưa vào không gian
ebedding để biểu diễn các vecto đặc trưng. Ở đó có các cụm vecto đặc trưng của từng
các hình ảnh sau khi được trích xuất. Sử dụng thuật toán KNN [1] để phân cụm các
vecto đặc trưng với tiên đề Euclid.

2. CÁC NGHIÊN CỨU LIÊN QUAN


Nhận dạng khuôn mặt vẫn là một lĩnh vực nghiên cứu tích cực trong thị giác máy
tính. Có lẽ một trong những phương pháp học máy được biết đến và áp dụng rộng rãi
hơn để nhận dạng khuôn mặt đã được mô tả trong bài báo năm 1991 có tiêu đề Face
Recognition Using Eigenfaces. Phương pháp của họ, được gọi đơn giản là Eigenfaces,
là một cột mốc quan trọng khi nó đạt được kết quả ấn tượng và chứng minh khả năng
của các phương pháp tiếp cận tổng thể đơn giản. Hình ảnh khuôn mặt được chiếu lên
một không gian đặc trưng (“không gian khuôn mặt”) để mã hóa tốt nhất sự biến đổi
giữa các hình ảnh khuôn mặt đã biết. Không gian mặt được xác định bởi các
“eigenfaces”, là các ký tự riêng của tập hợp các mặt; chúng không nhất thiết phải
tương ứng với các đặc điểm riêng biệt như mắt, tai và mũi.
Bài báo năm 2018 có tiêu đề Deep Face Recognition: Survey, cung cấp một bản
tóm tắt hữu ích về tình hình nghiên cứu nhận dạng khuôn mặt trong gần 30 năm qua,
nêu bật xu hướng rộng rãi từ các phương pháp học tập toàn diện (chẳng hạn như
Eigenfaces), đến phát hiện tính năng thủ công cục bộ, để phương pháp học tập nông,
cuối cùng là phương pháp học tập sâu hiện đang là phương pháp tiên tiến nhất.
Với tính năng vượt trội của học sâu đã mang đến thành tựu to lớn trong trí tuệ
nhân tạo. Nổi bật ở đây khi cải thiện độ chính xác của bài toán từ [60-90]% đến
99.80%, 1con số có độ chính xác cao chỉ trong thời gian ngắn.
Với sự đột phá của AlexNet vào năm 2012 cho vấn đề phân loại hình ảnh đơn giản
hơn, đã có một loạt các nghiên cứu và xuất bản trong năm 2014 và 2015 về các
phương pháp học sâu để nhận dạng khuôn mặt. Khả năng nhanh chóng đạt được hiệu
suất gần cấp con người, sau đó vượt quá hiệu suất cấp con người trên bộ dữ liệu nhận
dạng khuôn mặt tiêu chuẩn trong khoảng thời gian ba năm, đây là một tỷ lệ cải thiện
đáng kinh ngạc trong nhiều thập kỷ trước đó. Có lẽ có bốn hệ thống quan trọng về học
sâu để nhận dạng khuôn mặt đã thúc đẩy những đổi mới này; chúng là: DeepFace, loạt
hệ thống DeepID, VGGFace và FaceNet.
DeepFace là một hệ thống dựa trên mạng nơ-ron phức hợp sâu được mô tả bởi
Yaniv Taigman, et al. từ Facebook AI Research và Tel Aviv. Nó đã được mô tả trong
bài báo năm 2014 có tiêu đề DeepFace: Thu hẹp khoảng cách để đạt được hiệu suất ở
cấp độ con người trong xác minh khuôn mặt. Đây có lẽ là bước tiến lớn đầu tiên sử
3
dụng học sâu để nhận dạng khuôn mặt, đạt được hiệu suất gần như cấp độ con người
trên tập dữ liệu điểm chuẩn tiêu chuẩn (standard benchmark dataset).
Các tính năng nhận dạng sâu, hoặc ẩn sâu, là một loạt các hệ thống (ví dụ:
DeepID, DeepID2, v.v.), được mô tả lần đầu tiên bởi Yi Sun, et al. trong bài báo năm
2014 của họ có tiêu đề Học tập sâu về khuôn mặt đại diện từ việc dự đoán 10.000 lớp
học. Hệ thống của họ lần đầu tiên được mô tả giống như DeepFace, mặc dù đã được
mở rộng trong các ấn phẩm tiếp theo để hỗ trợ cả các nhiệm vụ nhận dạng và xác minh
bằng cách đào tạo thông qua mất mát tương phản.
Các hệ thống sâu là một trong những mô hình học sâu đầu tiên để đạt được hiệu
suất tốt hơn con người trong nhiệm vụ, ví dụ: DeepID2 đạt được 99,15% trên tập dữ
liệu được gắn nhãn Khuôn mặt trong hoang dã (LFW), đây là hiệu suất tốt hơn con
người là 97,53%. Các hệ thống tiếp theo như FaceNet và VGGFace được cải thiện dựa
trên những kết quả này. FaceNet được mô tả bởi Florian Schroff, et al. tại Google
trong bài báo năm 2015 của họ có tiêu đề FaceNet: Nhúng hợp nhất để phân nhóm và
nhận dạng khuôn mặt. Hệ thống của họ đã đạt được kết quả tiên tiến nhất sau đó và
trình bày một cải tiến được gọi là mất bộ ba(trple loss) cho phép hình ảnh được mã hóa
hiệu quả dưới dạng vectơ đặc trưng cho phép tính toán và so sánh độ tương đồng
nhanh chóng thông qua tính toán khoảng cách. FaceNet, trực tiếp học cách ánh xạ từ
hình ảnh khuôn mặt đến không gian Euclid nhỏ gọn, nơi khoảng cách trực tiếp tương
ứng với số đo độ giống nhau của khuôn mặt.
VGGFace (thiếu một cái tên hay hơn) được phát triển bởi Omkar Parkhi, et al. từ
Nhóm Hình học Trực quan (VGG) tại Oxford và đã được mô tả trong bài báo năm
2015 của họ có tiêu đề Nhận diện khuôn mặt sâu sắc. Ngoài một mô hình được điều
chỉnh tốt hơn, trọng tâm công việc của họ là làm thế nào để thu thập một tập dữ liệu
đào tạo rất lớn và sử dụng nó để đào tạo một mô hình CNN rất sâu về nhận dạng
khuôn mặt cho phép họ đạt được kết quả trên bộ dữ liệu chuẩn.
3. PHƯƠNG PHÁP

3.1. Nhận diện khuôn mặt và trích xuất đặc trưng của khuôn mặt
Bài toán nhận diện khuôn mặt là tiền đề cho các bài toán tiếp theo bởi các thuật
toán phân loại nhị phân hay KNN [1], thì yêu cầu đầu vào là các vecto đặc trưng của
khuôn mặt.
Chúng tôi sử dụng mô hình RetinaFace để thu được khuôn mặt của người dùng.
RetinaFace là một máy dò khuôn mặt tiên tiến dựa trên học sâu cho Python đi kèm với
các mốc trên khuôn mặt. Hiệu suất phát hiện của nó là tuyệt vời ngay cả trong đám
đông như được hiển thị trong minh họa sau đây. RetinaFace là mô-đun phát hiện

4
khuôn mặt của dự án insightface. Việc triển khai ban đầu chủ yếu dựa trên mxnet. Sau
đó, việc tái triển khai dựa trên tensorflow của nó được xuất bản bởi Stanislas Bertrand.
Vì vậy, repo này được lấy cảm hứng rất nhiều từ nghiên cứu của Stanislas Bertrand.
Mã nguồn của nó được đơn giản hóa và nó được chuyển đổi thành tương thích pip
nhưng cấu trúc chính của mô hình tham chiếu và trọng lượng được đào tạo trước của
nó là như nhau.

Hình 1. Hình ảnh RetinaFace được sử dụng cho dận diện khuôn mặt

3.2. Trích xuất đặc trưng khuôn mặt và đưa vào không gian embedding
Sau khi nhận thấy phương pháp mình làm chưa được tối ưu. Chưa tối ưu ở chỗ với
bộ dataset ít, chưa đa dạng mà đưa vào 1 model lớn khiến cho việc dự đóan chắc chắn
không mang lại được kết quả cao. Vì vậy nhóm chúng em đã tìm hiểu phương pháp
mới. Sử dụng thư viện và thuật toán có sẵn đó là: Mô hình nhị phân địa phương của
openCV.

Hình 2. Mô hình nhị phân địa phương của openCV


Cùng nhìn nhận sơ qua về việc thực hiện nhận dạng khuôn mặt thông qua thuật
toán Mô hình nhị phân địa phương.
Với một khuôn mặt trong bộ dữ liệu, bước đầu tiên của thuật toán là chia khuôn
mặt thành 7×7 ô có kích thước bằng nhau:

5
Hình 3. Khi một khuôn mặt đã được phát hiện trong một hình ảnh, bước đầu tiên là
chia ROI khuôn mặt thành 7×7 tế bào có kích thước bằng nhau.
Sau đó, với mỗi box này, chúng ta cùng tính toán biểu đồ mô hình nhị phân địa
phương
Theo định nghĩa, một biểu đồ mô hình sẽ vứt bỏ tất cả thông tin không liên qua
đến cách các mẫu học được định hướng bên cạnh nhai. Tuy nhiên bằng cách tính toán
mổ biểu đồ cho mỗi ô, chúng ta thực sự có thể mã hóa 1 mức độ thông tin không gian
hư mắt, mũi, miệng… mà nếu không chúng ta sẽ không có.
Mã hóa không gian này cũng cho phép chúng ta cân đo các biểu đồ mô phỏng kết
quả từ mỗi tế bào khác nhau,mang lại nhiều sức mạnh phân biệt đối xử hơn cho các
đặc điểm phân biệt hơn của khuôn mặt:

Hình 4 - 5. Hình ảnh khuôn mặt ban đầu (trái) tiếp theo là sơ đồ trọng số cho các tế
bào 7×7 (phải).
Ở đây, chúng ta có thể thấy hình ảnh khuôn mặt ban đầu được chia
thành 7×7 ô(trái). Sau đó, ở bên phải, chúng ta có thể thấy sơ đồ trọng số cho mỗi ô:
Biểu đồ LBP cho các tế bào trắng (như mắt) nặng gấp 4 lần so với các tế bào
khác. Điều này chỉ đơn giản có nghĩa là chúng ta lấy biểu đồ LBP từ các vùng tế bào
trắng và nhân chúng với 4 (có tính đến bất kỳ quy mô / chuẩn hóa nào của biểu đồ mô
hình).
Các tế bào màu xám nhạt (miệng và tai) đóng góp nhiều hơn 2 lần.

6
Các tế bào màu xám sẫm (má trong và trán) chỉ đóng góp 1x.
Các tế bào đen, chẳng hạn như mũi và má ngoài, hoàn toàn bị bỏ qua và nặng 0x.
Những giá trị trọng số này đã được Ahonen và cộng sự tìm thấy bằng cách chạy
các thuật toán điều chỉnh hyperparameter trên đầu trang của việc phân tách dữ liệu đào
tạo, xác nhận và thử nghiệm của họ.
Cuối cùng, các biểu đồ LBP 7×7 có trọng số được kết hợp với nhau để tạo thành
vector tính năng cuối cùng.
Thực hiện nhận dạng   khuôn mặt được thực hiện bằng cách sử dụng khoảng
cách và bộ phân loại hàng xóm gần nhất:
Một khuôn mặt được trình bày cho hệ thống:
LBP được trích xuất, cân nhắc và kết hợp theo cách tương tự như dữ liệu đào tạo.
k-NN (với k = 1)được thực hiện với   khoảng cách để tìm khuôn mặt gần nhất
trong dữ liệu đào tạo.
Tên của người liên quan đến khuôn   mặt có khoảng cách nhỏ nhất được chọn
làm phân loại cuối cùng
Như bạn có thể thấy, các LBP cho thuật toán nhận dạng khuôn mặt khá đơn giản!
Trích xuất các mẫu nhị phân địa phương không phải là một nhiệm vụ khó khăn - và
mở rộng phương pháp chiết xuất để tính toán biểu đồ mô hình cho 7×7 = 49 ô là đủ
đơn giản.
Trước khi chúng tôi đóng phần này, điều quan trọng cần lưu ý là các LBP cho
thuật toán nhận dạng khuôn mặt có thêm lợi ích là nâng cao khi các khuôn mặt mới
được giới thiệu vào bộ dữ liệu.
Các thuật toán phổ biến khác, chẳng hạn như Eigenfaces, yêu cầu tất cả các khuôn
mặt phải được xác định phải có mặt tại thời điểm đào tạo. Điều này ngụ ý rằng nếu
một khuôn mặt mới được thêm vào bộ dữ liệu, toàn bộ bộ phân loại Eigenfaces phải
được đào tạo lại có thể khá chuyên sâu về tính toán.
Thay vào đó, các LBP cho thuật toán nhận dạng khuôn mặt chỉ đơn giản là có thể
chèn các mẫu khuôn mặt mới mà không cần phải được đào tạo lại - một lợi ích rõ ràng
khi làm việc với các bộ dữ liệu khuôn mặt nơi mọi người đang được thêm hoặc loại bỏ
khỏi bộ dữ liệu với tần suất thông thường.

4. THỰC NGHIỆM

4.1. Thu thập ảnh đầu vào

7
Mỗi người dùng sẽ cần sử dụng hệ thống thu thập khuôn mặt, sau khi đưa vào
camera qua các góc nhìn khác nhau, hệ thống tự động thu thập 5 hình ảnh là các khuôn
mặt của người dùng (chính diện, bên trái, bên phải, nhìn lên, nhìn xuống) để có được
các đặc trưng khác nhau và các hình ảnh này được chuyển vào database của hệ thống.

Hình 6. Hệ thống thu thập 5 hình ảnh khuôn mặt của người dùng qua camera

4.2. Trích xuất đặc trưng và đưa vào không gian embedding
Sau khi thu thập được các dự liệu mới, hệ thống tự động cập nhật các hình ảnh
mới vào trong không gian embedding với tưng ứng các vecto đặc trưng. Dễ dàng nhận
thấy được các hình ảnh của cùng một người sẽ nằm gần nhau và tạo thành 1 cụm. Từ
đó ta có thể tưởng tượng được không gian embedding lúc này là biểu diễn của các cụm
tương ứng với các user.

Hình 7. Không gian embedding và biểu diễn các cụm đặc trưng của hình ảnh

4.3. Dự đoán người dùng


Sau khi thu được các cụm tương ứng trong không gian embedding ta tiến hành dự
toán người dùng như sau:
Người dùng sau khi đưa khuôn mặt qua camera, hệ thống sẽ tiếp nhận khuôn mặt
để tiến hành dự đoán. Sau khi thu được một hình ảnh của người dùng thì hệ thống sẽ
đẩy vào vùng tiền xử lý, ở vùng này hình ảnh sẽ được giảm nhiễu cũng như tinh chỉnh
kích thước hợp lý cho bài toán. Sau khi qua bước tiền xử lý thì đến phần trích xuất đặc
trưng của khuôn mặt và thu được vecto đặc trưng. Sau khi thu được vecto được trưng
hệ thống sẽ tiến hành đưa vecto đặc trưng của người dùng này vào trong không gian

8
embedding. Sử dụng thuật toán KNN [1] với tiên đề Euclid để tính toán khoảng cách
giữa vecto đặc trưng của người dùng này với các cụm có trong không gian embedding.
Dựa vào tham số cụ thể sẽ đánh giá xem vecto đặc trưng của người dùng này sẽ nằm ở
cụm nào và từ đó nhận ra được người này là ai và tên là gì, có trong danh sách người
dùng của hệ thống hay không.

Hình 8. Tính khoảng cách của điểmt tới các cụm dựa trên tiên đề Euclidean

4.4. Triển khai hệ thống


Xây dựng với web của hệ thống với phương thức là gọi API. Mã nguồn AI sẽ
được viết theo Python Flask API để cho web gọi API thưc hiện nhiệm vụ của hệ thống.
Hình ảnh được đưa vào sẽ dự đoán xem người này có trong database của hệ thống
hay không, nếu có thì họ là ai và có được phép đăng nhập vào trang web hay không,
hoặc sẽ phân quyền cho người dùng ngay tại thời điểm đó, để biết người dùng là
admin hay là khách.

Hình 9 - 10. Hình ảnh khuôn mặt người dùng bị che, hệ thống không nhận dạng được
nên login vào trang web thất bại.

9
Hình 11 - 12. Hình ảnh khuôn mặt người dùng hệ thống nhận dạng được nên login
vào trang web thành công

5. KẾT LUẬN
Báo cáo đã đưa ra 3 phương pháp kết hợp lại để xây dựng lên bài toán đăng nhập
tự động bằng nhận dạng khuôn mặt áp dụng trí tuệ nhân tạo và học sâu cùng với các
thuật toán của trí tuệ nhân tạo. Đây sẽ là cơ sở để nghiên cứu cũng như phát triển tới
các sản phẩm thực tiễn hơn trong tương lai với những cải tiến về độ chính xác cũng
như tốc độ của bài toán.

TÀI LIỆU THAM KHẢO

[1]. KNN: https://arxiv.org/pdf/2004.04523.pdf.


[2]. Local Binary Pattern:
https://www.researchgate.net/publication/259166826_Research_and_Perspective
_on_Local_Binary_Pattern.
[3]. RetianaFace: https://arxiv.org/pdf/1905.00641.pdf.
[4]. DeepFaceRecognition: https://arxiv.org/pdf/1804.06655.pdf.
[5]. VGGFace: https://arxiv.org/pdf/1710.08092.pdf.
[6]. FaceNet: A Unified Embedding for Face Recognition and Clustering:
[1503.03832] FaceNet: A Unified Embedding for Face Recognition and
Clustering (arxiv.org).
[7]. API for Deep Learning: [2002.04688] fastai: A Layered API for Deep Learning
(arxiv.org)
[8]. Euclidean distance: [1502.07541] Euclidean Distance Matrices: Essential Theory,
Algorithms and Applications (arxiv.org)

10
AUTHORS INFORMATION

Bùi Việt Hoàng, Trần Khắc Bình Dương, Nguyễn Đình Huân, Nguyễn Lương Hùng
Faculty of Information Technology, Hanoi University of Industry

11

You might also like