3.1.2 Thiết kế hệ thống:
Với các chức năng ở trên, chương trình được chia thành thành 3 phần chính: Phần xử lý đầu vào, phần phát hiện khuôn mặt và phần xử lý đầu ra.
3.1.3 Xử lý đầu vào Lấy các đặc trưng và huấn luyện nhận dạng Hình 24: Sơ đồ hệ thống
Chương trình nhận đầu vào là file ảnh, video hoặc webcam, tuy nhiên, việc phát hiện khuôn mặt được thực hiện trên các bức ảnh, do đó, với đầu vào là webcam hay file video, ta phải chuyển thành các ảnh tĩnh và xử lý trên từng ảnh tĩnh. Sau khi đã có ảnh đầu vào rồi thì sẽ chuyển ảnh cho giai đoạn xử lý tiếp theo, đó là phát hiện các khn mặt có trong ảnh.
3.1.4 Trích chọn đặc trưng và gán nhãn
Phần này xử lý chính nghiệp vụ của hệ thống. Sau khi có ảnh truyền vào, hệ thống sẽ thực hiện chức năng phát hiện khn mặt có trong ảnh.
Trong dự án này, bộ dữ liệu sẽ được trích xuất đặc trưng và huấn luyện bằng pre-trained model Keras FaceNet được đào tạo trước do Hiroki Taniai cung cấp, nó được đào tạo trên bộ dữ liệu MS-Celeb-1M (Microsoft Celeb), với hình ảnh đầu vào là ảnh màu, để làm trắng các giá trị pixel của chúng (được chuẩn hóa trên cả ba kênh) và có hình vng kích thước 160 × 160 pixel.
MS-Celeb-1M là bộ dữ liệu hơn 10 triệu hình ảnh của gần 100000 người nổi tiếng trên Thế Giới trong đó có Việt Nam, được thu thập trên internet từ năm 2016, hiện nay nó đã bị Microsoft dừng phát hành
3.1.4.1 Phát hiện khn mặt
Để trích chọn đặc trưng cho mỗi khn mặt, trước tiên ta cần tìm ra vị trí khn mặt trong bức hình. Vì bộ dữ liệu sẽ bao gồm nhiều ảnh có điều kiện ánh sáng cũng như các góc độ của khn mặt khác nhau, chính vì vậy việc lựa chọn face detector cũng rất quan trọng để đảm hiệu quả cao nhất cho hệ thống.
Hình 25. Phát hiện khn mặt với Haar cascade
Kết quả cho ta thấy, haar cascade hiệu quả với các khuôn mặt thẳng và khơng bị che khuất như mắt kính trong trường hợp của bạn nữ. Hay có các góc nghiêng mạnh như trường hợp bạn nam, haar cascade đã nhận nhầm vùng tai, điều này thật sự không tốt khi sử dụng cho việc pre-train.
Hình 26. Phát hiện khn mặt với MTCNN
Với MTCNN, tất cả các khuôn mặt có trong hình đều được phát hiện ra, ngay cả khn mặt nghiêng hay có vật cản.
Như vậy, trong dự án này tôi sẽ sử dụng MTCNN làm công cụ phát hiện khn mặt.
3.1.4.2 Trích chọn đặc trưng và gắn nhãn (pre-train):
Trong dự án này tơi sử dụng pre-trained model có sẵn đó là FaceNet.
Bộ dữ liệu khn mặt sẽ được chia theo từng thư mục tương ứng với hình ảnh của từng đối tượng (sinh viên). Hệ thống sẽ tiến hành quét qua toàn bộ ảnh trong các thư mục. Face detector sẽ tìm kiếm khn mặt có trong ảnh (mặc định mỗi ảnh sẽ chỉ chưa một khn mặt), cắt lấy khn mặt và đưa kích thước về 160x160 pixel. Sau đó FaceNet sẽ tiến hành trích rút đặc trưng của từng khn mặt, áp dụng mơ hình học với thuật tốn Triplet Loss và gắn nhãn cho từng khuôn mặt (nhãn sẽ được lấy theo tên thư mục chứa ảnh).
3.1.5 Phát hiện khuôn mặt trong ảnh đầu vào:
Hình ảnh đầu vào có thể chứa nhiều khn mặt, các khn mặt này có thể khơng đồng nhất về điều kiện ánh sáng, góc độ, biểu cảm,… Vì vậy tơi vẫn sẽ sử dụng MTCNN làm cơng cụ phát hiện khn mặt vì sự mạnh mẽ của nó.
3.1.6 Căn chỉnh khuôn mặt trước khi nhận dạng:
Căn chỉnh khuôn mặt là khá quan trọng, việc này giúp cải thiện phần nào độ chính xác khi đưa vào nhận dạng.
Trong dự án này, tôi sử dụng phương pháp căn chỉnh 2D, dựa vào các mốc trên khuôn mặt (đặc biệt là vùng mắt) để thực hiện xoay, dịch chuyển và điều chỉnh tỷ lệ của khn mặt về cùng một kích thước.
Cụ thể, thuật tốn lấy vị trí mắt trái và mắt phải từ MTCNN, tính tốn điểm giữa và tiến hành xoay khuôn mặt sao cho hai mắt cùng nằm trên hàng ngang.
Hình 27. Trước và sau khi căn chỉnh khn mặt3.1.7 Trích rút đặc trưng khn mặt từ ảnh đầu vào: 3.1.7 Trích rút đặc trưng khn mặt từ ảnh đầu vào:
Sau khi phát hiện và căn chỉnh khuôn mặt, hệ thống sẽ tiến hành trích rút đặc trưng khn mặt bằng FaceNet. Sau đó các đặc trưng này sẽ được đưa vào “không gian embeddings” để so sánh với bộ dữ liệu các đặc trưng đã có.
3.1.8 Nhận diện khn mặt
Trong “không gian embeddings”, các khuôn mặt ở dạng vector 128 chiều sẽ được đối chiếu với bộ dữ liệu để tìm ra khn mặt giống nhất và gắn nhãn cho chúng.
Trong dự án này, tôi sử dụng phép đo cosine similarity (độ tương tự cosine) để tiến hành so sánh. Ta sử dụng cosine similarity khi chỉ quan tâm đến góc giữa 2 vector mà khơng quan tâm đến khoảng cách giữa chúng.
Hình 28. Cosine similarity
Dựa vào cosine similarity ta có thể tính cosine distance (khoảng cách cosine) bằng công thức:
cosine_distance = 1 – cosine_similarity
Đầu vào của hàm cosine là mảng chứa vector 128 chiều của khuôn mặt trong ảnh chưa khuôn mặt cần nhận dạng mà FaceNet vừa tính tốn, và bộ dữ liệu gồm các mảng chứa vector 128 chiều của các khuôn mặt đã được huấn luyện từ
trước. Cosine distance sẽ tính lần lượt khoảng cách giữa vector đầu vào với các vector trong bộ dữ liệu để tìm ra vector có giá trị thấp nhất (khoảng cách ngắn nhất), tương ứng với độ tương tự cao nhất.
3.1.9 Xác định các khuôn mặt “unknown”
Với một hệ thống nhận diện khuôn mặt, việc loại trừ các trường hợp có nhiều điểm chung trong khn mặt là cực kì cần thiết. Hoặc đơn giản là có một gương mặt lạ xuất hiện trong bức hình cũng bị nhận nhầm là người dùng của hệ thống. Các khuôn mặt lạ này chung quy lại là các khuôn mặt “unknown”.
Các khn mặt “unknown” là các khn mặt khơng có trong bộ dữ liệu được huấn luyện từ trước. Khi ảnh xuất hiện các khuôn mặt này, nếu khơng tiến hành xác định và loại trừ thì khả năng cao hệ thống sẽ nhận nhầm với các khn mặt có trong bộ dữ liệu và tiến hành nhận diện sai là rất cao.
Từ cosine distance ta có thể xác định các khn mặt “unknown” với một tỉ lệ nhất định dựa trên ngưỡng cho phép (threshold). Khơng có một quy tắc chuẩn nào cho việc lựa chọn ngưỡng trong nhận dạng khuôn mặt, mà giá trị ngưỡng này được chọn thông qua các lần thử nghiệm mang lại kết quả tốt nhất.
3.2 Kết quả thử nghiệm hệ thống3.2.1 Giao diện chương trình: 3.2.1 Giao diện chương trình:
Hình 30: File hình ảnh được tạo ra
KẾT LUẬN
1.Kết quả đạt được
Trên cơ sở nghiên cứu về bài toán phát hiện mặt người trong ảnh. Đặc biệt là mơ hình nơ-ron tích chập (CNN). Chúng em đã áp dụng thành cơng mơ hình CNN vào bài tốn phát hiện mặt người trong ảnh. Tuy kết quả đạt được chưa cao, nhưng đây là bước đầu để phát triển bài toán nhận dạng mặt (face recognition) người sau này. Bên cạnh đó, trong q trình xây dựng chương trình demo, em đã tìm hiểu về deep learning, ngơn ngữ Python, qua đó biết cách lập trình với ngơn ngữ Python và có thêm kiến thức về deep learning
Về chương trình demo, sau khi thử nghiệm với tập ảnh lớn và webcam. Chương trình đạt kết quả tốt, thời gian phát hiện nhanh đối với các ảnh mặt người chụp thẳng, chất lượng ảnh tốt (chụp bằng máy kĩ thuật số), tuy nhiên đối với các ảnh chụp quá nghiêng hay ảnh có màu sắc q tối thì chương trình gần như khơng thể phát hiện được khn mặt trong bức ảnh đấy.
Đối với webcam, thì hiệu suất của chương trình cịn tùy theo chất lượng của loại webcam được sử dụng, tuy nhiên cũng tương tự như với phát hiện khn mặt trong ảnh, chương trình sẽ khơng thể phát hiện mặt người trong điều kiện độ sáng quá yếu và góc quay nghiêng quá 200.
2.Hướng phát triển:
Có nhiều hướng phát triển cho chương trình này, có thể phát triển cả về mặt ứng dụng và mặt thuật tốn. Có thể xây dựng một ứng dụng chỉ cần đến phát hiện mặt người mà khơng cần nhận dạng. Ví dụ như một hệ thống ghép hình, ghép khn mặt phát hiện được vào trong một bức ảnh khác
Ngồi ra có thể phát triển chương trình theo hướng nhận dạng khuôn mặt, xây dựng một hệ thống để học các đặc trưng của những người cần nhận dạng. Khi thực hiện, đầu tiên ta đưa qua bức ảnh qua chương trình phát hiện mặt người để phát hiện nhanh các khn mặt có trong ảnh, sau đấy so sách các khn mặt đó với các khn mặt mà chương trình đã được “học” từ trước, so sánh các đặc trưng của hai khn mặt, nếu trùng thì đưa ra thơng tin về khn mặt được nhận dạng.
DANH MỤC TÀI LIỆU THAM KHẢO
[1] G. Yang and T. S. Huang, “Human Face Detection in Complex Background”, Pattern Recognition, vol. 27, no. 1, pp. 53-63, 1994.
[2] A. Lanitis, C.J. Taylor, and T.F. Cootes, “An Automatic Face Identification System Using lexible Appearance Models”, Image and Vision Computing, vol. 13, no. 5, pp. 393-401, 1995.
[3] Andrew King, “A Survey of Methods for Face Detection”, 2003.
[4] A. Yuille, P. Hallinan, and D. Cohen, “Feature Extraction from Faces Using eformable Templates”, Int’l J. Computer Vision, vol. 8, no. 2, pp. 99-111, 1992. [5] D.G. Kendall, “Shape Manifolds, Procrustean Metrics, and Complex Projective Shapes”, Bull. London Math. Soc., vol. 16, pp. 81-121, 1984.
[6] E. Osuna, R. Freund, and F. Girosi, “Training Support Vector Machines: An Application to Face Detection” Proc. IEEE Conf. Computer Vision and Pattern Recognition, pp. 130-136, 1997.
[7] Fuzhen Huang and Jianbo Su, “Multiple Face Contour Detection Using adaptive Flows”, Sinobiometrics 2004, LNCS 3338, pp. 137-143, Springer-Verlag Berlin eidelberg, 2004.
[8] H.P. Graf, T. Chen, E. Petajan, and E. Cosatto, “Locating Faces and Facial Parts”, Proc. First Int’l Workshop Automatic Face and Gesture Recognition, pp. 41-46, 1995.
[9] J. Canny, “A Computational Approach to Edge Detection”, IEEE Trans. Pattern Analysis and Machine Intelligence, vol. 8, no. 6, pp. 679-698, June 1986. [10] J. Sobottka and I. Pitas, “Segmentation and Tracking of Faces in Color Images”, Proc. Second Int’l Conf. Automatic Face and Gesture Recognition, pp. 236-241, 1996.s