3.3.1. Bài toán nhận diện khuôn mặt
Trong thực tế, quá trình nhận diện bao gồm 2 quá trình chính là Face Detection (Phát hiện khuôn mặt) và Face Recognization (Nhận diện khuôn mặt). Mỗi quá trình lại sử dụng những thuật toán khác nhau.
34 Face Detection: Đây là quá trình phát hiện khuôn mặt trong ảnh. Các máy ảnh, camera smartphone hiện tại đều có chức năng này.
Có khá nhiều cách để phát hiện khuôn mặt: 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 (Thư viện OpenCV hỗ trợ nhận diện khuôn mặt theo thuật toán này).
Thuật toán này khá tốt ở chỗ nó không chỉ nhận diện được khuôn mặt mà còn có thể nhận diện được đồ vật, hình dạng. Cơ chế của nó khá đơn giản:
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.
Bài toán Face Detection thực ra không phải đơn giản vì hệ thống phải được tranning từ vài ngàn đến vài chục ngàn tấm ảnh mới có được ouput nhận dạng tương đối chuẩn.
Mục đích của quá trình này là sau khi chúng ta input 1 bức ảnh, đầu ra sẽ cho ta khuôn mặt đã được detect.
Face Recognition: Đây mới là quá trình nhận diện khuôn mặt. Từ kết quả của bài toán 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 khuôn mặt giống nhất.
Có vô số thuật toán nhận diện khuôn mặt, chúng được phát triển dựa trên các thuật toán cơ sở như: PDA, LCA, MDA, Kernel Method… Gần đây nhất Facebook vừa giới thiệu thuật toán DeepFace với độ chính xác khá… cao, vượt trội hơn hẳn các thuật toán trước đó.
Bước này, chúng ta sẽ tốn khá nhiều thời gian để trainning để đạt được độ chính xác có thể chấp nhận được.
Phương pháp nhận dạng mặt có thể chia tiếp cận theo tiêu chí sau:
Nhận dạng với dữ liệu đầu vào là ảnh tĩnh 2D(still image based FR) là phổ biến nhất
Tương lai có thể phương pháp nhận dạng 3D FR sẽ phổ biến hơn(vì việc bố trí nhiều camera 2D sẽ cho dữ liệu 3D và đem lại kết quả tốt hơn, đáng tin cậy hơn).
Nguyên lý nhận dạng của bài toán:
Với bài toán nhận diện khuôn mặt, yêu cầu bài toán là với in put đầu vào đầu ra ta có thể nhận diện được khuôn mặt với định danh cụ thể. Bài toán có thể chia nhỏ như sau:
Bước đầu tiên cần thực hiện là face detection, tức là phát hiện phần ảnh mặt trong dữ liệu input (CSDL ảnh, video …) và cắt lấy phần ảnh mặt để thực hiện nhận dạng (face cropping).
Bước thứ hai là tiền xử lý ảnh (preprocessing) bao gồm các bước căn chỉnh ảnh (face image alignment) và chuẩn hóa ánh sáng (illumination normalization)(frontal view face image).
Tiếp đến là bước trích chọn đặc điểm (feature extraction), ở bước này một phương pháp trích chọn đặc điểm nào đó (mẫu nhị phân cục bộ – Local Binary Pattern – LBP, Gabor wavelets, …) sẽ được sử dụng với ảnh mặt để trích xuất các thông tin đặc trưng cho ảnh, kết quả là mỗi ảnh sẽ được biểu diễn dưới dạng một vector đặc điểm (feature vector).
Bước tiếp theo là bước nhận dạng (recognition) hay phân lớp (classification), tức là xác định danh tính (identity) hay nhãn (label) của ảnh – đó là ảnh của ai.
36
Hình 3.9: Bài toán nhận diện khuôn mặt
3.3.2. So sánh một số phương pháp nhận diện khuôn mặt phổ biến hiện nay
Có rất nhiều phương pháp phát hiện và nhận dạng khuôn mặt đã được phát triển để làm phù hợp với yêu cầu bài toán thực tế. Tác giả sẽ đề cập đến hai phương pháp hay dùng hiện nay đó là nhận diện bằng phương pháp Haar-Adaboost [8] và phương pháp MTCNN-FaceNet [9].
Tiêu chí Adaboost FaceNet
Độ chính xác 80.8% [9] 86.2% [10]
Dataset IRIS LWF
Face detect Haar-like MTCNN
Face Detect & Segmentation
Alight and
Cropping Grayscale Eigenface
Principal Component
Analysis
Pre-
processing Feature Extraction Classifier Algorithm Decision
Face Database
Hình 3.10: So Sánh một số đặc điểm hai phương pháp
Mặt khác, băng cách thử nghiệm thực tế hai phương pháp trên với cùng bộ sample dataset, ta cũng thu được kết quả là khác nhau.
Sử dụng data pre-train của hai phương pháp, tôi sẽ đưa dữ liệu mẫu về học sinh của một lớp để trainning nhận dạng đánh giá kết quả. Dữ liệu trainning mẫu gồm 10 học sinh với khuôn mặt chụp rõ nét, với mỗi học sinh sẽ đưa 20 ảnh mẫu để tiến hành quá trình trainning. Mỗi học sinh sau khi trainning ảnh đầu vào sẽ được lưu vào thư mục ảnh đã cắt mặt và xử lý.
Hình 3.11: Ảnh sample trainning
Kết quả nhận được của hai phương pháp
Hướng thẳng trực diện Hướng nghiêng
Haar - Adaboost 70% 69%
MTCNN - FaceNet 85.3% 83.1%
Hình 3.12: Kết quả thực nghiệm
38 khuôn mặt MTCNN-FaceNet áp dụng vào hệ thống điểm danh này.
3.3.3. Xây dựng phần mềm hệ thống
Giao diện tổng quát phần mềm
Hình 3.13: Giao diện hệ thống
Quá trình nhận dạng xong ta tiến hành vào 1 số chức năng xử lý dữ liệu. Đầu tiên là chức năng ghi lại thời gian đến, thời gian về của từng sinh viên khi đã nhận dạng thành công. Sau khi ghi nhận thời gian đến của từng sinh viên, hệ thống sẽ tự động lưu thời gian đến lấy cơ sở đánh giá đi muộn về sớm sau này. Những sinh viên đi muộn thường xuyên cũng bị đánh giá kém.
Để có thể quan sát quá trình đi học của sinh viên thì việc quan sát qua đồ thị là trực quan nhất. Ta có thể nhìn và biết được số ngày đi học của sinh viên đó, so sánh với các bạn còn lại để có được mức đánh giá tốt nhất.
ON/OFF Cam Sinh Viên Hiển thị mặt Kết nối RS232
Record thời gian
Display Cam
Lớp 1 Danh tính Nhận dạng Lớp 1 Lớp 29 Lớp 1 Lớp 1 Lớp 2 Lớp 3 Lớp 12 Lớp 11 Lớp 13 Lớp 29 Lớp 28 Lớp 29 Lớp 30
CHƯƠNG 4: KẾT QUẢ, ĐÁNH GIÁ BÀI TOÁN 4.1. Thử nghiệm độ chính xác thuật toán
Hình 5-20 Nhận dạng Mẫu thử nghiệm chưa được quan sát thuộc về Người1 là đúng
Như đã trình bày ở trên, bài toán nhận dạng được chia thành hai quá trình chính đó là phát hiện khuôn mặt trong khung hình và nhận dạng được danh tính của khuôn mặt. Chính vì vậy kết quả bài toán cũng được đánh giá dựa trên hai tiêu chí khả năng phát hiện khuôn mặt trên khung hình realtime và độ chính xác phát hiện là bao nhiêu phần trămĐộ chính xác nhận dạng được tính theo công thức:
Cơ sở dữ liệu: Với thuật toán MTCNN, cơ sở dữ liệu ảnh pre-train được lấy từ tập dữ liệu Labeled Face in Wild (LFW) bao gồm hơn 13000 bức ảnh chứa khuôn mặt
Số ảnh nhận dạng đúng x 100% Độ chính xác = Tổng số ảnh testing Các khuôn mặt trong tập trainning
40 người. Đối với mỗi đối tượng, hình ảnh được chụp tại các địa điểm khác nhau với ánh sáng cũng khác nhau. Góc độ và biểu cảm khuôn mặt của từng người là không giống nhau để tập trainning đa dạng. Tiếp theo là tập ảnh trainning cho đối tương sinh viên cần nhận dạng. Ở đây mỗi sinh viên tôi sẽ đưa 5 đến 20 ảnh với góc độ và biểu cảm khác nhau vào huấn luyện với bộ pre-train đã có từ trước đó.
Hình 4.1: Labeled Face in Wild (LFW) Dataset
Sau khi đã có dữ liệu pre-train, tôi sẽ đưa dữ liệu mẫu về học sinh của một lớp để trainning nhận dạng đánh giá kết quả. Dữ liệu trainning mẫu gồm 10 học sinh với khuôn mặt chụp rõ nét, với mỗi học sinh sẽ đưa 20 ảnh mẫu để tiến hành quá trình trainning. Mỗi học sinh sau khi trainning ảnh đầu vào sẽ được lưu vào thư mục ảnh đã cắt mặt và xử lý. Sau đó quá trình nhận dạng sẽ được tiến hành và phân biệt qua tên sinh viên.
Hình 4.2: Ảnh sample trainning
Kết quả:
So sánh kết quả nhận dạng về độ chính xác của phương pháp khi đưa 20 ảnh vào trainning tạo ra model nhận dạng.
Hướng thẳng trực diện Hướng nghiêng
MTCNN - FaceNet 85.3% 83.1%
Hình 8: Kết quả nhận diện MTCNN-FaceNet
Hình 4.3: Kết quả nhận dạng
Dưới đây là biểu đồ so sánh về tính thay đổi độ chính xác khi số lượng ảnh trainning đầu vào thay đổi của phương pháp:
Hình 4.4: So sánh độ chính xác với số mẫu khác nhau
42 học, tôi sẽ đưa một số dữ liệu liên quan đến sinh viên vào trainning, sau đó nhập điểm chuyên cần và để hệ thống sẽ tính điểm chuyên cần tự động. Các dữ liệu cần nhập bằng tay là điểm lên bảng làm bài và điểm cuối kỳ.
Số lượng sinh viên đưa dữ liệu vào: 10 sinh viên
Các thông số liên quan khác gồm điểm cuối kỳ và điểm giữa kỳ được nhập như bảng.
Sau khi nhận dạng 24 lần và qua quá trình tính toán, đánh giá điểm quá trình ta được kết quả điểm kết thúc học phần cuối cùng như bảng bên dưới.
Họ Tên Sinh viên Điểm cuối kỳ Sinh viên Điểm thi giữa kì Số ngày đi học (Nhận dạng) Số ngày bỏ tiết Điểm tổng kết môn học Kết quả nhận dạng đúng Nam 8.0 6.5 19/24 1 7.25 100% Duy 6.6 7.0 20/24 0 6.42 Trang 7.5 4.0 22/24 0 6.15 Tuấn 8.0 7.5 24/24 2 7.55 Huyền 7.0 8.5 20/24 0 7.75 Hải 9.5 8.0 22/24 1 8.75 Thanh 8.5 5.5 24/24 1 7.6 Trọng 7.5 6.0 19/24 0 6.75 Mạnh 6.5 9.0 24/24 2 6.95 Đức 6.0 10.0 23/24 1 6.9
Hình 4.5: Đầu vào và kết quả đánh giá
Hình 4.6: Đồ thị điểm danh theo tháng
KẾT LUẬN
Hoàn thành tốt nghiệp chuyên ngành thạc sĩ cơ điện tử em đã đúc rút được rất nhiều kinh nghiệm.
Kiến thức về Deep learning ứng dụng vào ứng dụng cụ thể.
Cách kết hợp giữa phần cứng và phần mềm để xây dựng một hệ thống hoàn thiện ứng dụng thực tế.
Phương pháp phân tích và xử lý vấn đề triệt để.
Tuy nhiên, do trình độ và điều kiện đo kiểm thực tế còn hạn chế nên trong quá trình thực hiện luận văn này em không thể tránh khỏi những sai sót. Em mong được sự hướng dẫn, chỉ bảo của các thầy cô, sự góp ý quý báu của hội đồng để giúp em có thể củng cố và hoàn thiện những kiến thức của mình. Em xin bày tỏ lòng biết ơn sâu sắc tới TS. Đặng Thái Việt đã tận tình hướng dẫn, giúp đỡ chúng em trong suốt quá trình làm đồ án này. Đồng thời cảm ơn các thầy, các cô trong bộ môn Cơ Điện Tử trường Đại Học Bách Khoa Hà
44 Nội đã hỗ trợ giúp em hoàn thành luận văn này.
PHỤ LỤC
TÀI LIỆU THAM KHẢO
[1] “Finger based attendance management system”, L.S.Ezema.
[2]“Fingerprint-Based Attendance Management System”, Akinduyite C.O, Adetunmbi A.O, Olabode O.O, Ibidunmoye
[3] “An RFID attendance and monitoring system for university applications”, A.Kassem
[4]PGS.TS.Nguyễn Bốn, Nhiệt Kỹ Thuật, nhà xuất bản Hà Nội,2003. [5]“Fingerprint Identification Module User Manual”,User Manual [6]https://www.minhha.com
[7]https://en.wikipedia.org
[8]“Global Haar-like Features:A New Extension of Classic Haar Features forEfficient Face Detection in Noisy Images”, Mahdi Rezaei
[9]https://www.datacamp.com/community/tutorials/adaboost-classifier-python [10] “FaceNet”, Florian Schroff, Dmitry Kalenichenko, James Philbin.