You are on page 1of 10

ĐẠI HỌC BÁCH KHOA HÀ NỘI

KHOA CÔNG NGHỆ THÔNG TIN  


──────── * ─────── 
 
 
 
 
 
 
 
 
 
 
Lập trình nhận diện khuôn mặt real-time bằng Javascript  
Báo cáo Project 
 
 
 
 
Nhóm nghiên cứu:  PGS Phạm Văn Hải 
     Thành viên tham gia:  Nguyễn Xuân Hùng 
                               Vũ An Khang 
                                      Hoàng Văn Trọng 
 
 
 
 
 
 
Lập trình nhận diện khuôn mặt real-time bằng Javascript  
TÓM TẮT— Bài báo này trình bày hướng tiếp cận cho việc giải quyết vấn đề tìm giải pháp thay thế
sử dụng thẻ từ để đóng mở cửa ra vào trong khu vực làm việc của các doanh nghiệp, cơ quan Nhà
nước…và hạn chế tình trạng điểm danh hộ đầu giờ bằng phương pháp quẹt thẻ hoặc hạn chế tiếp xúc,
giảm thời gian xếp hàng chờ quẹt thẻ hoặc dùng vân tay. 
Từ khóa —  Nhận diện khuôn mặt, face ID…. 
I. Vấn đề, bài toán 
Hiện nay, tại các cơ quan, doanh nghiệp phát sinh vấn đề bất tiện trong giải pháp sử dụng thẻ từ như:  
 Điểm danh đầu giờ, có thể 1 người nhờ đồng nghiệp mang thẻ của mình điểm danh hộ 
 Dễ gây tắc nghẽn đầu giờ do phải đợi nhau quẹt thẻ 
 Khi có việc cần ra ngoài đột xuất như đón khách hàng, đi lấy đồ… nhưng vội vàng quên
không mang theo thẻ thì không thể mở cửa, phải quay lại lấy hoặc nhờ người gần đó. 
Bài toán đặt ra là tìm giải pháp có thể thay thế quẹt thẻ để điểm danh, tự động đóng mở cửa nhưng
vẫn đảm bảo an ninh và giảm thiểu tắc nghẽn nơi cửa ra vào.  
 
II. Mục tiêu 
Đối với bài toán nêu trên, có các mục tiêu phải đạt được như sau: 
 Đảm bảo an ninh; 
 Chống gian lận; 
 Tránh tắc nghẽn, tụ tập đám đông; 
 Ứng dụng được trong nhiều lĩnh vực… 
III. Dữ liệu đầu vào/ra và kết quả dự kiến 
Dữ liệu đầu vào: Danh sách khuôn mặt của 1 tập thể/doanh nghiệp/cơ quan… 
Dữ liệu đầu ra: true/false trong trường hợp điểm danh hoặc tự động đóng/mở cửa; cảnh báo
trong trường hợp cần an ninh hoặc tìm kiếm người. 
Kết quả dự kiến: 
 Trả về true nếu người đó có trong danh sách; 
 Trả về false nếu người đó không có trong danh sách; 
 Trả về 1 cảnh báo (còi, thông báo…) trong trường hợp cần tìm kiếm người nào đó. 
 
Sơ đồ khối của giải pháp 
 
Hệ thống bao gồm:  
 Các camera thu thập hình ảnh lắp đặt tại các điểm giám sát. 
 Máy tính cài đặt phần mềm phát hiện khuôn mặt. 
 Đối với hệ thống lớn có nhiều điểm giám sát có thể sử dụng mô hình quản lý tập trung.
