Một số thư viện quan trọng:

Một phần của tài liệu ĐỒ ÁN CƠ SỞ 5: XÂY DỰNG NHẬN DIỆN KHUÔN MẶT BẰNG MTCNN VÀ FACENET. Giảng viên hướng dẫn : TS. Nguyễn Sĩ Thìn (Trang 38)

2.7.1 Opencv

OpenCV (OpenSource Computer Vision) là một thư viện mã nguồn mở. OpenCV được phát hành theo giấy phép BSD, do đó nó hoàn toàn miễn phí cho cả học thuật và thương mại. Nó có các interface C++, C, Python, Java và hỗ trợ Windows, Linux, Mac OS, iOS và Android. OpenCV được thiết kế để tính toán hiệu quả và với sự tập trung nhiều vào các ứng dụng thời gian thực. Được viết bằng tối ưu hóa C/C++, thư viện có thể tận dụng lợi thế của xử lý đa lõi.

Được sử dụng trên khắp thế giới, OpenCV có cộng đồng hơn 47 nghìn người dùng và số lượng download vượt quá 6 triệu lần. Phạm vi sử dụng từ nghệ thuật tương tác, cho đến lĩnh vực khai thác mỏ, bản đồ trên web hoặc công nghệ robot. [13]

Một số module mà chúng ta có thể làm việc thường xuyên nếu chúng ta sử dụng thư viện này:

- Core: Đây là module chứa các cấu trúc, class cơ bản mà OpenCV sẽ sử dụng trong việc lưu trữ và xử lý hình ảnh như Mat, Scale, Point, Vec… và các phương thức cơ bản sử dụng cho các module khác.

- Imgproc: Đây là một module xử lý hình ảnh của OpenCV bao gồm các bộ lọc (filter) linear và non-linear và các phép biến đổi hình học (tranformation) như resize hoặc các phép biến đổi affine, chuyển đổi hệ máy và các thuật toán liên quan đến histogram (biểu đồ) của hình ảnh. - Highgui: Đây là một module cho phép tương tác với người dùng trên UI

(User Interface) như hiển thị hình ảnh, video capturing.

- Features2d: Module tìm các đặc trưng (feature) của hình ảnh. Trong module có implement các thuật toán rút trích đặc trưng như PCA…

- Calib3d: Hiệu chuẩn máy ảnh và xây dựng lại 3D.

- Objdetect: Module cho việc phát hiện các đối tượng như khuôn mặt, đôi mắt, cốc, người, xe hơi, … trong hình ảnh. Các thuật toán được sử dụng trong module này là Haar like Features.‐

- ml: Module này chứa các thuật toán về Machine Learning phục vụ cho các bài toàn phân lớp (Classfitication) và bài toán gom cụm (Clustering). Ví dụ như thuật toán SVM (Support Vector Machine), ANN…

- Video: Module phân tích video gồm ước lượng chuyển động, trừ nền, và các thuật toán theo dõi đối tượng (object tracking).

OpenCV đang được sử dụng rộng rãi trong các ứng dụng bao gồm:

 Nhận diện hình ảnh

 Kiểm tra và giám sát tự động

 Robot và xe hơi tự lái

 Tìm kiếm và phục hồi hình ảnh/video

 Phim - cấu trúc 3D từ chuyển động

 Nghệ thuật sắp đặt tương tác

Đối với sinh viên ngành điện tử viễn thông việc ứng dụng thư viện mã nguồn mở OpenCV có thể thực hiện được rất nhiều các bài toán lý thú trên các bo mạch phát triển sẵn như Raspberry pi hay Adruino.

2.7.2 Numpy

NumPy là một từ viết tắt của "Numeric Python" hoặc "Numerical Python". Nó là một mô-đun mở rộng mã nguồn mở cho Python, cung cấp các chức năng biên dịch nhanh cho các thao tác toán học và số. Hơn nữa, NumPy làm phong phú ngôn ngữ lập trình Python với các cấu trúc dữ liệu mạnh mẽ để tính toán hiệu quả các mảng và ma trận đa chiều. Việc thực hiện thậm chí là nhằm vào ma trận và mảng khổng lồ. Bên cạnh đó các mô-đun cung cấp một thư viện lớn các chức năng toán học cấp cao để hoạt động trên các ma trận và mảng.

2.7.3 Keras

Keras là một thư viện được phát triển vào năm 2015 bởi François Chollet, là một kỹ sư nghiên cứu deep learning tại Google. Nó là một mã nguồn mở cho mạng nơ-ron được viết bởi ngôn ngữ Python. Keras là một API bậc cao có thể sử dụng chung với các thư viện deep learning nổi tiếng như Tensorflow (được phát triển bởi Google), CNTK (được phát triển bởi microsoft), Theano (người phát triển chính Yoshua Bengio). Keras có một số ưu điểm như:

 Dễ sử dụng, xây dựng model nhanh.

 Có thể chạy trên cả CPU và GPU

 Hỗ trợ xây dựng CNN, RNN và có thể kết hợp cả hai

2.7.4 TensorFlow

Thư viện TensorFlow là thư viện mã nguồn mở dùng cho tính toán số học sử dụng đồ thị luồng dữ liệu.

