1.2 Mục tiêu đề tài - Mục tiêu của đề tài xây dựng hệ thống điểm danh sinh viên dựa trên nhận diện khuôn mặt là tạo ra một công cụ hiệu quả và tiện lợi để quản lý sự hiện diện của sinh
TỔNG QUAN VỀ ĐỀ TÀI
Lí do chọn đề tài
Hệ thống điểm danh dựa trên nhận diện khuôn mặt giúp tiết kiệm thời gian và công sức cho giáo viên và nhân viên quản lý bằng cách tự động ghi nhận sự hiện diện của sinh viên Thay vì thực hiện điểm danh thủ công bằng cách gọi tên từng sinh viên, hệ thống này nhanh chóng nhận diện và ghi lại thông tin, mang lại hiệu quả cao trong quản lý lớp học.
Hệ thống nhận diện khuôn mặt mang lại độ chính xác cao trong việc xác định sinh viên, giảm thiểu sai sót so với phương pháp điểm danh thủ công Điều này đảm bảo tính chính xác và công bằng trong việc ghi nhận sự hiện diện của sinh viên.
Hệ thống điểm danh linh hoạt và tiện ích có khả năng tích hợp dễ dàng vào các hệ thống quản lý học sinh, sinh viên hiện có, từ đó cải thiện quy trình điểm danh và nâng cao trải nghiệm học tập cho sinh viên.
Hệ thống được thiết kế với giao diện người dùng thân thiện, dễ sử dụng cho cả giáo viên và sinh viên Việc điểm danh qua chụp ảnh khuôn mặt mang lại trải nghiệm thú vị và thuận tiện, giúp sinh viên nhanh chóng xác nhận sự hiện diện của mình.
Tóm lại, việc chọn đề tài này không chỉ mang lại sự tiện lợi và hiệu quả trong
3 quản lý lớp học mà còn thể hiện sự áp dụng công nghệ vào giáo dục, tạo ra một môi trường học tập hiện đại và tiên tiến.
Mục tiêu đề tài
Mục tiêu của đề tài xây dựng hệ thống điểm danh sinh viên dựa trên nhận diện khuôn mặt là tạo ra một công cụ hiệu quả và tiện lợi nhằm quản lý sự hiện diện của sinh viên trong các lớp học và sự kiện tại môi trường đại học hoặc trung học Hệ thống này không chỉ giúp tiết kiệm thời gian mà còn nâng cao độ chính xác trong việc ghi nhận sự có mặt của sinh viên.
Tăng cường tự động hóa quy trình điểm danh nhằm xây dựng một hệ thống điểm danh tự động, thân thiện với người dùng, giúp giảm thiểu sự phụ thuộc vào các phương pháp điểm danh thủ công như giấy bút hoặc các phương tiện truyền thống khác.
Mục tiêu chính là phát triển một hệ thống nhận diện khuôn mặt với độ chính xác cao, nhằm đảm bảo khả năng nhận diện và ghi nhận sự hiện diện của sinh viên một cách tin cậy.
Hệ thống được phát triển nhằm tích hợp linh hoạt vào các hệ thống quản lý sinh viên hiện có, đồng thời cung cấp tính năng và giao diện người dùng thân thiện, dễ sử dụng.
Tăng cường quản lý và giám sát nhằm cung cấp cho giáo viên và nhân viên quản lý những công cụ hiệu quả để theo dõi sự hiện diện của sinh viên, hỗ trợ quản lý lớp học, và đảm bảo tính chính xác cũng như công bằng trong việc điểm danh.
Nâng cao trải nghiệm học tập của sinh viên là mục tiêu hàng đầu, nhằm tạo ra một môi trường học tập hiện đại và tiên tiến Trong không gian này, sinh viên sẽ được tiếp cận với các công nghệ mới mẻ, giúp họ cảm thấy thuận tiện và thoải mái khi tham gia các hoạt động học tập và sự kiện.
Phương pháp thực hiện
Phương pháp thực hiện của đề tài xây dựng hệ thống điểm danh sinh viên dựa trên nhận diện khuôn mặt bao gồm các bước sau:
1.3.1 Tìm hiểu và thu thập dữ liệu
- Tiến hành tìm hiểu về các công nghệ nhận diện khuôn mặt và các phương pháp tiếp cận khác nhau
- Thu thập dữ liệu ảnh chất lượng cao của sinh viên trong một số lớp học hoặc sự kiện thử nghiệm
1.3.2 Xử lý và tiền xử lý dữ liệu
- Tiến hành tiền xử lý dữ liệu ảnh để loại bỏ nhiễu và chuẩn hóa chúng để đảm bảo tính nhất quán và đồng nhất
- Phân tách dữ liệu thành tập huấn luyện và tập kiểm tra
1.3.3 Huấn luyện mô hình nhận diện khuôn mặt
- Sử dụng các thuật toán học máy và học sâu để huấn luyện một mô hình nhận diện khuôn mặt từ tập dữ liệu huấn luyện
- Tiến hành tinh chỉnh và điều chỉnh các siêu tham số để tối ưu hóa hiệu suất của mô hình
1.3.4 Xây dựng hệ thống điểm danh
- Phát triển một ứng dụng hoặc giao diện người dùng để sinh viên có thể sử dụng để điểm danh bằng cách chụp ảnh khuôn mặt của họ
- Tích hợp mô hình nhận diện khuôn mặt vào hệ thống để xác định và ghi nhận sự hiện diện của sinh viên
Đánh giá hiệu suất hệ thống là quá trình quan trọng, được thực hiện thông qua các thử nghiệm và kiểm tra trên tập dữ liệu kiểm tra mà không sử dụng trong quá trình huấn luyện Điều này giúp đảm bảo tính khách quan và độ tin cậy của kết quả, đồng thời cung cấp cái nhìn chính xác về khả năng hoạt động của hệ thống trong thực tế.
- Đo lường độ chính xác, độ nhạy, độ cụ thể và thời gian xử lý của hệ thống
1.3.6 Tối ưu hóa và cải tiến
Tối ưu hóa hệ thống là quá trình điều chỉnh các tham số và siêu tham số nhằm nâng cao hiệu suất và tính ổn định của hệ thống.
Thu thập phản hồi từ người dùng và thực hiện các cải tiến dựa trên những phản hồi này là cách hiệu quả để nâng cao trải nghiệm người dùng và tăng cường tính hữu ích của hệ thống.
1.3.7 So sánh với các phương pháp khác
So sánh hiệu suất và tính khả thi của hệ thống nhận diện khuôn mặt với các phương pháp điểm danh truyền thống như thẻ sinh viên và danh sách cho thấy rằng hệ thống nhận diện khuôn mặt mang lại độ chính xác cao hơn và tiết kiệm thời gian hơn Trong khi các phương pháp truyền thống yêu cầu sự can thiệp của con người và dễ xảy ra sai sót, hệ thống nhận diện khuôn mặt tự động hóa quy trình điểm danh, giảm thiểu rủi ro và nâng cao hiệu quả Hơn nữa, tính khả thi của công nghệ này trong môi trường học đường ngày càng được công nhận, mở ra hướng đi mới cho việc quản lý và theo dõi học sinh.
Đối tượng và phạm vi nghiên cứu đề tài
Đề tài xây dựng hệ thống điểm danh sinh viên khoa Công nghệ thông tin dựa trên nhận diện khuôn mặt hướng đến đối tượng là sinh viên trong khoa, cùng với những người quản lý lớp học và hệ thống quản lý tại trường Đại Học Hải Phòng.
Phạm vi nghiên cứu của đề tài này bao gồm:
Để huấn luyện mô hình nhận diện khuôn mặt, cần thu thập dữ liệu ảnh khuôn mặt của sinh viên từ cơ sở dữ liệu của trường hoặc thông qua quy trình chụp ảnh.
Tiền xử lý dữ liệu là bước quan trọng trong việc chuẩn hóa ảnh và loại bỏ nhiễu, nhằm chuyển đổi chúng thành định dạng phù hợp cho việc huấn luyện mô hình nhận diện khuôn mặt.
Xây dựng mô hình nhận diện khuôn mặt bằng cách áp dụng các kỹ thuật học máy và thị giác máy tính, nhằm phát triển một hệ thống có khả năng nhận diện khuôn mặt của sinh viên từ các bức ảnh được cung cấp.
Phát triển hệ thống điểm danh tự động bằng cách tích hợp mô hình nhận diện khuôn mặt, giúp xác định và xác minh danh tính sinh viên một cách chính xác dựa trên hình ảnh khuôn mặt.
Kiểm thử và đánh giá hệ thống là quá trình quan trọng, trong đó thử nghiệm được thực hiện trên một tập dữ liệu thực tế nhằm đánh giá hiệu suất tổng thể Điều này bao gồm việc đo lường độ chính xác trong việc nhận diện khuôn mặt cũng như thời gian phản hồi của hệ thống, từ đó xác định khả năng hoạt động hiệu quả của nó trong các tình huống thực tế.
Phân tích kết quả thử nghiệm là bước quan trọng để đề xuất cải tiến cho hệ thống Cần tập trung vào việc nâng cao độ chính xác và tốc độ nhận diện, đồng thời cải thiện khả năng hoạt động trong các điều kiện khác nhau như ánh sáng yếu và góc chụp đa dạng.
Phạm vi này xác định các bước quan trọng để xây dựng và triển khai hệ thống điểm danh sinh viên hiệu quả, sử dụng công nghệ nhận diện khuôn mặt.
Bố cục đề tài
Sau phần mở đầu, nội dung đề tài được thể hiện qua 3 chương sau:
- Chương 1 Nghiên cứu tổng quan: Nội dung chương này nhằm mục đích tìm
6 hiểu các phương pháp nhận diện khuôn mặt hiện có, ưu nhược điểm của từng phương pháp Phương pháp được lựa chọn và hướng tiếp cận của đề tài
- Cơ sở lý thuyết và phân tích thuật toán: Nội dung chương bao gồm: Tìm hiểu về OpenCV, thuật toán Face Regconition
- Chương 3 Phát biểu bài toán và Xây dựng hệ thống Nội dung chương gồm các bước để xây dựng một chương trình điểm danh tự động bằng hình ảnh
- Cuối cùng là Kết luận và đưa ra hướng phát triển của đề tài trong tương lai
NGHIÊN CỨU TỔNG QUAN
Tìm hiểu về thị giác máy tính (AI computer vision)
2.1.1 Thị giác máy tính là gì?
Thị giác máy tính, một lĩnh vực của trí tuệ nhân tạo (AI), áp dụng máy học và mạng lưới thần kinh để giúp máy tính và hệ thống hiểu và phân tích hình ảnh, video kỹ thuật số cùng các đầu vào trực quan khác Công nghệ này không chỉ nhận diện các khiếm khuyết mà còn đưa ra đề xuất hoặc thực hiện hành động phù hợp khi phát hiện sự cố.
Hình 1 Hình ảnh mô phỏng về thị giác máy tính
Nếu AI cho phép máy tính suy nghĩ thì thị giác máy tính cho phép chúng nhìn, quan sát và hiểu
Thị giác máy tính tương tự như thị giác của con người, nhưng con người có lợi thế hơn nhờ vào bối cảnh cuộc sống phong phú Nhờ kinh nghiệm, con người có khả năng phân biệt các vật thể, khoảng cách giữa chúng, cũng như nhận diện chuyển động và phát hiện sự bất thường trong hình ảnh.
Thị giác máy tính giúp máy móc thực hiện các chức năng nhận diện và phân tích hình ảnh một cách nhanh chóng và hiệu quả Nhờ vào sự hỗ trợ của máy ảnh, dữ liệu phong phú và các thuật toán tiên tiến, quá trình này diễn ra trong thời gian ngắn hơn nhiều so với khả năng của con người.
Hệ thống được đào tạo để kiểm tra sản phẩm hoặc theo dõi tài sản sản xuất có khả năng phân tích hàng nghìn sản phẩm hoặc quy trình trong một phút Điều này cho phép nó phát hiện những khiếm khuyết hoặc vấn đề mà con người không thể nhận ra, nhanh chóng vượt qua khả năng của con người.
Thị giác máy tính đang ngày càng được ứng dụng rộng rãi trong nhiều ngành công nghiệp như năng lượng, tiện ích, sản xuất và ô tô Thị trường này dự kiến sẽ đạt giá trị 48,6 tỷ USD vào năm 2022, cho thấy sự phát triển mạnh mẽ và tiềm năng của công nghệ này trong tương lai.
2.1.2 Thị giác máy tính hoạt động như thế nào?
Hình 2 Mô phỏng hoạt động của thị giác máy tính
Thị giác máy tính yêu cầu một khối lượng lớn dữ liệu để phân tích và nhận diện hình ảnh Quá trình này diễn ra qua nhiều lần phân tích nhằm phân biệt các đặc điểm khác nhau Ví dụ, để huấn luyện máy tính nhận diện lốp ô tô, cần cung cấp nhiều hình ảnh lốp và các thông tin liên quan để máy có thể nhận biết và phân biệt lốp, đặc biệt là lốp không có khuyết tật.
Hai công nghệ thiết yếu được sử dụng để thực hiện điều này: một loại máy học được gọi là học sâu và mạng nơ-ron tích chập (CNN)
Học máy sử dụng mô hình thuật toán để giúp máy tính tự học từ dữ liệu trực quan Khi được cung cấp đủ dữ liệu, máy tính có khả năng "nhìn" vào thông tin và tự rút ra cách phân biệt các hình ảnh khác nhau Các thuật toán này cho phép máy tự học mà không cần lập trình viên can thiệp vào quá trình nhận dạng hình ảnh.
CNN giúp các mô hình học máy và học sâu "nhìn" bằng cách phân chia hình ảnh thành các pixel có nhãn Bằng cách sử dụng các nhãn này, CNN thực hiện các phép tích chập, một loại phép toán giữa hai hàm để tạo ra một hàm mới, từ đó đưa ra dự đoán về nội dung hình ảnh.
Mạng lưới thần kinh thực hiện các phép tích chập và kiểm tra tính chính xác của dự đoán qua nhiều lần lặp Qua quá trình này, các dự đoán dần trở thành hiện thực, cho phép nó nhận biết hình ảnh tương tự như con người.
Giống như con người tạo ra hình ảnh từ xa, CNN phân biệt các cạnh cứng và hình dạng đơn giản trước khi bổ sung thông tin qua các dự đoán lặp lại CNN chủ yếu được sử dụng để hiểu các hình ảnh đơn lẻ, trong khi mạng thần kinh tái phát (RNN) được áp dụng cho các ứng dụng video, giúp máy tính hiểu mối liên hệ giữa các hình ảnh trong một chuỗi khung hình liên quan.
2.1.3 Lịch sử của thị giác máy tính
Trong suốt 60 năm qua, các nhà khoa học và kỹ sư đã nỗ lực phát triển công nghệ cho phép máy móc nhận diện và hiểu dữ liệu hình ảnh Những thí nghiệm đầu tiên trong lĩnh vực này đã được khởi động từ rất sớm, đánh dấu bước tiến quan trọng trong việc cải thiện khả năng xử lý hình ảnh của máy tính.
Năm 1959, các nhà sinh lý học thần kinh đã cho một con mèo xem nhiều hình ảnh để nghiên cứu mối tương quan giữa phản ứng não của nó Họ phát hiện rằng con mèo phản ứng đầu tiên với các cạnh hoặc đường nét cứng, cho thấy rằng quá trình xử lý hình ảnh bắt đầu từ các hình dạng đơn giản như các cạnh thẳng.
Hình 3 Hệ thống máy tính quét ảnh thời kỳ trước
Vào những năm 1960, công nghệ quét hình ảnh máy tính đầu tiên ra đời, cho phép máy tính số hóa và thu thập hình ảnh Một cột mốc quan trọng diễn ra vào năm 1963 khi máy tính có khả năng chuyển đổi hình ảnh hai chiều thành ba chiều Thời kỳ này cũng đánh dấu sự phát triển của trí tuệ nhân tạo (AI) như một lĩnh vực nghiên cứu học thuật, khởi đầu cho những nỗ lực giải quyết các vấn đề về thị giác của con người.
Năm 1974 đánh dấu sự ra đời của công nghệ nhận dạng ký tự quang học (OCR), cho phép nhận diện văn bản in từ bất kỳ phông chữ nào Cùng với đó, nhận dạng ký tự thông minh (ICR) sử dụng mạng lưới thần kinh để giải mã văn bản viết tay Kể từ đó, OCR và ICR đã trở thành công cụ quan trọng trong xử lý tài liệu, hóa đơn, nhận dạng biển số xe, thanh toán di động, chuyển đổi máy và nhiều ứng dụng phổ biến khác.
Vào năm 1982, nhà thần kinh học David Marr đã chứng minh rằng tầm nhìn hoạt động theo thứ bậc và giới thiệu các thuật toán cho máy móc để phát hiện các cạnh, góc, đường cong và hình dạng cơ bản Cùng lúc đó, nhà khoa học máy tính Kunihiko Fukushima phát triển Neocognitron, một mạng lưới tế bào có khả năng nhận dạng mẫu với các lớp tích chập trong mạng nơ-ron Đến năm 2000, nghiên cứu chuyển trọng tâm sang nhận dạng đối tượng, và đến năm 2001, lĩnh vực này tiếp tục phát triển mạnh mẽ.
Tổng quan về nhận diện khuôn mặt
2.2.1 Khái niệm về nhận diện khuôn mặt
Với sự tiến bộ liên tục của khoa học và công nghệ, các thiết bị xử lý ảnh hiện đại ngày càng trở nên phổ biến trong cuộc sống, dẫn đến sự gia tăng thông tin thu được qua hình ảnh Lĩnh vực xử lý ảnh được phát triển mạnh mẽ và ứng dụng rộng rãi trong xã hội hiện đại, không chỉ giới hạn ở việc chỉnh sửa và nâng cao chất lượng hình ảnh Công nghệ xử lý ảnh hiện nay còn cho phép giải quyết các vấn đề như nhận dạng chữ viết, nhận dạng dấu vân tay và đặc biệt là nhận dạng khuôn mặt.
Công nghệ nhận diện khuôn mặt (Facial Recognition Technology) đang trở nên phổ biến tại các quốc gia phát triển, cho phép xác định hoặc xác nhận danh tính cá nhân từ hình ảnh kỹ thuật số hoặc video Phương pháp này dựa vào các điểm đặc trưng trên khuôn mặt để phân biệt giữa các cá nhân, đảm bảo khả năng nhận diện ngay cả trong trường hợp có song sinh Nhờ vào tính năng này, công nghệ không chỉ được áp dụng trong quản lý nhân sự mà còn được nhiều tổ chức trong lĩnh vực an ninh, bảo mật và giao dịch lựa chọn sử dụng.
Nhận diện khuôn mặt (Face recognition) đang được ứng dụng rộng rãi trong nhiều lĩnh vực Hệ thống này cho phép máy tính tự động xác định hoặc nhận diện một cá nhân từ hình ảnh kỹ thuật số hoặc khung hình video, mang lại nhiều tiện ích trong việc quản lý và bảo mật thông tin.
Nhận dạng khuôn mặt là một bài toán khá phức tạp, nó đòi hỏi một loạt các vấn đề cần thực hiện:
- Việc làm đầu tiên đó là cần phải tìm kiếm tất cả những khuôn mặt có trong
- Focus vào từng khuôn mặt chắc chắn có thể nhận ra cùng một người từ các góc nhìn hoặc điều kiện sáng tối khác nhau
- Lựa chọn những feature đặc trưng trên từng khuôn mặt
- So sánh những đặc trưng này với những người khác để có thể biết được định danh của họ
Mỗi khuôn mặt con người đều có khoảng 80 điểm nút, là những điểm lồi lõm tạo nên các đặc điểm riêng biệt Hệ thống nhận diện khuôn mặt xác định những điểm này để phân tích và nhận diện khuôn mặt một cách chính xác.
- Khoảng cách giữa hai mắt
- Độ sâu của hốc mắt
- Hình dạng của xương gò má
- Độ dài của xương hàm
Hình 8 Nhận diện khuôn mặt
Một số thuật toán nhận dạng khuôn mặt hoạt động bằng cách trích xuất các đặc điểm và ranh giới từ hình ảnh khuôn mặt của đối tượng để xác định các đặc điểm khuôn mặt.
Từ đó các thuật toán sẽ trích xuất được các thông tin, và những tính năng này sau đó
Các thuật toán nhận diện khuôn mặt sử dụng để tìm kiếm và phân loại hình ảnh dựa trên các tính năng đặc trưng Để thực hiện việc nhận diện, cần lưu trữ thông tin về khuôn mặt trước đó Quá trình này bao gồm việc đơn giản hóa và nén dữ liệu của các hình ảnh khuôn mặt, chỉ giữ lại những thông tin hữu ích cho nhận dạng Khi cần nhận diện, hình ảnh mẫu sẽ được so sánh với dữ liệu khuôn mặt đã được lưu trữ.
Các thuật toán nhận dạng được phân loại thành hai hướng chính: hướng hình học, tập trung vào các tính năng phân biệt, và hướng trắc quang, sử dụng phương pháp thống kê để chuyển đổi hình ảnh thành các giá trị so sánh với mẫu nhằm giảm thiểu sự chênh lệch.
Các trường hợp nhận diện khuôn mặt thường không diễn ra trong môi trường ổn định, và có thể bị ảnh hưởng bởi yếu tố như ánh sáng kém hoặc góc nghiêng của khuôn mặt, dẫn đến sự giảm sút đáng kể về độ chính xác của kết quả.
2.2.2 Các phương pháp nhận diện
Hiện nay có hai phương pháp nhận diện khuôn mặt được sử dụng rộng rãi nhất là:
- Nhận dạng dựa trên các đặc trưng của các phần tử trên khuôn mặt (Feature based face recognition)
- Nhận dạng dựa trên xét tổng thể khuôn mặt (Appearance based face recognition)
- Ngoài ra còn có một số phương pháp về loại nhận dạng sử dụng mô hình về khuôn mặt:
- Nhận dạng 2D: Elastics Bunch Graph, Active Appearance Model
Ưu điểm, nhược điểm của các phương pháp
2.3.1 Nhận dạng dựa trên các đặc trưng của các phần tử trên khuôn mặt Đây là phương pháp nhận dạng khuôn mặt dựa trên viện xác định các đặc trưng hình học của các chi tiết trên một khuôn mặt (vị trí, diện tích, hình dạng của mắt, mũi, miệng, ) và mối quan hệ giữa chúng (khoảng cách của hai mắt, khoảng cách của hai lông mày, ) Ưu điểm của phương pháp này là nó gần với cách mà con người sử dụng để nhận
Phương pháp xác định đặc tính khuôn mặt có khả năng mang lại kết quả hiệu quả ngay cả trong những bức ảnh có nhiều nhiễu như bị nghiêng, xoay hoặc ánh sáng thay đổi.
Phương pháp này có nhược điểm là cài đặt thuật toán phức tạp, vì việc xác định mối quan hệ giữa các đặc tính gặp khó khăn Hơn nữa, đối với các ảnh có kích thước nhỏ, việc phân biệt các đặc tính cũng trở nên khó khăn hơn.
2.3.2 Nhận dạng dựa trên xét tổng thể khuôn mặt Đây là phương pháp xem mỗi ảnh có kích thước RxC là một vector trong không gian RxC chiều Ta sẽ xây dựng một không gian mới có chiều nhỏ hơn sao chi khi biểu diễ trong không gian có các đặc điểm chính của một khuôn mặt không bị mất đi Trong không gian đó, các ảnh cùng một người sẽ được tập trung lại một nhóm gần nhau và cách xa các nhóm khác Ưu điểm của phương pháp này là tìm được các đặc tính tiêu biểu của đối tượng cần nhận dạng mà không cần phải xác định các thành phần và mối quan hệ giữa các thành phần đó Phương pháp sử dụng thuật toán có thể thực hiện tốt với các ảnh có độ phân giải cao, thu gọn ảnh thành một ảnh có kích thước nhỏ hơn Có thể kết hợp các phương pháp khác như mạng Nơ-ron, Support Vector Machine
Phương pháp phân loại theo chiều phân bố lớn nhất của vector có nhược điểm là không luôn mang lại hiệu quả tối ưu cho bài toán nhận dạng Đặc biệt, phương pháp này rất nhạy cảm với nhiễu, ảnh hưởng đến độ chính xác của kết quả.
Giới thiệu về nhận dạng khuôn mặt và OpenCV
Nhận dạng khuôn mặt là một nhiệm vụ dễ dàng đối với con người, nhờ vào khả năng nhận diện các đặc điểm bên trong như mắt, mũi, miệng và các đặc điểm bên ngoài như đầu, mặt, chân tóc Vấn đề đáng quan tâm là cách mà bộ não con người mã hóa những đặc điểm này để thực hiện quá trình nhận dạng hiệu quả.
David Hubel và Torsten Wiesel đã chỉ ra rằng não người có các tế bào thần kinh chuyên biệt phản ứng với các đặc điểm độc đáo của hình ảnh, như đường thẳng, góc cạnh và chuyển động Bộ não kết hợp thông tin từ nhiều nguồn khác nhau để tạo ra các mẫu hữu ích, giúp chúng ta không nhìn nhận hình ảnh một cách tán xạ Nhận dạng khuôn mặt có thể được định nghĩa đơn giản là quá trình lấy ra các đặc điểm có ý nghĩa từ hình ảnh và chuyển đổi chúng thành một biểu diễn hữu ích để thực hiện phân loại Ý tưởng cốt lõi của nhận dạng khuôn mặt dựa trên các đặc điểm hình học của khuôn mặt, với hệ thống nhận dạng khuôn mặt tự động đầu tiên được mô tả dựa trên vị trí của mắt, tai và mũi, được gọi là vectơ đặc trưng (khoảng cách giữa các điểm).
Nhận dạng khuôn mặt sử dụng khoảng cách Euclid để so sánh các vectơ đặc trưng giữa đầu dò và hình ảnh tham chiếu Phương pháp này hiệu quả trong việc xử lý sự thay đổi độ chiếu sáng, nhưng gặp khó khăn lớn trong việc đăng ký chính xác từ nhà sản xuất.
Hệ thống nhận dạng khuôn mặt có thể hoạt động về cơ bản ở hai chế độ:
Xác thực hình ảnh khuôn mặt là quá trình so sánh hình ảnh khuôn mặt đầu vào với hình ảnh khuôn mặt đã lưu trữ của người dùng để xác minh danh tính Quá trình này thực hiện so sánh 1×1, đảm bảo tính chính xác và độ tin cậy trong việc nhận diện người dùng.
Nhận dạng khuôn mặt là quá trình so sánh hình ảnh khuôn mặt đầu vào với một tập dữ liệu lớn để xác định người dùng tương ứng Quá trình này thực hiện một phép so sánh 1xN, giúp tìm ra người dùng phù hợp nhất với khuôn mặt được cung cấp.
Có nhiều loại thuật toán nhận dạng khuôn mặt, ví dụ:
- Biểu đồ mẫu nhị phân cục bộ (LBPH) (1996)
- Chuyển đổi tính năng bất biến quy mô (SIFT) (1999)
- Tăng tốc các tính năng mạnh mẽ (SURF) (2006)
Thuật toán Biểu đồ mô hình nhị phân cục bộ (LBPH) là một trong những phương pháp phổ biến và lâu đời nhất trong việc trích xuất thông tin hình ảnh và thực hiện đối sánh với hình ảnh đầu vào Mỗi thuật toán có những cách tiếp cận riêng để xử lý và phân tích hình ảnh, và LBPH nổi bật với hiệu quả trong việc nhận diện khuôn mặt và các ứng dụng liên quan.
OpenCV (Thư viện Tầm nhìn Máy tính Mã nguồn Mở) là một thư viện lập trình chuyên biệt cho tầm nhìn máy tính thời gian thực, hỗ trợ nhiều ngôn ngữ như C++, Python, Java và hoạt động trên nhiều nền tảng như Windows, Linux, Mac OS, Android và iOS Thư viện này cũng đang phát triển các giao diện cho các hoạt động GPU tốc độ cao dựa trên CUDA và OpenCL.
Cấu trúc tổng quan của OpenCV bao gồm 5 phần chính 4 trong 5 phần đó được chỉ ra trong hình vẽ dưới
Hình 9 Cấu trúc các phần của OpenCV
Phần CV bao gồm các thư viện cơ bản cho xử lý ảnh và thuật toán thị giác máy tính MLL là bộ thư viện cung cấp nhiều thuật toán học máy, bao gồm các phương pháp phân cụm và phân loại thống kê HighGUI hỗ trợ các thủ tục vào ra và chức năng lưu trữ, đọc file ảnh và video Cxcore chứa các cấu trúc dữ liệu cơ bản như XML và cây dữ liệu Cuối cùng, CvAux hoàn thiện bộ công cụ này.
21 phần này bao gồm các thư viện cho việc phát hiện, theo dõi và nhận dạng đối tượng (khuôn mặt, mắt …)
OpenCV - Python là một thư viện các ràng buộc Python được thiết kế để giải quyết các vấn đề về thị giác máy tính
Python là ngôn ngữ lập trình đa năng do Guido van Rossum phát triển, nhanh chóng trở nên phổ biến nhờ vào sự đơn giản và khả năng đọc hiểu mã Ngôn ngữ này cho phép lập trình viên diễn đạt ý tưởng chỉ trong vài dòng mã mà vẫn giữ được tính dễ hiểu.
So với các ngôn ngữ như C/C++, Python chậm hơn, nhưng có thể mở rộng dễ dàng với C/C++ Điều này cho phép viết mã tính toán chuyên sâu trong C/C++ và tạo các trình bao bọc Python làm mô-đun Lợi ích của việc này là mã chạy nhanh như mã C/C++ gốc và dễ dàng hơn trong Python OpenCV - Python là một trình bao bọc Python cho OpenCV C++ ban đầu.
OpenCV trong Python sử dụng Numpy, một thư viện tối ưu cho các phép toán số với cú pháp tương tự MATLAB Tất cả cấu trúc mảng của OpenCV có thể chuyển đổi qua lại với các mảng Numpy, điều này tạo điều kiện thuận lợi cho việc tích hợp với các thư viện khác như SciPy và Matplotlib.
OpenCV cung cấp công cụ huấn luyện và dò tìm, cho phép bạn đào tạo bộ phân loại cho nhiều đối tượng như ô tô, máy bay và tòa nhà Bộ phân loại hình ảnh hoạt động ở hai trạng thái chính: trạng thái huấn luyện và trạng thái phát hiện.
Thuật toán nhận diện khuôn mặt trong Open CV
2.5.1 Thuật toán xếp tầng HAAR
Tầng HAAR là phương pháp máy học sử dụng một hàm tầng được huấn luyện từ nhiều hình ảnh tích cực (có khuôn mặt) và tiêu cực (không có khuôn mặt) Trong nhận diện khuôn mặt, các đặc điểm hình ảnh được trích xuất và xử lý như thông tin số, giúp phân biệt các hình ảnh khác nhau.
Tôi áp dụng tất cả các tính năng của thuật toán cho từng hình ảnh trong bộ dữ liệu đào tạo, với trọng số ban đầu cho mọi hình ảnh là như nhau Thuật toán sẽ xác định ngưỡng tối ưu để phân loại các mặt thành tích cực và tiêu cực, mặc dù có thể xảy ra sai sót trong quá trình phân loại Tôi lựa chọn các tính năng có tỷ lệ lỗi thấp nhất, đảm bảo rằng đây là những đặc điểm phân loại tốt nhất cho hình ảnh có khuôn mặt và không có khuôn mặt.
Tất cả các kích thước và vị trí có thể có của mỗi nhân được sử dụng để tính toán nhiều tính năng
OpenCV cung cấp hai ứng dụng chính để đào tạo trình phân loại tầng, bao gồm opencv_haartraining và opencv_traincascade, với mỗi ứng dụng lưu trữ bộ phân loại ở định dạng tệp khác nhau Để tiến hành quá trình đào tạo, người dùng cần chuẩn bị một bộ mẫu, trong đó có hai loại mẫu khác nhau.
- Negative sample (Mẫu âm bản): Nó liên quan đến hình ảnh không phải vật thể
- Positive samples (Mẫu dương tính): Là hình ảnh có liên quan với các đối tượng phát hiện
Một tập hợp các mẫu Negative samples cần được chuẩn bị thủ công, trong khi các mẫu Positive samples được tạo ra bằng tiện ích opencv_createsamples.
Mẫu Negative sample được lấy từ hình ảnh ngẫu nhiên và được thêm vào một tệp văn bản Mỗi dòng trong tệp chứa tên tệp hình ảnh liên quan đến thư mục mô tả của mẫu phủ định Tệp này cần được tạo thủ công và các hình ảnh xác định có thể có kích thước khác nhau.
Mẫu Positive được tạo ra bằng tiện ích opencv_createsamples, có thể từ một hình ảnh duy nhất hoặc từ một bộ sưu tập trước đó Để đạt hiệu quả tốt nhất, cần chuẩn bị một tập dữ liệu lớn về các mẫu dương tính trước khi sử dụng tiện ích này, vì nó chỉ thực hiện phép chuyển đổi phối cảnh.
Trong bài viết này, chúng ta sẽ thảo luận về việc phát hiện đối tượng bằng cách sử dụng bộ phân loại Cascade trong OpenCV OpenCV cung cấp nhiều bộ phân loại được đào tạo trước cho các đối tượng như khuôn mặt, mắt và nụ cười, với các tệp XML được lưu trữ trong thư mục opencv/data/haarcascades/ Để bắt đầu, bước đầu tiên là tải các bộ phân loại XML cần thiết và nạp hình ảnh đầu vào (hoặc video) ở chế độ thang độ xám.
Sau khi chuyển đổi hình ảnh sang thang độ xám, chúng ta có thể thực hiện các thao tác như thay đổi kích thước, cắt xén, làm mờ và làm sắc nét hình ảnh Bước tiếp theo là phân đoạn hình ảnh để xác định nhiều đối tượng, giúp bộ phân loại nhanh chóng phát hiện các đối tượng và khuôn mặt trong hình ảnh.
Thuật toán Haar-Like là công cụ hiệu quả để xác định vị trí khuôn mặt trong hình ảnh hoặc video Tất cả các khuôn mặt người đều có những đặc điểm chung, như vùng mắt thường tối hơn so với các pixel xung quanh, trong khi vùng mũi lại sáng hơn vùng mắt.
Trong bước này, tôi trích xuất các tính năng từ hình ảnh bằng cách sử dụng các kỹ thuật như phát hiện cạnh, phát hiện đường và phát hiện trung tâm Sau đó, tôi cung cấp tọa độ của x, y và w.
Hệ thống có khả năng tạo ra một hộp hình chữ nhật để hiển thị vị trí khuôn mặt trong thời gian 24 giờ Nó có thể xác định và tạo hộp trong khu vực mong muốn khi phát hiện khuôn mặt.
Hình 11 Các bước lấy mẫu Positive samples
2.5.2 Thuật toán nhị phân cục bộ (LBPH)
Thuật toán Biểu đồ mô hình nhị phân cục bộ (LBPH) là phương pháp đơn giản để gán nhãn các pixel trong hình ảnh dựa trên vùng lân cận của từng pixel LBPH tóm tắt cấu trúc cục bộ của hình ảnh bằng cách so sánh từng pixel với các pixel xung quanh, từ đó chuyển đổi kết quả thành số nhị phân Được định nghĩa lần đầu tiên vào năm 1994, thuật toán LBP đã trở thành công cụ mạnh mẽ trong việc phân loại kết cấu.
Thuật toán này chủ yếu tập trung vào việc trích xuất các tính năng cục bộ từ hình ảnh, thay vì xem toàn bộ hình ảnh như một vectơ chiều cao Ý tưởng cốt lõi là chỉ chú trọng vào các đặc điểm cục bộ của đối tượng.
Hình 12 Biểu đồ mô hình nhị phân cục bộ (LBPH)
Trong hình ảnh trên, chọn một pixel làm trung tâm và xác định ngưỡng đối tượng Nếu cường độ của pixel trung tâm lớn hơn hoặc bằng cường độ của các pixel xung quanh, nó sẽ được biểu thị bằng 1; ngược lại, nó sẽ được biểu thị bằng 0.
3.2.2.2 Các bước của thuật toán
Chọn các tham số: LBPH chấp nhận bốn tham số:
Bán kính (Radius) đại diện cho khoảng cách xung quanh pixel trung tâm, thường được thiết lập ở mức 1 Bán kính này được sử dụng để tạo ra mẫu nhị phân cục bộ theo hình tròn.
- Neighbors: Số lượng điểm mẫu để xây dựng mẫu nhị phân hình tròn
- Grid X: Số ô theo hướng ngang Càng biểu thị nhiều ô và lưới mịn hơn, thì kích thước của vectơ đặc trưng thu được càng cao
- Grid Y: Số ô theo hướng dọc Càng biểu thị nhiều ô và lưới mịn hơn, thì kích thước của vectơ đặc trưng thu được càng cao
Những thách thức trong nhận diện khuôn mặt
Hệ thống nhận dạng khuôn mặt hiện nay rất quan trọng và đã phát triển đáng kể Nó được ứng dụng rộng rãi trong nhiều lĩnh vực như truy xuất ảnh, giám sát, xác thực và kiểm soát truy cập Tuy nhiên, vẫn tồn tại một số thách thức liên tục trong việc nhận diện hình ảnh và khuôn mặt.
Để phát triển các hệ thống nhận dạng khuôn mặt hiệu quả hơn, cần phải vượt qua nhiều thách thức Một trong những yếu tố quan trọng ảnh hưởng đến khả năng của hệ thống nhận dạng khuôn mặt là sự chiếu sáng.
Ánh sáng đóng vai trò quan trọng trong nhận dạng hình ảnh, vì chỉ một thay đổi nhỏ trong điều kiện ánh sáng cũng có thể ảnh hưởng lớn đến kết quả Sự biến đổi của ánh sáng dẫn đến những khác biệt đáng kể trong việc nhận diện cùng một đối tượng, tùy thuộc vào mức độ ánh sáng cao hay thấp.
Nền của đối tượng là yếu tố quan trọng trong việc nhận diện khuôn mặt, vì hiệu suất nhận diện có thể khác biệt giữa môi trường ngoài trời và trong nhà Sự thay đổi địa điểm ảnh hưởng trực tiếp đến kết quả nhận diện, đặc biệt là khi xem xét các yếu tố như ánh sáng và không gian xung quanh.
Hệ thống nhận dạng khuôn mặt rất nhạy cảm với các biến thể tư thế Sự chuyển
Việc di chuyển đầu hoặc thay đổi vị trí máy ảnh có thể làm biến dạng cấu trúc khuôn mặt, dẫn đến kết quả không chính xác Điều này có thể gây ra sự tắc nghẽn trong việc nhận diện khuôn mặt.
Sự tắc nghẽn khuôn mặt, bao gồm râu, ria mép và các phụ kiện như kính bảo hộ, mũ lưỡi trai, mặt nạ, có thể làm giảm độ chính xác của hệ thống nhận dạng khuôn mặt Biểu thức trên khuôn mặt cũng đóng vai trò quan trọng trong việc xác định danh tính.
Một yếu tố quan trọng cần lưu ý là sự đa dạng trong biểu hiện của cùng một cá nhân Việc thay đổi biểu cảm trên khuôn mặt có thể dẫn đến những kết quả khác nhau cho chính người đó.
Trong bài viết này, chúng ta đã khám phá thư viện OpenCV và những khái niệm cơ bản liên quan Tôi đã trình bày chi tiết các thao tác cơ bản đối với hình ảnh.
Các công cụ hỗ trợ
Hình 16 Công cụ hỗ trợ Visual Studio Code
Visual Studio Code là một trình soạn thảo mã nguồn phổ biến, được ưa chuộng bởi các lập trình viên nhờ vào tốc độ nhanh, tính năng nhẹ và hỗ trợ đa nền tảng Với nhiều tính năng nổi bật và là mã nguồn mở, Visual Studio Code ngày càng trở thành lựa chọn hàng đầu trong cộng đồng lập trình.
Hình 17 Công cụ hỗ trợ Python
Python là một ngôn ngữ lập trình bậc cao phổ biến, thường được sử dụng để phát triển trang web, phần mềm, tự động hóa tác vụ và phân tích dữ liệu Với tính chất đa mục đích, Python cho phép lập trình viên tạo ra nhiều loại chương trình khác nhau mà không bị giới hạn vào một lĩnh vực cụ thể nào.
2.7.3 Các thư viện hỗ trợ
Hình 18 Thư viện hỗ trợ Open CV
OpenCV là một thư viện mã nguồn mở phổ biến cho xử lý hình ảnh và video trong Python, cung cấp nhiều công cụ và chức năng đa dạng Thư viện này hỗ trợ từ các thao tác cơ bản như đọc và ghi hình ảnh đến các nhiệm vụ phức tạp như nhận diện khuôn mặt, theo dõi vật thể và phát triển ứng dụng thị giác máy tính.
Hình 19 Thư viện hỗ trợ TensorFlow và Keras
Keras chạy trên các thư viện máy mã nguồn mở như TensorFlow, Theano hoặc
Bộ công cụ nhận thức (CNTK) là một khung học sâu do Microsoft phát triển, trong khi Theano là thư viện Python nổi bật cho các tác vụ tính toán số nhanh TensorFlow, thư viện toán học biểu tượng phổ biến nhất, được sử dụng để xây dựng mạng nơ-ron và mô hình học sâu với tính năng linh hoạt và khả năng tính toán phân tán.
Các thư viện như Python, C#, C++ và các bộ công cụ học máy độc lập được sử dụng phổ biến trong lĩnh vực học máy Trong số đó, Theano và TensorFlow là hai thư viện mạnh mẽ, mặc dù có thể khó hiểu khi tạo ra mạng nơ-ron.
Keras là một thư viện học sâu đơn giản và hiệu quả, cho phép người dùng dễ dàng xây dựng các mô hình dựa trên TensorFlow hoặc Theano Với cấu trúc tối thiểu, Keras giúp xác định nhanh chóng các mô hình học sâu, trở thành lựa chọn lý tưởng cho các ứng dụng trong lĩnh vực này.
Hình 20 Thư viện hỗ trợ Python Numpy
NumPy (Numeric Python) là một thư viện toán học mạnh mẽ và phổ biến trong Python, cung cấp các hàm số tối ưu giúp xử lý hiệu quả ma trận và mảng Thư viện này đặc biệt hữu ích cho việc làm việc với dữ liệu lớn, cho phép tăng tốc độ xử lý đáng kể.
32 nhiều lần khi chỉ sử dụng Python đơn thuần
Hình 21 Thư viện hỗ trợ Pillow
PIL, viết tắt của Python Image Library, là một thư viện mạnh mẽ hỗ trợ nhiều định dạng hình ảnh khác nhau như PPM, JPEG, TIFF, GIF, PNG và BMP.
Nó có thể giúp bạn thực hiện một số thao tác trên hình ảnh như xoay, thay đổi kích thước, cắt xén, chia tỷ lệ màu xám, v.v
Hình 22 Thư viện hỗ trợ Python PyQt5
PyQt5 là thư viện Python mạnh mẽ để phát triển ứng dụng đồ họa giao diện người dùng (GUI), cung cấp các công cụ và thành phần cần thiết để tạo giao diện đẹp mắt và linh hoạt trên cả máy tính và di động Được xây dựng trên nền tảng của Qt, một framework phổ biến cho phát triển ứng dụng đa nền tảng, PyQt5 cho phép lập trình viên dễ dàng tương tác với các thành phần GUI của Qt thông qua các lớp và phương thức Python, từ đó tạo ra các ứng dụng GUI chất lượng cao trên nhiều hệ điều hành khác nhau.
PHÂN TÍCH VÀ XÂY DỰNG HỆ THỐNG
Phân tích thuật toán
Hệ thống điểm danh tự động gồm các bước sau:
- Thu thập bộ dữ liệu khuôn mặt (dataset)
- Load ảnh nhận dạng chuyển BGR sang RGB
- Xác định vị trí khuôn mặt
- Mã hóa các điểm trên khuôn mặt
- Sau đó làm tương tự với ảnh muốn kiểm tra
- So sánh encode ảnh dataset với encode ảnh muốn kiểm tra
- Nhận dạng khuôn mặt (face recognition)
- Xử lý thông tin khuôn mặt vừa nhận dạng và tiến hành điểm danh
Hình 23 Sơ đồ quy trình phân tích hệ thống
3.1.1 Thu thập bộ dữ liệu khuôn mặt
Hệ thống thu thập hình ảnh dữ liệu khuôn mặt sử dụng webcam máy tính hoặc từ nhiều nguồn khác Các bức ảnh cần đảm bảo điều kiện ánh sáng tốt, có nhiều góc độ khác nhau của khuôn mặt và phù hợp với độ tuổi Đặc biệt, khuôn mặt không nên có vật cản như kính để đảm bảo chất lượng dữ liệu thu thập.
Để đảm bảo độ chính xác cho hệ thống, cần thu thập một số lượng ảnh nhất định cho mỗi người dùng, và mỗi bức ảnh chỉ nên chứa một khuôn mặt duy nhất.
3.1.2 Load ảnh chuyển BGR sang RGB
Để đảm bảo tính tương thích với nhiều thư viện xử lý ảnh như Matplotlib, việc chuyển đổi sang không gian màu RGB là rất quan trọng Điều này giúp hiển thị hình ảnh một cách chính xác và hiệu quả.
RGB là không gian màu phổ biến nhất trong các ứng dụng và thiết bị hiển thị, giúp đảm bảo tính nhất quán với các tiêu chuẩn ngành khi làm việc với dữ liệu ảnh.
Chuyển đổi hình ảnh sang không gian màu RGB trước khi xử lý và phân tích có thể nâng cao hiệu suất và chất lượng của các thuật toán xử lý ảnh Nhiều thuật toán hoạt động hiệu quả hơn trong không gian màu này, do đó việc áp dụng RGB là một bước quan trọng trong quy trình phân tích.
Hiểu cấu trúc màu là điều quan trọng khi chuyển đổi từ BGR sang RGB Trong không gian màu RGB, mỗi pixel được biểu diễn bằng một bộ ba (R, G, B), trong đó mỗi giá trị thể hiện độ sáng của từng kênh màu.
3.1.3 Xác định vị trí khuôn mặt
Hình ảnh đầu vào có thể chứa nhiều khuôn mặt với sự khác biệt về ánh sáng, góc độ và biểu cảm Do đó, cần xác định vị trí các đặc điểm như mắt, mũi, miệng để kiểm tra tính hợp lệ của khuôn mặt.
3.1.4 Mã hóa các điểm trên khuôn mặt
Mã hóa các điểm trên khuôn mặt là quá trình chuyển đổi các điểm đặc trưng thành giá trị số hoặc vector, cho phép nhận dạng và so sánh khuôn mặt, cũng như tạo ra biểu đồ 3D của khuôn mặt.
Hình 24 Mã hóa khuôn mặt
3.1.5 Trích xuất và endcoing và so sánh với các khuôn mặt trong dataset
Sau khi mã hóa khuôn mặt, hệ thống sẽ tiến hành so sánh với bộ dữ liệu các đặc trưng đã có
Sau khi so sánh sẽ tìm ra người có mã encoding tương đầu với encoding ở đầu vào với mức độ tương ứng cao nhất
3.1.7 Xác định các khuôn mặt “unknown”
Nếu không có mã encoding nào tương ứng thì sẽ in ra unknown hay còn gọi là chưa nhận diện được người này
Sau khi nhận diện thành công khuôn mặt của sinh viên và loại bỏ các khuôn mặt lạ, hệ thống sẽ sử dụng định danh khuôn mặt để thực hiện điểm danh dựa trên danh sách sinh viên trong cơ sở dữ liệu.
Kết qủa thử nghiệm hệ thống
3.2.1.1 Kết nối cơ sở dữ liệu mydb = mysql.connector.connect( host="localhost", user="root", password="",
Phương thức `mysql.connector.connect()` được sử dụng để thiết lập kết nối với cơ sở dữ liệu MySQL, yêu cầu các thông số như: `host` (địa chỉ hoặc tên máy chủ MySQL, thường là "localhost" khi cơ sở dữ liệu chạy trên cùng một máy tính), `user` (tên người dùng để truy cập, thường là "root"), và `password` (mật khẩu của người dùng để truy cập cơ sở dữ liệu MySQL).
Trong trường hợp này, mật khẩu được để trống, có nghĩa là không cần mật khẩu Tên cơ sở dữ liệu mà bạn muốn kết nối trong trường hợp này là
Sau khi kết nối thành công, đối tượng kết nối sẽ được gán cho biến mydb, cho phép thực hiện các truy vấn SQL và tương tác với cơ sở dữ liệu.
3.2.1.2 Load dữ liệu từ database def load_trained_data_from_db(): known_face_names = [] known_face_encodings = [] mycursor.execute("SELECT ma_sv, encoding FROM data_set") records = mycursor.fetchall() if records: for row in records: name, encoding_str = row encoding = np.array(list(map(float, encoding_str.split()))) known_face_names.append(name) known_face_encodings.append(encoding) return known_face_names, known_face_encodings else: return False
Hàm load_trained_data_from_db có nhiệm vụ truy vấn dữ liệu huấn luyện từ cơ sở dữ liệu và trả về danh sách tên cùng encoding của khuôn mặt Các biến known_face_names và known_face_encodings được khởi tạo để lưu trữ thông tin này Một truy vấn SQL được thực hiện để lấy dữ liệu từ bảng data_set, và kết quả được lưu vào biến records Từ mỗi hàng kết quả, tên và chuỗi encoding được trích xuất riêng biệt Chuỗi encoding sau đó được phân tách thành danh sách các chuỗi con, chuyển đổi thành số thực và cuối cùng là một mảng numpy Tên khuôn mặt và encoding tương ứng được thêm vào known_face_names và known_face_encodings.
The function `draw_result` takes a filename, face locations, and face encodings as inputs It opens the image specified by the filename and prepares to draw on it Using the Arial font at a size of 20, the function iterates through the provided face locations and encodings For each face, it calculates the distances to known face encodings and identifies the best match by finding the index of the minimum distance.
Hàm draw_result có chức năng vẽ kết quả nhận dạng khuôn mặt lên ảnh đã cho Dưới đây là phân tích từng phần của hàm này:
Mở ảnh từ tệp bằng thư viện Pillow và lưu vào biến img bằng câu lệnh: img = Image.open(filename) Sau đó, tạo đối tượng vẽ cho ảnh bằng cách sử dụng: draw = ImageDraw.Draw(img).
Một đối tượng ImageDraw được tạo để vẽ lên ảnh
Chuẩn bị font chữ: font = ImageFont.truetype("arial.ttf", 20): Font chữ Arial với kích thước 20 được sử dụng để viết tên và phần trăm nhận dạng lên ảnh
The loop iterates through each recognized face by pairing the face locations with their corresponding encodings This process combines the values from face_locations, which indicate the position of the face, with face_encodings, which represent the unique encoding of each face.
To identify the closest face, the code calculates the distances between the current face encoding and all known face encodings using the function `face_recognition.face_distance(known_face_encodings, face_encoding)` It then determines the index of the closest match by finding the minimum distance with `np.argmin(face_distances)` Finally, it stores the smallest distance between the current face and the closest known face for further analysis.
Nếu khoảng cách tốt nhất nhỏ hơn 0.465, hãy kiểm tra xem khoảng cách nhỏ nhất có thấp hơn ngưỡng đã được xác định hay không Ngưỡng này được chọn tùy ý.
Nếu có, vẽ một hình chữ nhật xung quanh khuôn mặt và hiển thị tên của người được nhận dạng cùng với phần trăm nhận dạng
Nếu không, hiển thị "Unknown" màu đỏ trên ảnh
Hiển thị ảnh: img.show(): Hiển thị ảnh đã được chỉnh sửa lên màn hình
Hàm này thực hiện quá trình vẽ kết quả nhận dạng lên ảnh và hiển thị nó ra màn hình cho người dùng xem
3.2.1.3 Tính phần trăm nhận dạng
# Tính phần trăm nhận dạng percentage_match = (1.0 - best_match_distance) * 100 if best_match_distance < 0.465: best_match_name = known_face_names[best_match_index]
39 draw.rectangle(((left, top), (right, bottom)), outline=(0, 0,
255), width=2) draw.text((left, top - 30), f"{best_match_name}
({percentage_match:.2f}%)", fill=(0, 0, 255), font=font) else: best_match_name = "Unknown" draw.rectangle(((left, top), (right, bottom)), outline=(255, 0,
0), width=2) draw.text((left, top - 30), f"{best_match_name}", fill=(255, 0,
Trong đoạn code, biến percentage_match hiển thị tỷ lệ khớp giữa khuôn mặt được nhận diện và khuôn mặt gần nhất trong ảnh Điều kiện if best_match_distance < 0.465 kiểm tra khoảng cách giữa khuôn mặt hiện tại và khuôn mặt gần nhất, và nếu khoảng cách này nhỏ hơn 0.465, nó được coi là một sự nhận diện thành công.
Khi nhận dạng thành công, tên của người được nhận dạng cùng với phần trăm khớp sẽ được hiển thị trên ảnh Tên sẽ được hiển thị bằng màu xanh dương và được bao quanh bởi một hình chữ nhật quanh khuôn mặt.
Nếu khoảng cách vượt quá ngưỡng xác định, khuôn mặt sẽ được hiển thị là "Unknown" với màu đỏ trong ảnh Điều này giúp người dùng dễ dàng nhận biết kết quả nhận dạng khuôn mặt và cung cấp thông tin về độ chính xác của quá trình này.
3.2.1.4 Bật webcam và nhận diện def detect_from_webcam(): cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() face_locations = face_recognition.face_locations(frame) face_encodings = face_recognition.face_encodings(frame, face_locations) if len(face_locations) > 0:
40 draw_result(frame, face_locations, face_encodings, recognized_counts) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
Hàm detect_from_webcam() là hàm chính dùng để mở webcam và phát hiện khuôn mặt từ hình ảnh chụp Để kết nối với webcam, dòng lệnh cap = cv2.VideoCapture(0) được sử dụng, trong đó tham số 0 đại diện cho chỉ số của webcam Nếu có nhiều webcam, bạn có thể thay đổi chỉ số này để chọn webcam cụ thể.