Dữ liệu được đặt ở máy chủ trung tâm, đảm bảo khả năng lưu trữ dữ liệu lớn, an toàn và
bảo mật. 
Kết quả đầu ra mong muốn:  
Thuật toán 
Input: Tập các phần tử , tập các giao dịch
T. 
Output:Tập các phần tử phổ biến lớn nhất 
List<Item> findMaximal(Node node){ 
//Từ tập giao dịch T(X) chứa X: Loại bỏ những phần tử trong Y không thỏa mãn ngưỡng 
1. for(item i: Y){ 
2. for(Transaction t: T(X)){ 
3. if(t.contain(i) 
4. count_the_support(i)++; 
5. } 
6. if(count_the_support(i) < min support) 
7. Y.remove(i); 
8. } 
9. while (Y vẫn còn phần tử){ 
10. //Nếu Y nằm trong maximal_element thì không cần tạo nút mới 
11. if(maximal_element.contain(Y)) 
12. break; 
13. //chọn phần tử a[i] đầu tử đầu tiên của Y 
14. //Tạo nút mới 
15. Node next_node(X = a[i], Y = Y \ a[i]); 
16. //Đệ quy tạo nút mới 
17. findMaximal(next_node); 
18. //Cập nhật số phần tử trong Y 
19. Y của node = Y của (next_node); 
20. } 
21. return node.maximal_element = node.maximal_element.add(X); 
 
Ở thuật toán trên, các phần tử trong Y được sắp xếp theo định nghĩa 7, nghĩa là nó có dạng:

. Việc sắp xếp này có ý nghĩa rất lớn do  từ định


nghĩa 5.2, mỗi tập phổ biến phải chứa ít nhất một phần tử ,  nên sẽ bắt đầu việc mở rộng từ
những phần tử có dạng , mở rộng liên tục với các phần tử còn lại trong I’. Nếu sắp xếp các phần tử
theo định nghĩa 7 thì, khi kết thúc duyệt các phần tử dạng , thì có thể kết thúc việc tạo
cây, mà không cần quan tâm đến các phần tử còn lại. 

Tại nút gốc: X = null, Y =  


Dòng 2, 3, 4 thực hiện việc tính toán support của các phần tử. Tuy nhiên, nhờ đặc tính 1 mà chúng ta đề
cập ở trên, nếu không là phổ biến thì ta có thể loại bỏ toàn bộ phần tử dạng ra khỏi cơ sở dữ
liệu, giúp làm giảm kích thước của dữ liệu. 
Việc tạo nút (dòng 14) từ nút cha, theo cơ chế, phần tử đầu tiên trong Y của nút cha sẽ là X của nút con,
phần còn lại của Y nút cha sẽ là Y của nút con. Tuy nhiên việc có cần tạo nút hay không dựa vào điều kiện
dòng 11, nghĩa là nếu Y của nút có thể được tạo là tập con của tập maximal_element của nút cha thì nó
không cần tạo, vì hiển nhiên mọi tập con của tập phổ biến đều là phổ biến. Nếu nút được tạo, nó sẽ tự
cập nhật lại Y của mình (dòng 6,7) có nghĩa là loại bỏ những phần tử có độ support trong tập giao dịch
T(X) nhỏ hơn ngưỡng. Thuật toán dừng lại khi không có nút nào được tạo. 
Để cụ thể hóa thuật toán, chúng tôi lấy một minh họa đơn giản cho thuật toán như sau: 
Giả sử ta có một cơ sở 5 giao dịch với 4 phần tử: a, b, c, d. Cho ngưỡng support = 40% (supp = 2), kích
thước cửa sổ trượt bằng 2, khi đó số phần tử tăng từ 4 lên 8. (Hình 1) 

 
Hình 1. Chuyển đổi giao dịch 
Tập các phần tử mở rộng I’ = {a[0], b[0], c[0], d[0], a[1], b[1], c[1], d[1]} 
Việc sinh nút gốc bắt đầu với X = null, Y = I’, T(null) = {0,1,2,3,4,5} 
Khi mỗi nút được sinh ra, chúng tự động cập nhật để loại bỏ phần tử không phải là phổ biến, như hình 2.
Trên tập các giao dịch T(null): supp(a[0]) = 3, supp(b[0]) = 2, supp(c[0]) = 3, supp(d[0]) = 1, supp(a[1]) = 2,
supp(b[1]) = 1, supp(c[1]) = 2, supp(d[1]) = 1 
Với min supp = 2, thì nút gốc tự động cập nhật: X = null, Y = { a[0], b[0], c[0], a[1], c[1]}  (Hình 2) 

 
Hình 2. Cập nhật lại nút 
Với mỗi tạo nút con (dòng 11) được thể hiện như hình 3: 

 
Hình 3. Tạo nút mới 

 
Hình 4. Điều kiện tạo nút mới 
Kết thúc việc tạo cây nếu Y của tất cả các nút đã tạo giống như trên hình 5.  
 
Hình 5. Cây khi tạo xong 
Khi cây được hoàn thành thì maximal_element của nút gốc sẽ là tập phần tử phổ biến lớn nhất. 
IV. KẾT QUẢ DỰ KIẾN 
Để đánh giá độ chính xác của thuật toán, mình cần có con số True Positive và True Negative để dựng nên
Confusion Matrix.  
Kết quả khi mình dùng phần mềm để nhận diện 48 tấm ảnh của 12 đối tượng trong một công ty(Một vài
ảnh không có mặt hoặc link bị lỗi). Có thể thấy model của chúng ta nhận diện đúng được 40/42 tấm. 
Kết quả khi mình chạy với 4 đối tượng không có trong cở sở dữ liệu không có trong cơ sở dữ liệu Model
có performance khi nhận được đúng với tỷ lệ 60%-80% 
Confusion Matrix kết quả của thuật toán: 
 
Có khá nhiều giá trị để đánh giá, chúng ta quan tâm đến các giá trị sau đây: 
 Sensivity [TP / (TP + FN)] – Với 42 ảnh có trong DB thì nhận dạng được 95.23% đúng. 
 Precision [TP / (TP + FP)] – Với 42 kết quả nhận diện có, có 95.23% kết quả là chính xác. 
 Accuracy [(TP + TN) / (TP + FP + TN + FN)] –  Độ chính xác tổng thể là 94.59% 
 
V. VỀ CÁC BƯỚC GIẢI THÍCH THUẬT TOÁN 
Các bước giải thích: 
Input/Output của hệ thống 
Trong thực tế, quá trình nhận diện bao gồm 2 quá trình chính là: 
- Face Detection (Tạm gọi là Phát hiện khuôn mặt) . 
- Face Recognization (Nhận diện khuôn mặt).  
Bước 1: Face Detection (Phát hiện khuôn mặt) 
Face Detection: Đây là quá trình phát hiện khuôn mặt trong các bức ảnh ảnh. Chức năng này hiện có hầu
hết trong các máy ảnh, camera smartphone hiện tại đều có chức năng này…. 
Giới thiệu về thuật toán Viola Jones: 
Chúng ta có các cách nhận diện khuôn mặt chính như: Thông qua màu sắc, cử động hoặc qua góc cạnh
trong ảnh,…. Tuy nhiên, thuật toán được sử dụng phổ biến nhất hiện nay là Viola-Jones. 
Ưu điểm lớn nhất của thuật toán này là nó không chỉ nhận diện được khuôn mặt mà còn có thể nhận
diện được đồ vậy, hình dạng.  
Cơ chế của nó khá đơn giản như sau: 
 Tạo ra một frame hình vuông, lần lượt di chuyển frame này khắp tấm ảnh gốc. 
 Mỗi khi frame di chuyển, check xem khu vực trong frame có phải là khuôn mặt hay đồ vật hay
không. (Bằng cách check các vùng sáng tối trong frame). 
 Sau khi di chuyển hết tấm ảnh, tăng kích cỡ frame lên và scan lại từ đầu. 
 Dừng thuật toán khi frame đủ lớn. 
Tóm lại, dữ liệu đầu vào của quá trình này là một tấm ảnh. Dữ liệu đầu ra là vị trí và kích cỡ của các
khuôn mặt trong ảnh. 
Bước 2: Face Recognition (Nhận diện khuôn mặt) 
Từ kết quả của bước 1 (Face Detection) trước, ta đã có các khuôn mặt trong ảnh. Các khuôn mặt này sẽ
lần lượt được so sánh với các khuôn mặt đã có trong cơ sở dữ liệu để tìm dữ liệu có khuôn mặt có nhiều
tỷ lệ tương đồng nhất. 
Ví dụ:  
Trên ứng dụng Facebook, những hình vuông trắng trắng sau khi up ảnh là kết quả của quá trình Face
Detection.Khi này hệ thống Facebook sẽ so sánh khuôn mặt trong hình vuông đó với khuôn mặt của
những người quen trong danh sách bạn bè của bạn và tìm khuôn mặt giống nhất để gợi ý gắn thẻ tên
cho người đó. 
 

You might also like