TensorFlow ban đầu được phát triển bởi các nhà nghiên cứu và kỹ sư làm việc trong nhóm Google Brain trong tổ chức Nghiên cứu trí thông minh máy của Google với mục đích tiến hành học máy và nghiên cứu mạng lưới thần kinh sâu. Hệ thống có thể áp dụng trong nhiều lĩnh vực khác nhau.

Ưu điểm của TensorFlow:

 Tích hợp sẵn rất nhiều các thư viện machine learning.

 Có khả năng tương thích và mở rộng tốt. Được Google phát triển cho machine learning phục vụ nghiên cứu lẫn xây dựng các ứng dụng thực tế.

 Phổ biến.

2.7.5 Dlib

Dlib được tạo ra từ 2002 bởi tác giả Davis King, được viết trên ngôn ngữ lập trình C++. Khác với mục đích của OpenCV là cung cấp hạ tầng thuật toán cho các ứng dụng xử lý ảnh và thị giác máy tính, dlib được thiết kế cho các ứng dụng máy học (machine learning) và trí tuệ nhân tạo với các thư viện con chính như sau:

- Classification: các kỹ thuật phân lớp chủ yếu dựa trên hai phương pháp cơ sở là kNN và SVM.

- Data transformation: các thuật toán biến đổi dữ liệu nhằm giảm số chiều, loại bỏ các dữ liệu dư thừa và tăng cường tính khác biệt (discriminant) của các đặc điểm được giữ lại.

- Clustering: các kỹ thuật phân cụm. - Regression: các kỹ thuật hồi qui.

- Structure prediction: các thuật toán dự đoán có cấu trúc.

- Markov Random Fields: các thuật toán dựa trên các trường Markov ngẫu nhiên.

Chương 3:

PHÂN TÍCH VÀ XÂY DỰNG HỆ THỐNG

Phát hiện mặt người trong ảnh có nhiều ứng dụng trong cuộc sống, tuy nhiên, trong khóa luận này, chúng em chỉ xây dựng một chương trình nhỏ để minh họa cho các lý thuyết ở trên. Cụ thể đấy là một chương trình phát hiện mặt người trong ảnh được viết bằng ngôn ngữ python, sử dụng mạng nơ-ron tích chập (CNN)

3.1.1 Phân tích

Nhiệm vụ chính của chương trình là dò tìm khuôn mặt từ một bức ảnh, một file video hoặc từ webcam, sau đấy lưu khuôn mặt vào csdl để phục vụ cho các mục đích khác (sẽ được phát triển sau).

Hình 22: Biểu đồ ngữ cảnh của hệ thống

Như vậy các chức năng chương trình bao gồm:

 Thu thập bộ dữ liệu khuôn mặt (dataset)

 Trích chọn đặc trưng từng khuôn mặt và gắn nhãn tương ứng (pre- train)

 Phát hiện khuôn mặt trên ảnh đầu vào (face detection)

 Căn chỉnh khuôn mặt (face alignment)

 Trích xuất các vector đặc trưng của khuôn mặt (extract feature)

 Nhận dạng khuôn mặt (face recognition)

Hình 23. Sơ đồ thực hiện 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.

Lấy các đặc trưng và huấn luyện nhận dạng Hình 24: Sơ đồ hệ thống

3.1.3 Xử lý đầu vào

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 khuôn 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 khuôn 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 vuông 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 khuôn mặt

Để trích chọn đặc trưng cho mỗi khuôn mặt, trước tiên ta cần tìm ra vị trí khuôn 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 khuôn 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 khuôn 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 khuôn 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ả khuôn 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 khuôn 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 khuôn 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 khuôn mặt có trong ảnh (mặc định mỗi ảnh sẽ chỉ chưa một khuôn mặt), cắt lấy khuôn 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 khuôn mặt, áp dụng mô hình học với thuật toá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 khuôn mặt, các khuôn 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 khuôn 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 khuôn mặt về cùng một kích thước.

Cụ thể, thuật toán lấy vị trí mắt trái và mắt phải từ MTCNN, tính toá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 khuôn mặt 3.1.7 Trích rút đặc trưng khuôn 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 khuôn 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 khuôn 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 khuôn 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 toá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 khuôn 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 khuôn mặt “unknown” là các khuôn 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 khuôn 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 khuôn 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 toá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 quá 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 quá tối thì chương trình gần như không thể phát hiện được khuôn 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 khuôn 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 toá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 khuôn mặt phát hiện được vào trong một bức ảnh khác

Ngoà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 khuôn mặt có trong ảnh, sau đấy so sách các khuôn mặt đó với các khuôn mặt mà chương trình đã được “học” từ trước, so sánh các đặc trưng của hai khuôn mặt, nếu trùng thì đưa ra thông tin về khuôn 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.

Một phần của tài liệu ĐỒ ÁN CƠ SỞ 5: XÂY DỰNG NHẬN DIỆN KHUÔN MẶT BẰNG MTCNN VÀ FACENET. Giảng viên hướng dẫn : TS. Nguyễn Sĩ Thìn (Trang 38)

Tải bản đầy đủ (DOC)

(53 trang)
w