Tính năng này có thể được ứng dụng trong hệ thống nhận dạng khuôn mặt, theo dõi đối tượng trong video, hay thậm chí là để tạo ra các hiệu ứng ảnh độc đáo.. Thông thường, thuật ngữ “trí t
TỔNG QUAN VỀ ĐỀ TÀI
Lý do chọn đề tài
Trong lĩnh vực khoa học, trí tuệ nhân tạo (AI) hay còn gọi là trí thông minh nhân tạo, là khả năng thể hiện trí thông minh qua máy móc, khác với trí thông minh tự nhiên của con người Thuật ngữ này thường được sử dụng để mô tả các hệ thống và công nghệ có khả năng học hỏi, suy luận và thực hiện các nhiệm vụ tương tự như con người.
Trí tuệ nhân tạo (AI) đề cập đến các máy móc hoặc máy tính có khả năng mô phỏng các chức năng nhận thức của con người, tương tự như những gì chúng ta liên kết với hoạt động của tâm trí con người.
“học tập” và “giải quyết vấn đề”
Thị giác máy tính được xem là một trong những lĩnh vực thuộc trí tuệ nhân tạo (AI) và mang lại những ứng dụng hiện đại tuyệt vời
Hệ thống phát hiện vị trí khuôn mặt trong ảnh và video là một thách thức thú vị, đòi hỏi sự kết hợp giữa thị giác máy tính và học máy Khả năng này không chỉ phức tạp mà còn cần nhận diện các đặc điểm riêng biệt của gương mặt con người.
Em đã chọn đề tài "Xây dựng chương trình Dò Tìm Vị Trí Khuôn Mặt Trong Ảnh, Video Và Làm Mờ" nhằm phát triển hệ thống nhận dạng khuôn mặt qua hình ảnh và video Đây là một thách thức thú vị và quan trọng trong lĩnh vực thị giác máy tính và trí tuệ nhân tạo.
Mục tiêu đề tài
Phát triển một hệ thống tự động có khả năng phát hiện và nhận dạng vị trí của khuôn mặt trong ảnh và video
Tối ưu hóa hiệu suất của chương trình để có thể xử lý ảnh và video trong thời gian thực hoặc gần thời gian thực
Phát triển tính năng làm mờ khuôn mặt, có thể dùng cho mục đích bảo vệ quyền riêng tư hoặc ẩn danh trong ảnh và video.
Đối tượng và phạm vi nghiên cứu
▪ Hệ thống máy tính, đặc biệt là các thuật toán và phương pháp máy học và thị giác máy tính
▪ Khuôn mặt con người trong các hình ảnh và video
▪ Công nghệ xử lý ảnh và video, bao gồm các phương pháp nhận dạng khuôn mặt và làm mờ
▪ Phát triển và tối ưu hóa các thuật toán và mô hình máy học để phát hiện và nhận dạng vị trí của khuôn mặt trong ảnh và video
▪ Nghiên cứu các kỹ thuật xử lý ảnh và video để làm mờ khuôn mặt một cách hiệu quả, bảo vệ quyền riêng tư hoặc ẩn danh
▪ Nghiên cứu về hiệu suất, độ chính xác và tính ứng dụng của chương trình trong các tình huống thực tế khác nhau.
Ý nghĩa của đề tài
Chương trình an ninh và giám sát cho phép tự động phát hiện và theo dõi cá nhân thông qua các camera ẩn hoặc camera công cộng, nâng cao hiệu quả của hệ thống giám sát an ninh.
Bảo mật dữ liệu cá nhân là rất quan trọng, và chương trình làm mờ khuôn mặt có thể giúp bảo vệ quyền riêng tư của người dùng khi họ chia sẻ ảnh hoặc video trực tuyến.
Bố cục báo cáo
Bố cục báo cáo gồm 7 phần:
▪ Phần 1: Giới thiệu về đề tài
▪ Phần 2: Giới thiệu bài toán
▪ Phần 3: Giải bài toán nhận dạng khuôn mặt với thư viện Face Recognition
▪ Phần 4: Cài đặt và thử nghiệm hệ thống
GIỚI THIỆU BÀI TOÁN
Tổng quan về thị giác máy tính và nhận dạng khuôn mặt
2.1.1 Tổng quan thị giác máy tính
Thị giác máy tính là một lĩnh vực khoa học liên ngành nghiên cứu cách mà máy tính có thể hiểu và phân tích hình ảnh hoặc video kỹ thuật số Mục tiêu của nó là tự động hóa các nhiệm vụ mà hệ thống thị giác của con người có khả năng thực hiện, từ đó nâng cao khả năng nhận thức và xử lý thông tin của máy móc.
Các nhiệm vụ thị giác máy tính bao gồm thu thập, xử lý, phân tích và hiểu hình ảnh kỹ thuật số, cũng như trích xuất dữ liệu chiều cao từ thế giới thực để tạo ra thông tin số hoặc biểu tượng Hiểu biết trong ngữ cảnh này là quá trình chuyển đổi hình ảnh trực quan thành các mô tả có ý nghĩa, hỗ trợ cho các quá trình suy nghĩ và gợi ra hành động phù hợp Sự hiểu biết này cho phép tách rời thông tin biểu tượng từ dữ liệu hình ảnh thông qua các mô hình được xây dựng dựa trên hình học, vật lý, thống kê và lý thuyết học tập.
Ngành khoa học thị giác máy tính nghiên cứu lý thuyết về các hệ thống nhân tạo nhằm trích xuất thông tin từ hình ảnh Dữ liệu hình ảnh có thể ở nhiều dạng khác nhau, bao gồm video, hình ảnh từ nhiều camera, dữ liệu 3D hoặc thông tin từ thiết bị quét y tế Mục tiêu của công nghệ thị giác máy tính là áp dụng các lý thuyết và mô hình này để phát triển các hệ thống thị giác máy tính hiệu quả.
Các lĩnh vực phụ của thị giác máy tính bao gồm tái tạo cảnh, phát hiện đối tượng, theo dõi video, và nhận dạng đối tượng Ngoài ra, các lĩnh vực này còn bao gồm ước tính tư thế 3D, học tập, lập chỉ mục, ước tính chuyển động, hỗ trợ trực quan, tạo mô hình cảnh 3D và phục hồi hình ảnh.
Hình 2.1 Thị giác máy tính (Computer vision)
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 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, đánh dấu bước khởi đầu cho sự tiến bộ trong nhận diện hình ảnh.
Năm 1959, các nhà sinh lý học thần kinh đã tiến hành thí nghiệm với một con mèo để nghiên cứu phản ứng của não đối với hình ảnh Họ phát hiện rằng con mèo phản ứng đầu tiên với các cạnh và đườ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 2.2 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 được phát triển, cho phép số hóa và thu nhận hình ảnh, đánh dấu một cột mốc quan trọng khi máy tính có khả năng chuyển đổi hình ảnh hai chiều thành ba chiều vào năm 1963 Đồng thời, trí tuệ nhân tạo (AI) cũng bắt đầu nổi lên như một lĩnh vực nghiên cứu học thuật, khởi đầu cho các nhiệm vụ AI nhằm giải quyết vấn đề thị giác của con người.
Năm 1974, công nghệ nhận dạng ký tự quang học (OCR) ra đời, cho phép nhận diện văn bản in ở mọi phông chữ Đồng thờ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 đã được áp dụng rộng rãi trong xử lý tài liệu, hóa đơn, nhận diện 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.
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 thời điểm, nhà khoa học Kunihiko Fukushima phát triển mạng lưới tế bào Neocognitron có khả năng nhận dạng mẫu Đến năm 2000, nghiên cứu tập trung vào nhận dạng đối tượng, và năm 2001, ứng dụng nhận diện khuôn mặt theo thời gian thực đầu tiên xuất hiện Tiêu chuẩn hóa gắn thẻ và chú thích dữ liệu hình ảnh đã bắt đầu từ những năm 2000, và năm 2010, bộ dữ liệu ImageNet ra đời với hàng triệu hình ảnh được gắn thẻ Năm 2012, nhóm từ Đại học Toronto đã giới thiệu mô hình CNN AlexNet trong một cuộc thi nhận dạng hình ảnh, giúp giảm đáng kể tỷ lệ lỗi xuống chỉ còn vài phần trăm.
Thị giác máy tính hoạt động như thế nào?
Hình 2.3 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 bao gồm việc chạy nhiều lần để phân biệt các đặc điểm khác nhau Chẳng hạn, để huấn luyện máy tính nhận dạng lốp ô tô, cần cung cấp nhiều hình ảnh lốp và các thông tin liên quan, giúp máy tính hiểu và nhận diện các loại 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 các 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 các hình ảnh và tự dạy mình cách phân biệt chúng 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 cụ thể để nhận dạng hình ảnh.
CNN giúp mô hình học máy "nhìn" bằng cách phân chia hình ảnh thành các pixel có nhãn Nó sử dụng các nhãn này để thực hiện các phép tích chập, từ đó đưa ra dự đoán về nội dung hình ảnh Mạng lưới thần kinh tiến hành các phép tích chập và kiểm tra độ chính xác của dự đoán qua nhiều lần lặp, cho đến khi đạt được kết quả tối ưu.
8 trở thành hiện thực Sau đó nó nhận biết hoặc nhìn thấy hình ảnh theo cách tương tự như con người
Giống như con người xây dựng 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 hoàn thiện thông tin qua các lần dự đoán lặp lại CNN chủ yếu được sử dụng để phân tích hình ảnh đơn lẻ, trong khi mạng thần kinh tái phát (RNN) hỗ trợ trong việc hiểu các khung hình liên tiếp trong video Ứng dụng của công nghệ thị giác máy tính ngày càng trở nên đa dạng và quan trọng.
Thị giác máy tính đang được nghiên cứu rộng rãi và có nhiều ứng dụng thực tiễn quan trọng Nó đóng vai trò thiết yếu trong các lĩnh vực như kinh doanh, giải trí, giao thông vận tải, chăm sóc sức khỏe và cuộc sống hàng ngày.
Ứng dụng của thị giác máy tính đang phát triển mạnh mẽ nhờ vào lượng dữ liệu hình ảnh khổng lồ từ điện thoại thông minh, hệ thống an ninh, camera giao thông và các thiết bị đo trực quan khác Mặc dù dữ liệu này có thể đóng vai trò quan trọng trong nhiều ngành, nhưng hiện tại vẫn chưa được khai thác triệt để Thông tin này tạo nền tảng cho việc huấn luyện các ứng dụng thị giác máy tính, giúp chúng trở thành một phần thiết yếu trong nhiều hoạt động của con người.
Tổng quan về thuật toán Gaussian Blur
2.2.1 Khái niệm thuật toán Gaussian Blur
Gaussian Blur là một kỹ thuật nổi bật trong xử lý ảnh và thị giác máy tính, giúp làm mờ hoặc làm trơn ảnh Kỹ thuật này hoạt động bằng cách áp dụng bộ lọc Gaussian lên từng điểm ảnh trong ảnh đầu vào.
Bộ lọc Gaussian là một công cụ phi tuyến tính dùng để làm mờ ảnh, dựa trên hàm Gaussian có hình dạng chuông và phân phối xác suất Gauss Khi áp dụng bộ lọc này, các điểm ảnh gần nhau tương tác với nhau, tạo ra hiệu ứng làm mờ mượt mà cho hình ảnh.
Gaussian Blur là một kỹ thuật quan trọng trong xử lý ảnh, được áp dụng rộng rãi để giảm nhiễu, làm mịn bề mặt, tạo hiệu ứng mờ, thiết kế nền và trích xuất đặc trưng.
Gaussian Blur giúp giảm nhiễu và loại bỏ chi tiết không mong muốn trong ảnh, tạo hiệu ứng mờ mịn và cảm giác mềm mại, đồng thời tăng khả năng trích xuất các đặc trưng quan trọng Để thực hiện Gaussian Blur trong OpenCV, bạn có thể sử dụng hàm GaussianBlur, nhận vào ảnh đầu vào cùng với các tham số như kích thước bộ lọc và độ đơn điệu của Gaussian, cho ra kết quả là ảnh đã được làm mờ.
Khi sử dụng Gaussian Blur, việc tăng kích thước bộ lọc sẽ làm tăng độ mờ của ảnh, nhưng cũng có thể làm mất đi các chi tiết và đặc trưng của ảnh gốc Do đó, cần cân nhắc kỹ lưỡng kích thước và độ đơn điệu của bộ lọc để đạt được hiệu quả mong muốn.
Gaussian Blur là một công cụ quan trọng trong xử lý ảnh, được ứng dụng rộng rãi trong nhiều lĩnh vực như y tế, nhận dạng khuôn mặt, nghệ thuật và phân tích ảnh.
2.2.2 Các kỹ thuật trong hàm Gaussian Blur
Kỹ thuật làm mờ hình ảnh sử dụng bộ lọc hộp (chuẩn hóa) để tính toán giá trị trung bình của các pixel trong vùng nhân, thay thế phần tử trung tâm bằng giá trị trung bình đó OpenCV hỗ trợ thao tác này thông qua các hàm cv2.blur() và cv2.boxFilter() Để thực hiện, cần xác định chiều rộng và chiều cao của hạt nhân, với cú pháp của hàm cv2.blur() được cung cấp rõ ràng.
▪ src – Nó đại diện cho hình ảnh nguồn (đầu vào)
▪ dst – Nó đại diện cho hình ảnh đích (đầu ra)
▪ ksize – Nó đại diện cho kích thước của hạt nhân
▪ anchor – Nó biểu thị các điểm neo
▪ borderType – Nó đại diện cho kiểu đường viền được sử dụng cho đầu ra
Hoạt động làm mờ trung vị tương tự như làm mờ Gaussian và được thực hiện thông qua hàm medianblur() trong OpenCV Hàm này thay thế giá trị của pixel trung tâm trong vùng nhân bằng giá trị trung bình của tất cả các pixel trong khu vực đó, mang lại hiệu quả cao trong việc xử lý nhiễu muối và giấy trong hình ảnh Kích thước hạt nhân cần phải là một số nguyên dương lẻ.
▪ src- Nó đại diện cho nguồn (hình ảnh đầu vào)
▪ dst – Nó đại diện cho điểm đến (hình ảnh đầu ra)
▪ ksize – Nó đại diện cho kích thước của hạt nhân
Làm mịn hình ảnh là kỹ thuật giảm nhiễu hiệu quả, giúp cải thiện chất lượng hình ảnh bằng cách loại bỏ nội dung tần số cao như nhiễu và cạnh Hình ảnh có thể bị nhiễu do cảm biến máy ảnh, dẫn đến việc các cạnh trở nên mờ hơn Để thực hiện quá trình này, OpenCV cung cấp hàm gaussianblur(), cho phép người dùng áp dụng kỹ thuật làm mịn một cách dễ dàng.
▪ src -Nó được sử dụng để nhập một Hình ảnh
▪ dst -Nó là một biến lưu trữ Hình ảnh đầu ra
Kích thước kernel Gaussian được định nghĩa bởi tham số ksize, bao gồm chiều rộng và chiều cao Cả hai giá trị này phải là số lẻ (1, 3, 5,…) và có thể khác nhau Nếu ksize được thiết lập là [0, 0], kích thước kernel sẽ được tính dựa trên giá trị sigma.
▪ sigmaX – Dẫn xuất tiêu chuẩn hạt nhân dọc theo trục X (hướng nằm ngang)
SigmaY là dẫn xuất tiêu chuẩn hạt nhân theo hướng dọc (trục Y), và nếu sigmaY bằng 0, giá trị sigmaX sẽ được sử dụng cho sigmaY BorderType là các ranh giới hình ảnh được xác định khi áp dụng hạt nhân trên các đường viền hình ảnh, với nhiều loại đường viền khác nhau có thể được sử dụng.
2.2.3 Ứng dụng của Gaussian Blur trong xử lý ảnh
Gaussian Blur có nhiều ứng dụng trong xử lý ảnh Dưới đây là một số ứng dụng phổ biến của Gaussian Blur:
Giảm nhiễu trong ảnh có thể được thực hiện hiệu quả thông qua việc sử dụng Gaussian Blur Bộ lọc Gaussian giúp làm mờ các điểm ảnh bị nhiễu và loại bỏ các chi tiết không mong muốn, từ đó nâng cao chất lượng ảnh.
Làm trơn ảnh bằng bộ lọc Gaussian Blur là một phương pháp hiệu quả giúp làm mờ các đường viền và chi tiết nhỏ, tạo ra hiệu ứng mềm mại và mịn màng cho hình ảnh.
Gaussian Blur là một công cụ hiệu quả để tạo hiệu ứng mờ trong ảnh, giúp tạo ra những tác phẩm nghệ thuật hoặc làm mờ các thông tin nhạy cảm và nội dung không mong muốn Ngoài ra, việc áp dụng Gaussian Blur còn hỗ trợ trong việc trích xuất các đặc trưng quan trọng từ ảnh, bằng cách làm mờ những vùng không quan trọng và loại bỏ chi tiết thừa, giúp tập trung vào các đặc trưng nổi bật hơn.
Sử dụng Gaussian Blur để tạo ảnh nền mang lại hiệu ứng mờ nhẹ nhàng cho trang web, ứng dụng di động và thiết kế đồ họa Kỹ thuật này giúp làm nổi bật nội dung chính của giao diện, tạo sự tập trung cho người dùng.
GIẢI BÀI TOÁN NHẬN DẠNG KHUÔN MẶT VỚI THƯ VIỆN
Một số phương pháp phát hiện khuôn mặt
Tính năng phát hiện khuôn mặt giúp máy tính xác định chính xác khuôn mặt con người và nhận diện các đặc điểm liên quan trong hình ảnh hoặc video Tuy nhiên, việc này có thể gặp khó khăn do sự thay đổi biểu cảm, góc nhìn, điều kiện ánh sáng, cũng như các vật cản như khẩu trang và kính.
Với một bộ dữ liệu đào tạo đầy đủ, bao gồm tất cả các tình huống có thể xảy ra, chúng ta có thể phát triển một hệ thống dò tìm khuôn mặt mạnh mẽ.
Trong suốt nhiều năm, các nhà nghiên cứu và lập trình viên đã phát triển nhiều thuật toán khác nhau nhằm nhận diện khuôn mặt một cách hiệu quả.
Và dưới đây là năm phương pháp phổ biến, dễ dàng và hiệu quả nhất trong việc phát hiện khuôn mặt:
▪ Phát hiện khuôn mặt với OpenCV Haar Cascade
▪ Phát hiện khuôn mặt với Dlib HoG
▪ Phát hiện khuôn mặt với OpenCV Deep Learning
▪ Phát hiện khuôn mặt với Dlib Deep Learning
▪ Phát hiện khuôn mặt với Mediapipe Deep Learning
3.1.1 Phát hiện khuôn mặt với OpenCV Haar Cascade
Phương pháp phát hiện khuôn mặt được giới thiệu vào năm 2001 và vẫn giữ vị trí là thuật toán tiên tiến nhất trong nhiều năm qua OpenCV không chỉ cung cấp bộ dò tìm khuôn mặt mà còn có các bộ dò tìm khác như mắt và nụ cười, tất cả đều sử dụng kỹ thuật haar cascade.
Cách thức hoạt động của OpenCV Haar Cascade
Để bắt đầu quá trình nhận diện đối tượng, bước đầu tiên là tạo một bộ dữ liệu huấn luyện bao gồm các hình ảnh minh họa cho các đối tượng cần nhận diện Chẳng hạn, nếu mục tiêu là nhận diện khuôn mặt, bộ dữ liệu này sẽ cần chứa nhiều hình ảnh khác nhau của khuôn mặt.
▪ Huấn luyện Haar Cascade Classifier: Bước này bao gồm việc sử dụng bộ dữ liệu huấn luyện để huấn luyện một bộ phân loại Haar Cascade Trong quá trình
Vào ngày 24, thuật toán sẽ được huấn luyện để phân biệt các đặc điểm của đối tượng cần nhận diện so với các phần khác trong hình ảnh Quá trình này yêu cầu thời gian và một khối lượng lớn dữ liệu huấn luyện để đạt được hiệu quả tốt nhất.
Bộ phân loại Haar Cascade, sau khi được huấn luyện, có khả năng nhận diện đối tượng trong hình ảnh Nó quét qua từng phần của hình ảnh và so sánh các đặc điểm với những gì đã học được Khi phát hiện sự tương đồng đủ lớn, bộ phân loại sẽ xác định rằng đối tượng đã được tìm thấy.
Sau khi nhận diện đối tượng, bộ phân loại sẽ xác định vị trí của đối tượng trong hình ảnh, cung cấp tọa độ của hình chữ nhật bao quanh OpenCV Haar Cascade có những ưu điểm và nhược điểm riêng, giúp người dùng hiểu rõ hơn về hiệu quả và hạn chế của phương pháp này trong việc nhận diện đối tượng.
Thời gian để thuật toán thực hiện phát hiện khá ấn tượng, vì vậy, nó có thể hoạt động trong thời gian thực trên CPU
Mặc dù Haar Cascade không phải là phương pháp nhận diện đối tượng tiên tiến nhất, nhưng nó vẫn cung cấp hiệu suất ổn định cho các ứng dụng đơn giản và yêu cầu hiệu suất vừa phải.
Việc áp dụng Haar Cascade trong OpenCV mang lại sự dễ dàng và tiện lợi cho người dùng OpenCV cung cấp đầy đủ công cụ và API cần thiết để huấn luyện mô hình Haar Cascade, cũng như hỗ trợ nhận diện đối tượng trong thời gian thực một cách hiệu quả.
Một nhược điểm lớn của thuật toán này là nó không hoạt động trên các khuôn mặt không chính diện và bị che khuất
Huấn luyện một mô hình Haar Cascade đòi hỏi một bộ dữ liệu huấn luyện phong phú và đa dạng, bao gồm hình ảnh có đối tượng và hình ảnh không có đối tượng Quá trình này thường tốn nhiều thời gian và tài nguyên.
Khi sử dụng các mô hình Haar Cascade phức tạp với nhiều tầng và đặc trưng, yêu cầu tính toán sẽ tăng đáng kể, dẫn đến việc giảm hiệu suất và tốc độ nhận diện.
3.1.2 Phát hiện khuôn mặt với Dlib HoG
Phương pháp này dựa trên HoG (Histogram of Oriented Gradients) và SVM
(Support Vector Machine) và chính xác hơn đáng kể so với kỹ thuật phát hiện với
OpenCV Haar Cascade là một kỹ thuật nhận diện hình ảnh, nhưng không hoàn toàn ổn định trước những thay đổi về góc mặt Để cải thiện độ chính xác, phương pháp này áp dụng năm bộ lọc HOG khác nhau.
▪ Mặt trước nhưng xoay phải
▪ Mặt trước nhưng xoay trái
Vì vậy, nó cũng có thể hoạt động trên các khuôn mặt hơi lệch và xoay
Cách thức hoạt động của Dlib HoG
Để bắt đầu quá trình nhận diện đối tượng, bước đầu tiên là tạo và chuẩn bị dữ liệu huấn luyện bằng cách thu thập một bộ dữ liệu lớn với nhiều ví dụ Chẳng hạn, nếu mục tiêu là nhận diện khuôn mặt, bộ dữ liệu cần bao gồm nhiều hình ảnh khác nhau của khuôn mặt Quan trọng là dữ liệu này phải được định dạng và kích thước phù hợp để tối ưu hóa hiệu quả trong quá trình huấn luyện.
Dlib cung cấp API để huấn luyện mô hình HoG trên bộ dữ liệu huấn luyện, giúp mô hình nhận diện đối tượng dựa trên các đặc điểm của HoG trong các vùng quan tâm của hình ảnh Tuy nhiên, quá trình này có thể tốn kém về mặt tính toán và thời gian, đặc biệt khi làm việc với bộ dữ liệu lớn.
Thư viện Face Recognition
Dlib là một bộ công cụ C++ tiên tiến, tích hợp các thuật toán học máy và công cụ phát triển phần mềm phức tạp, giúp giải quyết các vấn đề thực tiễn trong cuộc sống.
Nó được áp dụng rộng rãi trong cả ngành công nghiệp lẫn học thuật, đặc biệt trong các lĩnh vực như robot, thiết bị nhúng, điện thoại di động và các môi trường máy tính cần hiệu suất cao.
Face Recognition là một thư viện nhận dạng khuôn mặt rất nổi tiếng trong khoảng thời gian gần đây
Nhận diện khuôn mặt được phát triển bằng ngôn ngữ C++ và áp dụng công nghệ nhận dạng khuôn mặt tiên tiến của dlib, sử dụng phương pháp học sâu, đã đạt độ chính xác lên tới 99,38% trên dữ liệu từ bộ khuôn mặt được gắn nhãn theo tiêu chuẩn Wild (Labeled Faces in the Wild).
Thư viện Nhận dạng Khuôn mặt là một công cụ hữu ích giúp người dùng dễ dàng thực hiện nhận diện khuôn mặt trong các thư mục dữ liệu hình ảnh thông qua dòng lệnh một cách đơn giản và hiệu quả.
Hình 3.1 face-recognition.readthedocs.io Ưu điểm và nhược điểm của Thư viện Face Recognition Ưu điểm:
Thư viện Nhận diện Khuôn mặt được phát triển với giao diện người dùng thân thiện, cung cấp các API dễ sử dụng và trực quan, giúp người dùng nhanh chóng tích hợp các chức năng nhận dạng và nhận diện khuôn mặt vào ứng dụng của mình.
Thư viện này cung cấp công cụ và tính năng mạnh mẽ cho việc phát triển hệ thống nhận dạng và nhận diện khuôn mặt, cho phép tùy chỉnh và mở rộng theo yêu cầu cụ thể của từng ứng dụng.
Thư viện nhận diện khuôn mặt cung cấp hiệu suất vượt trội, cho phép nhận dạng và phân tích khuôn mặt trong thời gian thực, ngay cả trên các tập dữ liệu lớn và hình ảnh/video có độ phức tạp cao.
Nhược điểm của thư viện Nhận diện Khuôn mặt là yêu cầu một lượng lớn dữ liệu huấn luyện, bao gồm hình ảnh khuôn mặt của nhiều người khác nhau để đạt hiệu suất tốt Việc thu thập và chuẩn bị dữ liệu này thường đòi hỏi nhiều thời gian và công sức.
Chất lượng dữ liệu huấn luyện đóng vai trò then chốt trong hiệu suất của mô hình Nếu dữ liệu không đa dạng hoặc không phản ánh đầy đủ các điều kiện ánh sáng, góc nhìn và biến đổi khác nhau, độ chính xác của mô hình sẽ bị ảnh hưởng tiêu cực.
Quá trình nhận dạng và nhận diện khuôn mặt yêu cầu nhiều tài nguyên tính toán, đặc biệt khi xử lý các tập dữ liệu lớn hoặc khi sử dụng các mô hình phức tạp.
CÀI ĐẶT VÀ THỬ NGHIỆM HỆ THỐNG
Ngôn ngữ lập trình Python và thư viện OpenCV
4.1.1 Ngôn ngữ lập trình Python
Python là ngôn ngữ lập trình bậc cao, đa năng, được phát triển bởi Guido van Rossum và ra mắt lần đầu vào năm 1991.
Python là một ngôn ngữ lập trình nổi bật với tính dễ đọc, dễ học và dễ nhớ, đặc biệt phù hợp cho người mới bắt đầu Cấu trúc rõ ràng và hình thức sáng sủa của Python giúp người dùng viết mã lệnh với số lần gõ phím tối thiểu, tạo điều kiện thuận lợi cho việc học lập trình.
Hình 4.1.Welcome to Python.org
Python ban đầu được phát triển để hoạt động trên nền tảng Unix, nhưng đã mở rộng sang nhiều hệ điều hành khác như MS-DOS, Mac OS, OS/2, Windows và Linux Mặc dù có sự đóng góp của nhiều cá nhân, Guido van Rossum vẫn là tác giả chủ yếu và giữ vai trò quyết định trong hướng phát triển của Python.
Sự phát triển Python đến nay có thể chia làm các giai đoạn:
▪ Thành lập và phát triển sớm (1990-2000): Python được tạo ra bởi Guido van
Rossum vào năm 1991 và nhanh chóng thu hút sự quan tâm của cộng đồng lập
35 trình viên Trong giai đoạn này, Python đã trải qua các phiên bản sớm và phát triển cơ bản của ngôn ngữ
Từ năm 2000 đến 2010, Python đã phát triển với nhiều phiên bản lớn, giới thiệu các tính năng cốt lõi như generators, decorators, context managers và mô-đun argparse Giai đoạn này chứng kiến sự gia tăng đáng kể về độ phổ biến của Python trong cộng đồng phát triển.
Từ năm 2010 đến 2020, Python đã phát triển mạnh mẽ và lan rộng trên toàn cầu, trở thành một trong những ngôn ngữ lập trình phổ biến nhất Ngôn ngữ này được ưa chuộng trong nhiều lĩnh vực, bao gồm phát triển web với các framework như Django và Flask, khoa học dữ liệu với các thư viện như pandas, numpy và scipy, cũng như máy học và trí tuệ nhân tạo thông qua scikit-learn, TensorFlow và PyTorch.
Từ năm 2020 đến nay, Python đã chứng kiến sự đa dạng hóa và tiến bộ rõ rệt với việc ra mắt các phiên bản mới, cải thiện hiệu suất và tính năng của ngôn ngữ Cộng đồng phát triển Python cũng ngày càng phong phú, với sự xuất hiện của nhiều framework và thư viện mới, đáp ứng nhu cầu đa dạng trong các lĩnh vực khác nhau Những đặc trưng nổi bật của ngôn ngữ Python đã góp phần thúc đẩy sự phát triển này.
❖ Ngôn ngữ lập trình đơn giản, dễ học
Ngôn ngữ lập trình Python nổi bật với sự đơn giản và dễ học hơn so với các ngôn ngữ như Java, C++, C#, khiến cho nó trở thành lựa chọn ưa thích của nhiều lập trình viên mới bắt đầu.
Sử dụng ngôn ngữ Python giúp rút ngắn thời gian nghiên cứu và tìm hiểu các giải pháp, tập trung vào thực tiễn thay vì cú pháp Điều này không chỉ tiết kiệm thời gian mà còn mang lại giá trị kinh tế cao trong phát triển phần mềm.
❖ Miễn phí mã nguồn mở
Python là một ngôn ngữ lập trình miễn phí, cho phép người dùng học tập và cài đặt mà không phải chi trả bất kỳ khoản phí nào Đặc biệt, Python có thể được sử dụng cho các mục đích thương mại Với tính chất mã nguồn mở, người dùng hoàn toàn có khả năng thay đổi mã nguồn của Python theo nhu cầu của mình.
Có thể di chuyển các chương trình ngôn ngữ Python từ nền tảng này sang nền tác khác như Windows, MacOS hay Linux
Chạy một mã trên bất kỳ máy nào mà không cần viết mã khác nhau cho từng loại máy là một khái niệm quan trọng trong lập trình.
Khả năng mở rộng và có thể nhúng
Có thể kết hợp ngôn ngữ Python với các phần code của ngôn ngữ lập trình
C, C++ vào phần code của lập trình Python Sự kết hợp ngày sẽ giúp ứng dụng được tích hợp nhiều tính năng tốt hơn
❖ Ngôn ngữ thông dịch cấp cao
Python tự động quản lý bộ nhớ và chuyển đổi dữ liệu sang ngôn ngữ mà máy tính có thể hiểu, giúp giảm thiểu công sức dọn dẹp dữ liệu không cần thiết Tính năng này là ưu điểm nổi bật của Python, điều mà các ngôn ngữ lập trình khác như C hay C++ không thể thực hiện.
❖ Thư viện tiêu chuẩn lớn
Để đơn giản hóa quy trình lập trình cho các lập trình viên, Python đã phát triển một kho thư viện tiêu chuẩn phong phú, giúp nhanh chóng xử lý các tác vụ phổ biến.
Thư viện tiêu chuẩn này đã trải qua quá trình kiểm tra nghiêm ngặt và được hàng trăm người sử dụng, vì vậy bạn hoàn toàn có thể yên tâm rằng nó sẽ không ảnh hưởng đến mã nguồn và ứng dụng của bạn.
Tất cả mọi thứ trong ngôn ngữ lập trình Python đều là hướng đối tượng, giúp giải quyết được những vấn đề phức tạp một cách trực quan nhất
Trong quá trình lập trình ứng dụng bằng Python, người dùng có thể chia nhỏ các vấn đề phức tạp thành những phần dễ quản lý hơn thông qua việc tạo ra các đối tượng Python mang lại nhiều ưu điểm như cú pháp đơn giản, dễ học và khả năng mở rộng, nhưng cũng có những nhược điểm như hiệu suất xử lý không cao so với một số ngôn ngữ lập trình khác.
Python có các ưu điểm:
▪ Đơn giản: Là một ngôn ngữ có hình thức sáng sủa, cấu trúc rõ ràng, cú pháp ngắn gọn giúp người lập trình dễ dàng đọc và tìm hiểu
▪ Tốc độ xử lý khá nhanh: Python là ngôn ngữ có tốc độ xử lý ở mức khá và được đánh giá là nhanh hơn so với ngôn ngữ PHP
▪ Chất lượng: Thư viện có tiêu chuẩn cao, Python có khối cơ sở dữ liệu khá lớn nhằm cung cấp giao dạng cho tất cả các CSDL thương mại
▪ Thuận tiện: Python được biên dịch và chạy trên tất cả các nền tảng lớn
▪ Mở rộng: Python cho phép người lập trình có thể thêm hoặc tùy chỉnh các công cụ nhằm tối đa hiệu quả có thể đạt được trong công việc
▪ GUI Programming: Giúp cho việc thực hiện ảnh minh họa di động một cách tự nhiên và sống động hơn
Tuy nhiên, Python vẫn còn tồn tại một số nhược điểm như:
▪ Python không có các thuộc tính như: protected, private hay public
▪ Python không có vòng lặp do…while hay switch….case
▪ Mặc dù tốc độ xử lý của Python được đánh giá nhanh hơn PHP nhưng lại không bằng Java và C++
OpenCV (Open Computer Vision - opencv.org) là một thư viện mã nguồn mở cung cấp các hàm cho xử lý ảnh và thị giác máy tính, hoàn toàn miễn phí cho cả mục đích giáo dục và thương mại.
Cài đặt công cụ, thư viện
4.2.1 Cài đặt thư viện Face Recognition
Có nhiều cách để cài đặt thư viện Face Recognition, ở đây ta sẽ cài thư viện Face Recognition với sự hỗ trợ của Anaconda
Với Anaconda, việc cài đặt trở nên dễ dàng, vì vậy bài viết này sẽ không hướng dẫn chi tiết về quá trình cài đặt Chúng ta sẽ bắt đầu cài đặt thư viện Face Recognition ngay bây giờ.
Để cài đặt Face Recognition trên Anaconda, cần lưu ý rằng chỉ các phiên bản Python mới được hỗ trợ, trong khi phiên bản Anaconda 3-2022.10-Windows-x86_64 với Python 3.9.* chưa hỗ trợ tốt cho thư viện này Do đó, người dùng cần tạo một môi trường Python mới (Python 3.8) bằng cách mở Anaconda Prompt và gõ lệnh: conda create -n evn_face_two python=3.8 để thực hiện các thử nghiệm.
- evn_face_two: tên môi trường sẽ tạo
- python=3.8: phiên bản python của môi trường
Hình 4.4 Tạo môi trường cài đặt Face Recognition
Sau đó, ta chuyển sang môi trường Python mới tạo (Python 3.8) bằng lệnh: conda activate evn_face_two
Và giờ, ta có thể cài đặt ngay thư viện Annoy bằng cách mở Anaconda Prompt lên và nhập vào đó câu lệnh : conda install -c conda-forge face_recognition
Hình 4.5 Cài đặt thư viện Face Recognition
4.2.2 Cài đặt thư viện OpenCV
Giống với việc cài đặt thư viện Face Recognition, ta có thể cài đặt thư viện OpenCV dễ dàng với câu lệnh quen thuộc: conda install -c conda-forge opencv