GIỚI THIỆU
Giới thiệu về đề tài
Đề tài : Tìm hiểu, nghiên cứu và thực hiện xây dựng hệ thống nhận diện gương mặt Bối cảnh thực hiện đề tài:
Ngày nay, khoa học xử lý ảnh đã đạt được nhiều thành tựu lớn và đóng vai trò quan trọng trong các ứng dụng kỹ thuật và đời sống xã hội Một lĩnh vực đáng chú ý trong khoa học này là thị giác máy tính, thu hút sự quan tâm của nhiều nhà nghiên cứu với mục tiêu mô phỏng hệ thống thị giác của con người bằng các hệ thống máy tính, từ đó mang lại khả năng cảm nhận môi trường xung quanh Giấc mơ về một hệ thống máy tính tích hợp đầy đủ các giác quan, đặc biệt là thị giác, đang dần trở thành hiện thực nhờ vào những nghiên cứu toàn cầu Bên cạnh đó, sự phát triển của thiết bị phần cứng về thu nhận, hiển thị và tốc độ xử lý đã mở ra nhiều hướng mới cho công nghệ xử lý ảnh, giúp giải quyết các vấn đề như giám sát tự động trong ngân hàng, giám sát giao thông, phục vụ tại bãi đỗ xe và nhận dạng khuôn mặt trong lĩnh vực quân sự và an ninh.
Vấn đề cần giải quyết
Hệ thống nhận dạng khuôn mặt là một ứng dụng công nghệ tiên tiến, giúp tự động xác định hoặc nhận diện cá nhân thông qua hình ảnh kỹ thuật số hoặc video Công nghệ này đang ngày càng trở nên phổ biến trong nhiều lĩnh vực như an ninh, giám sát và marketing.
Đề xuất nội dung thực hiện
Chúng tôi đang nghiên cứu và phát triển hệ thống nhận diện gương mặt với công nghệ Deep Learning, nhằm đạt được khả năng nhận dạng gương mặt nhanh chóng và chính xác Việc hệ thống có thể nhận diện chính xác gương mặt là yếu tố quan trọng trong dự án này.
Với hệ thống này, chúng em sẽ sử dụng các thư viện được cung cấp bởi PIP trong python và sử dụng Visual Studio Code để lập trình.
Chức năng dự kiến
The system is capable of collecting facial data, training the acquired facial data, and ultimately performing its primary function of face recognition.
NGHIÊN CỨU TỔNG QUAN
Tổng quan về Python
Python là ngôn ngữ lập trình bậc cao, đa năng, được Guido van Rossum phát triển và ra mắt lần đầu vào năm 1991 Với thiết kế dễ đọc, dễ học và dễ nhớ, Python nổi bật với cú pháp rõ ràng, giúp người mới bắt đầu lập trình tiếp cận nhanh chóng và hiệu quả.
Python là một ngôn ngữ lập trình hoàn toàn động với cơ chế cấp phát bộ nhớ tự động Được phát triển trong dự án mã nguồn mở dưới sự quản lý của tổ chức phi lợi nhuận Python Software Foundation, Python ban đầu được thiết kế để chạy trên nền tảng Unix Qua thời gian, Python đã mở rộng hỗ trợ cho nhiều hệ điều hành khác nhau, bao gồm MS-DOS, Mac OS, OS/2, Windows, Linux và các hệ điều hành Unix khác.
Python ban đầu được phát triển cho hệ điều hành Unix, nhưng đã mở rộng sang nhiều nền tảng khác như MS-DOS, Mac OS, OS/2, Windows và Linux Mặc dù nhiều cá nhân đã đóng góp vào sự phát triển của Python, Guido van Rossum vẫn là tác giả chính và giữ vai trò quan trọng trong việc định hướng phát triển của ngôn ngữ này.
Hình 2: Guido van Rossum - Nhà sáng lập Python
Python luôn được biết đến với các đặc điểm sau đâu:
- Cú pháp rất tường minh, dễ đọc.
- Các khả năng tự xét mạnh mẽ.
- Hướng đối tượng trực giác.
- Cách thể hiện tự nhiên mã thủ tục.
- Hoàn toàn mô-đun hóa, hỗ trợ các gói theo cấp bậc.
- Xử lý lỗi dựa theo ngoại lệ.
- Kiểu dữ liệu động ở mức rất cao.
- Các thư viện chuẩn và các mô-đun ngoài bao quát hầu như mọi việc.
- Phần mở rộng và mô-đun dễ dàng viết trong C, C++.
- Có thể nhúng trong ứng dụng như một giao diện kịch bản (scripting interface).
- Python mạnh mẽ và thực hiện rất nhanh.
Python là một ngôn ngữ lập trình cấp cao có thể đáp ứng phần lớn yêu cầu của lập trình viên:
- Python thích hợp với các chương trình lớn hơn cả AWK và Perl.
- Python được sử dụng để lập trình Web Nó có thể được sử dụng như một ngôn ngữ kịch bản.
- Python được thiết kế để có thể nhúng và phục vụ như một ngôn ngữ kịch bản để tuỳ biến và mở rộng các ứng dụng lớn hơn.
Python được trang bị nhiều công cụ tích hợp và một thư viện chuẩn phong phú, giúp người dùng dễ dàng phát triển dịch vụ Web Ngoài ra, Python hỗ trợ các thành phần COM, CORBA và nhiều định dạng dữ liệu Internet như email, HTML, XML Thêm vào đó, Python cung cấp các thư viện xử lý các giao thức Internet phổ biến như HTTP và FTP.
Python có khả năng giao tiếp với hầu hết các loại cơ sở dữ liệu, xử lý văn bản và tài liệu một cách hiệu quả, đồng thời tích hợp tốt với các công nghệ Web khác.
- Python đặc biệt hiệu quả trong lập trình tính toán khoa học nhờ các công cụ Python Imaging Library, pyVTK, MayaVi 3D Visualization Toolkits, Numeric Python, ScientificPython,…
Python là một ngôn ngữ lập trình mạnh mẽ cho việc phát triển ứng dụng desktop, cho phép lập trình viên tạo ra các ứng dụng giao diện đồ họa (GUI) chất lượng cao thông qua các thư viện như wxPython, PyQt và PyGtk Ngoài ra, Python còn tương thích với nhiều nền tảng phát triển phần mềm khác như MFC, Carbon, Delphi, X11, Motif, Tk, Fox và FLTK, mở rộng khả năng sáng tạo cho lập trình viên.
- Python cũng có sẵn một unit testing framework để tạo ra các bộ test (test suites).
Tổng quan về SQLite
SQLite là một thư viện phần mềm cung cấp một SQL Database Engine mà không cần máy chủ và cấu hình, giúp nó trở nên khép kín và nhỏ gọn Là một cơ sở dữ liệu không cần cấu hình, SQLite cho phép người dùng dễ dàng tích hợp mà không phải thiết lập phức tạp trong hệ thống của họ.
2.2.2 Chức năng chính của SQLite
- Dùng để lưu trữ thông tin bao gồm Mã SV ,tên ,… thông tin của sinh viên
Hình 4 Thông tin sinh viên
Hình 5 Thông tin ngày giờ điểm danh
Tổng quan về quá trình xử lý ảnh
Xử lý ảnh (XLA) là một lĩnh vực quan trọng trong thị giác máy, liên quan đến việc chuyển đổi hình ảnh gốc thành hình ảnh mới theo mong muốn của người dùng Quá trình này bao gồm phân tích, phân lớp các đối tượng, cải thiện chất lượng, phân đoạn, tách cạnh và gán nhãn cho các vùng trong hình ảnh, cũng như biên dịch thông tin hình ảnh.
2.3.2 Các quá trình xử lý ảnh
Hình 6 Quá trình xử lý ảnh
2.3.2.1 Phần thu nhận ảnh (Image Acquisition) Ảnh có thể nhận qua camera màu hoặc đen trắng Thường ảnh nhận qua camera là ảnh tương tự (loại camera ống chuẩn CCIR với tần số 1/25, mỗi ảnh 25 dòng), cũng có loại camera đã số hoá (như loại CCD – Charge Coupled Device) là loại photodiode tạo cường độ sáng tại mỗi điểm ảnh
Camera thường dùng là loại quét dòng, tạo ra hình ảnh dưới dạng hai chiều Chất lượng của ảnh thu được phụ thuộc vào thiết bị ghi hình cũng như các yếu tố môi trường như ánh sáng và phong cảnh.
2.3.2.2 Tiền xử lý (Image Processing)
Sau khi thu nhận, ảnh có thể gặp tình trạng nhiễu và độ tương phản thấp, do đó cần sử dụng bộ tiền xử lý để cải thiện chất lượng Bộ tiền xử lý có chức năng chính là lọc nhiễu và tăng cường độ tương phản, giúp ảnh trở nên rõ ràng và sắc nét hơn.
2.3.2.3 Phân đoạn (Segmentation) hay phân vùng ảnh
Phân vùng ảnh là quá trình tách một ảnh đầu vào thành các vùng thành phần, giúp phân tích và nhận dạng ảnh hiệu quả Ví dụ, trong việc nhận dạng chữ hoặc mã vạch trên phong bì thư, việc trích chọn đặc trưng (Feature Selection) đóng vai trò quan trọng trong việc tách các đặc tính của ảnh, từ đó cung cấp thông tin định lượng để phân biệt các lớp đối tượng khác nhau trong ảnh.
2.3.2.5 Nhận dạng và nội suy ảnh(Image Recognition and Interpretation)
Nhận dạng ảnh là quá trình xác định và phân loại hình ảnh bằng cách so sánh với các mẫu đã học trước Quá trình này bao gồm nội suy, tức là đưa ra phán đoán dựa trên nhận dạng Theo lý thuyết nhận dạng, các mô hình toán học về hình ảnh được chia thành hai loại cơ bản, phản ánh sự đa dạng trong cách phân loại ảnh.
− Nhận dạng theo tham số
− Nhận dạng theo cấu trúc
Hiện nay, một số công nghệ nhận dạng phổ biến trong khoa học và công nghệ bao gồm: nhận dạng ký tự (chữ in, chữ viết tay, chữ ký điện tử), nhận dạng văn bản (Text), nhận dạng vân tay, nhận dạng mã vạch và nhận dạng khuôn mặt.
2.3.2.6 Cơ sở trí thức(Knowledge Base)
Ảnh là một đối tượng phức tạp với nhiều yếu tố như đường nét, độ sáng tối và dung lượng điểm ảnh, dẫn đến việc xử lý ảnh gặp nhiều thách thức Trong quá trình phân tích và xử lý ảnh, việc đơn giản hóa các phương pháp toán học là cần thiết để tăng tính tiện lợi Đồng thời, việc mô phỏng quy trình tiếp nhận và xử lý ảnh của con người ngày càng được chú trọng, với nhiều bước hiện nay áp dụng các phương pháp trí tuệ nhân tạo Do đó, các cơ sở tri thức trong lĩnh vực này được phát huy mạnh mẽ.
Tổng quan về các thư viện cài đặt
OpenCV (Open Computer Vision) là thư viện mã nguồn mở hàng đầu cho xử lý thị giác máy tính, machine learning và xử lý ảnh Được phát triển bằng C/C++, OpenCV có tốc độ tính toán nhanh, lý tưởng cho các ứng dụng thời gian thực Thư viện này hỗ trợ nhiều ngôn ngữ lập trình như C/C++, Python và Java, và tương thích với các hệ điều hành như Windows, Linux, MacOS, Android và iOS Với hơn 47 nghìn người dùng và hơn 6 triệu lượt tải xuống, OpenCV có một cộng đồng mạnh mẽ.
OpenCV có rất nhiều ứng dụng như nhận dạng ảnh, xử lý ảnh, phục hồi ảnh/video, thực tế ảo, các ứng dụng khác,…
Thư viện Tensorfow 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.
Biểu đồ dưới đây cho thấy mức độ phổ biến của thư viện này:
Hình 9 Biểu đồ lượt star và repos trên github sử dụng TF
Hình 10 Thống kê nhu cầu tensorflow của các nhà tuyển dụng
Matplotlib là một thư viện vẽ đồ thị mạnh mẽ, rất hữu ích cho người dùng Python và NumPy Trong đó, Pyplot là module được sử dụng phổ biến nhất, cung cấp giao diện tương tự như MATLAB nhưng sử dụng Python và hoàn toàn mã nguồn mở.
Pillow là một fork từ thư viện PIL của Python được sử dụng để xử lý hình ảnh.
So với PIL thì Pillow được cập nhật thường xuyên và đánh giá cao hơn (PIL đã không được cập nhật từ năm 2009).
Scipy được phát triển dựa trên Numpy, cung cấp đầy đủ các chức năng cần thiết cho việc xử lý mảng cơ bản, cho phép người dùng tận dụng các hàm mạnh mẽ của Numpy.
Scikit-learn (Sklearn) is a powerful library for machine learning algorithms written in Python It offers a comprehensive set of tools for tackling various machine learning and statistical modeling tasks, including classification, regression, clustering, and dimensionality reduction.
Hệ thống nhận diện gương mặt
Khi Facebook ra mắt vào năm 2004, mục tiêu chính của nó là kết nối mọi người Hiện nay, trí tuệ nhân tạo đã trở thành yếu tố trung tâm trong các sản phẩm của công ty Nhà khoa học AI Yann LeCun từng cảnh báo rằng nếu không hiểu rõ, mạng xã hội có thể trở nên đơn điệu.
Vào năm 2018, Apple đã giới thiệu tính năng nhận diện khuôn mặt trên iPhone X, đánh dấu sự khởi đầu của một xu hướng mới trong ngành smartphone, nơi nhiều thiết bị di động sau đó cũng áp dụng công nghệ này.
Một số ngân hàng ở Autralia bắt đầu ứng dụng xác thực khuôn mặt trong các giao dịch ATM.
Hệ thống nhận diện khuôn mặt tại Trung Quốc được triển khai trên toàn quốc, không chỉ giúp chấm điểm công dân mà còn hỗ trợ trong việc xác minh và truy tìm nhiều tội phạm đang lẩn trốn.
Còn tại các cơ quan, hệ thống nhận diện khuôn mặt được nghiên cứu in-house áp dụng để chấm công cho nhân viên.
Nhận diện khuôn mặt có tính ứng dụng cao Rất nhiều công ty, doanh nghiệp và quốc gia đang cần.
2.5.2 Các loại hệ thống xác thực
Hệ thống xác thực thường sử dụng thông tin sinh trắc để định danh cá nhân, vì những thông tin này là duy nhất cho mỗi người Các loại thông tin sinh trắc có thể bao gồm vân tay, ADN, vân mắt, và khuôn mặt Để đảm bảo độ chính xác, cần tránh các yếu tố can thiệp như phẫu thuật thẩm mỹ, đồng thời giữ cho khuôn mặt tự nhiên, không chu môi hay nháy mắt Ngoài ra, hình dạng và dáng đi cũng là những đặc điểm quan trọng trong quá trình xác thực.
Có nhiều phương pháp xác thực khác nhau tùy thuộc vào loại thông tin sinh trắc được sử dụng Tại Việt Nam, xác thực bằng vân tay là phương pháp phổ biến nhất.
Trước khi công nghệ thị giác máy tính phát triển, hệ thống xác thực bằng vân tay và vân mắt rất phổ biến Gần đây, xác thực bằng khuôn mặt đã trở nên phổ biến hơn Tuy nhiên, về độ chính xác, các hệ thống xác thực vân tay và vân mắt vẫn đáng tin cậy hơn so với nhận diện khuôn mặt, vì dữ liệu của vân tay và vân mắt không thay đổi, trong khi khuôn mặt của con người có thể thay đổi theo thời gian và chịu sự co dãn.
Hệ thống nhận diện khuôn mặt ngày càng được ưa chuộng nhờ vào khả năng xác thực nhanh chóng và tiện lợi, cho phép xác thực từ xa mà không cần tiếp xúc trực tiếp như với vân tay hay vân mắt Điều này mang lại sự thuận tiện cho người dùng, đồng thời tôn trọng quyền riêng tư cá nhân, vì bạn có thể quan sát người khác mà không cần phải xin phép, nhưng để có sự tiếp xúc thì cần phải được sự đồng ý.
2.5.3 Các phương pháp xác thực gương mặt 2.5.3.1 Phương pháp truyền thống
Các phương pháp truyền thống trong xác thực khuôn mặt thường sử dụng kỹ thuật trích xuất “landmark” để tạo ra một bản đồ xác định các điểm cố định trên khuôn mặt, bao gồm mắt, mũi, miệng và lông mày.
Hình 13 Phương pháp truyền thống
Landmark face đã loại bỏ thông tin không cần thiết, chỉ giữ lại những thông tin chính Mỗi khuôn mặt được nén thành một véc tơ n chiều, thường là 68 chiều.
Sử dụng đầu vào là landmark face, áp dụng các thuật toán cổ điển như SVM, k-
NN, Naive Bayes, Random Forest, MLP, … để phân loại khuôn mặt cho một người.
Kĩ thuật nhận diện 3D sẽ sử dụng không gian 3 chiều để biểu diễn khuôn mặt.
Từ thông tin này có thể xác định các đặc trưng khác nhau trên bề mặt khuôn mặt như các đường countour của mắt, mũi, cằm.
Nhận diện khuôn mặt 3D có lợi thế nổi bật là không bị ảnh hưởng bởi sự thay đổi ánh sáng như các phương pháp 2D, giúp nâng cao độ chính xác trong việc nhận dạng Để tạo ra hình ảnh 3D, một cụm ba camera được sử dụng, mỗi camera được hướng về một góc khác nhau Sự phối hợp của các camera này cho phép theo dõi khuôn mặt người dùng trong thời gian thực và nhận diện chính xác.
2.5.3.3 Các phương pháp nhận diện khác
Ngoài ra còn có một số phương pháp nhận diện khuôn mặt như nhận diện cảm biến da và phương pháp kết hợp.
Phương pháp kết hợp sử dụng thông tin từ nhiều nguồn như landmark face, nhận diện 3D và cảm biến da, giúp nâng cao độ chính xác trong nhận diện khuôn mặt Phương pháp này hiệu quả trong các tình huống khuôn mặt có biểu cảm đa dạng như cau mày, chớp mắt, và cười, đồng thời ít bị ảnh hưởng bởi điều kiện ánh sáng.
2.5.4 Các bài toán khác nhau về Face
Có nhiều lớp bài toán khác nhau liên quan đến dữ liệu khuôn mặt Trong số đó, bốn bài toán phổ biến nhất được xác định dựa trên nhu cầu thực tế bao gồm nhận diện khuôn mặt, xác thực danh tính, phân tích cảm xúc và theo dõi chuyển động khuôn mặt.
Nhận diện khuôn mặt là một bài toán nhận dạng từ một nhiều, nhằm xác định danh tính của người trong ảnh Quá trình này nhận đầu vào là ảnh khuôn mặt và đầu ra là tên người tương ứng Tác vụ này thường được ứng dụng trong các hệ thống chấm công, giám sát công dân và camera thông minh tại các đô thị, góp phần nâng cao an ninh và quản lý.
Xác thực khuôn mặt là một bài toán nhận dạng một-một, nhằm xác định xem hai ảnh đầu vào có phải là của cùng một người hay không Kết quả của quá trình này sẽ là "có" hoặc "không" Bài toán này thường được áp dụng trong các hệ thống bảo mật, điển hình là tính năng xác thực khuôn mặt trên điện thoại di động.
Do có mối quan hệ khá gần nên face recognition là tên gọi chung cho cả hai thuật toán face identification và face verification.
Tìm kiếm khuôn mặt đại diện (face clustering) là quá trình xác định khuôn mặt đặc trưng nhất bằng cách tính toán trung bình của các ảnh khuôn mặt để tạo ra hình ảnh centroid Sau đó, ta so sánh độ tương đồng giữa hình ảnh centroid và các khuôn mặt khác để xác định khuôn mặt có độ tương đồng cao nhất Phương pháp này cũng cho phép xác định khuôn mặt đặc trưng nhất theo giới tính và quốc gia.
Hình 15 Tìm kiếm khuôn mặt đại diện (face clustering)
Khởi tạo enviroment dự án mới trên Anaconda
conda create -n yourenvname python=x.x anaconda
Trong đó: yourenvname là tên của enviroment mà bạn cần tạo, x.x là phiên bản python (3.7) mà project bạn sử dụng.
Kích hoạt (Activate) một enviroment: activate yourenvname
Hình 29 Tạo môi trường cho Project
Cài đặt thư viện
Pip install tensorflow==1.15 scipy==1.1.0 scikit-learn opencv-python h5py matplotlibPillow requests psutilHoặc: pip install -r requirements.txt
Chuẩn bị ảnh khuôn mặt để train (Data Collection)
Để đào tạo hệ thống nhận diện khuôn mặt, người dùng cần thu thập hình ảnh của từng cá nhân và sắp xếp chúng vào một thư mục theo cấu trúc quy định.
Mỗi thư mục chứa hình ảnh của một người (càng nhiều hình ảnh càng tốt) và mỗi hình ảnh chỉ phải chứa một khuôn mặt của một người.
Hàm phát hiện gương mặt và cắt những gương mặt được tìm thấy
Sau khi thực hiện hàm, lấy khoảng 100 ảnh khuôn mặt của đối tượng để làm dữ liệu huấn luyện và lưu vào thư mục Datasets.
Hình 31Cắt ảnh (Data Collection)
Hình 32 Lưu hình ảnh vào thư mục với tên thư mục tương ứng với Name
Training dữ liệu
- align_mtcnn use MTCNN (Multi-task Cascaded Convolutional Networks) to find face and crop.
Hình 33 Find face and crop
Để huấn luyện mô hình nhận diện khuôn mặt bằng thư viện MTCNN, bạn cần chuẩn bị thư mục đầu vào "Datasets" và thư mục đầu ra "face_align" Sau khi hoàn tất quá trình huấn luyện, mô hình sẽ được lưu vào thư mục "models" dưới dạng tệp "your_model.pkl" Đảm bảo rằng trong bộ dữ liệu có ít nhất một hình ảnh cho mỗi lớp để quá trình đào tạo diễn ra hiệu quả.
Load dữ liệu từ thư mục trong Datasets
Nhận tensors đầu vào và đầu ra
Chạy foward để tính toán nhúng
Tiến hành lưu các dữ liệu encode đó vào file model để có thể sử dụng cho việc nhận dạng.
Hình 35 Lưu file your_model.pkl vào thư mục models
Hình 36 Giao diện khi đã được train
Nhận dạng gương mặt
Tiến hành đọc file model
Tiến hành đối tượng recognition với các thuộc tính là các đối tượng con:Detection, Encoded, Identifier
Tiến hành mở camera để lấy dữ liệu cho việc nhận diện gương mặt
Lấy ảnh từ camera và trích xuất khuôn mặt từ ảnh Sử dụng vòng lặp để xác định các khuôn mặt trong mảng dữ liệu Sau đó, áp dụng hàm generate_embedding() để tạo dữ liệu embedding Cuối cùng, sử dụng hàm Identify() để nhận diện tên đối tượng trong ảnh và xác suất của khuôn mặt đó.
Giao diện hệ thống
Run main.py Input Name(Tên không dấu) Click button Data Collection Train data Face recognition (Thời gian chạy sẽ phụ thuộc vào cấu hình máy tính bạn)