Nhận diện khuôn mặt trong ảnh ngày càng phổ biến với thời đại công nghệ hiện nay, đây được xem là một công cụ có ích giúp con người dễ dàng nhận diện khuôn mặt trong những trường hợp cần thiết. Haar Cascade là một trong những phần mềm giúp nhận diện khuôn mặt dễ dàng, vậy Haar Cascade là gì? Mà được đánh giá cao đến vậy.
Haar Cascade là gì? Hướng dẫn nhận diện khuôn mặt trong ảnh bằng Haar Cascade
Haar Cascade khá phổ biến trong cộng đồng nhận diện khuôn mặt vì đây là công cụ phân loại và phát hiện đối tượng tuyệt bởi cấu trúc siêu nhẹ, dễ sử dụng và có tốc độ nhận diện rất cao. Bài viết sau đây sẽ giải thích cho bạn HAAR Cascade là gì? Cách hoạt động và hướng dẫn cách thực hiện nhận diện khuôn mặt với HAAR Cascade trong OpenCV.
Tổng quan về Haar Cascade
Trước khi tìm hiểu cách nhận diện khuôn mặt bằng Haar Cascade Opencv Python thì chúng ta cùng tìm hiểu tổng quan về khái niệm Haar Cascade là gì cũng như cách Haar Cascade hoạt động và cách tải xuống phần mềm này nhé.
Haar Cascade là gì?
Haar Cascade là một thuật toán được tạo ra dựa trên những tính năng đó để phát hiện đối tượng (có thể là khuôn mặt, mắt, tay, đồ vật,…) được đề xuất vào năm 2001 bởi Paul Viola và Michael Jones trong bài báo của họ với khẳng định “Phát hiện đối tượng một cách nhanh chóng bằng cách sử dụng tầng (Cascade) tăng cường các tính năng đơn giản”.
Triển khai ban đầu được sử dụng để phát hiện khuôn mặt chính diện và các đặc điểm như Mắt, Mũi và Miệng. Tuy nhiên, có nhiều đặc trưng Haar được đào tạo trước đó trong GitHub của họ cho các đối tượng khác cũng như cho toàn bộ cơ thể, thân trên, thân dưới, nụ cười và nhiều đồ vật khác.
Nói một cách dễ hiểu hơn, Haar Cascade là gì? Là một lớp model có thể giúp chúng ta nhận diện khuôn mặt (Haar Cascade face detection) Haar Cascade sử dụng các tầng Haar và sau đó sử dụng thật nhiều đặc trưng đó qua nhiều lượt (Cascade) và tạo thành một cỗ máy nhận diện khuôn mặt hoàn chỉnh.
Haar Cascade hoạt động như thế nào
Trong bài báo của tác giả Paul Viola và Michael Jones đã trình bày một phương pháp mới và nhanh hơn để xử lý hình ảnh và phát hiện khuôn mặt bằng cách sử dụng các đặc điểm hình chữ nhật như hình dưới đây. Các đặc điểm hình chữ nhật tương tự như nhân được sử dụng để phát hiện các đặc điểm khác nhau của khuôn mặt như mắt và các nốt như trong hình minh họa.
Các tính năng hình chữ nhật được chạy lần lượt trên hình ảnh và tổng số pixel nằm trong phần màu trắng được trừ cho tổng số pixel nằm trong phần màu đen.
Trong đó
- a) Là các bộ lọc bắt các cạnh trong ảnh
- b) Bắt các đường thẳng trong ảnh
- c) Về đặc trưng 4 hình vuông
Trong hình minh họa bên dưới, đặc điểm hình chữ nhật đầu tiên đang tính toán cho sự khác biệt về cường độ giữa vùng mắt và vùng má trên khuôn mặt. Và đặc điểm hình chữ nhật thứ hai là đo sự chênh lệch về cường độ giữa hai vùng mắt và sống mũi. Bộ lọc Haar chỉ có thể nhìn cụ thể vào một vùng trong cửa sổ để nhận diện.
Vì vậy, sử dụng các đặc điểm hình chữ nhật này trên một hình ảnh, chúng ta có thể tạo ra hàng nghìn điểm đặc trưng cho hình ảnh. Tuy nhiên, việc tính toán tổng số pixel trong các vùng trắng và đen trong toàn bộ ảnh có thể là một hoạt động tốn kém, đặc biệt là đối với các ảnh lớn.
Các tác giả cũng đề xuất một phương pháp được gọi là ảnh tích phân có thể đạt được tính toán tương tự bằng cách thực hiện các phép toán chỉ trên bốn điểm ảnh. Có thể sử dụng hàng nghìn hình ảnh được gắn nhãn để chuyển đổi chúng thành bản đồ tính năng tầng HAAR và đào tạo nó bằng cách sử dụng mô hình học máy để tạo bộ phân loại nhận diện khuôn mặt.
Để hiểu hơn về cách Haar Cascade hoạt động thì mình sẽ đi sâu hơn về từng bước nhận diện khuôn mặt của Haar Cascade nhé!!!
- Bước 1: Hình ảnh (đã được gửi đến bộ phân loại) được chia thành các phần nhỏ (hoặc các cửa sổ con như trong hình minh họa).
- Bước 2: Chúng tôi đặt N không có bộ dò theo cách xếp tầng trong đó mỗi bộ phát hiện sự kết hợp của các loại đặc trưng khác nhau từ các hình ảnh (ví dụ: đường thẳng, cạnh, hình tròn, hình vuông) được truyền qua. Giả sử khi việc trích xuất đối tượng địa lý được thực hiện, mỗi phần phụ được gán một giá trị tin cậy.
- Bước 3: Hình ảnh (hoặc hình ảnh phụ) có độ tin cậy cao nhất được phát hiện dưới dạng khuôn mặt và được gửi đến bộ tích lũy trong khi phần còn lại bị từ chối. Do đó, Cascade tìm nạp khung hình / hình ảnh tiếp theo nếu còn lại và bắt đầu lại quá trình.
Cách tải Haar Cascade
Cách tải phần mềm Haar Cascade cực kỳ đơn giản, bạn chỉ cần truy cập vào trang web chính thức của Github và sao chép nó để tìm các tệp XML cho nhiều phân loại đã được tạo ra trước đó. Ví dụ như: Bộ phân loại dành cho các đối tượng như mèo, biển số, khuôn mặt, mắt và nhiều đối tượng khác.
Link github: https://github.com/opencv/opencv/tree/master/data/haarcascades
Nếu bạn chỉ quan tâm đến một trình phân loại hoặc không muốn sao chép toàn bộ kho lưu trữ cho tất cả các phân loại thì bạn chỉ cần mở tệp XML ở dạng thô trong một tab khác, sau đó nhấp chuột phải và lưu nó trên thiết bị của bạn. Tất cả các bộ phân loại tầng được cung cấp bởi trang OpenCV chính thức và đều có trong kho lưu trữ. Bạn cũng có thể tạo bộ phân loại tầng Haar tùy chỉnh theo nhu cầu và mong muốn của riêng bạn rất dễ dàng.
Cách nhận diện khuôn mặt bằng Haar Cascade trong Open Cv Python
Sau khi đã tìm hiểu tổng quan về Haar Cascade là gì? Thì chúng ta cùng tìm hiểu cách nhận diện khuôn mặt bằng Haar Cascade Opencv Python chi tiết sau đây nhé!
Cài đặt các phụ thuộc
Trước tiên, chúng ta cần cài đặt OpenCV vì nó cung cấp việc triển khai các tệp phân loại tầng Haar ở dạng XML bằng cách sử dụng hàm cv2.CascadeClassifier ().
Nhập các phụ thuộc
Áp dụng các tầng Haar
- Dòng 1-3: Khởi tạo các tầng để phát hiện khuôn mặt, mắt và nụ cười bằng cách sử dụng hàm OpenCV CascadeClassifier () bằng cách chuyển tệp XML làm đối số.
- Dòng 4: Khởi tạo nguồn cấp dữ liệu webcam.
- Dòng 6: Tiếp theo, khởi tạo một vòng lặp while chạy vô thời hạn hoặc cho đến khi tất cả các khung được lặp qua. Mã kèm theo bên trong được thực thi cho mỗi khung hình đến từ webcam. Vòng lặp cũng có thể bị phá vỡ nếu người dùng nhấn phím ‘thoát’ ( dòng 23-25 ).
- Dòng 7-9: Sử dụng chức năng ‘read ()’ để tìm nạp các khung hình liên tiếp từ nguồn cấp dữ liệu webcam. Điều này được xử lý trước bằng cách chuyển đổi nó thành thang độ xám (sử dụng cv2.cvtColor) và sau đó được gửi đến đối tượng phân loại khuôn mặt của chúng tôi để phân loại bằng cách sử dụng hàm ‘detector’, hàm này trả về tọa độ (x, y, w, h) của các khuôn mặt được phát hiện bởi bộ phân loại.
- Dòng 11: Bắt đầu một vòng lặp for lặp qua tất cả các mặt được phát hiện (và sử dụng hàm ‘cv2 rectangle’ để đặt một hộp giới hạn xung quanh nó). Để thuận tiện cho việc phát hiện ánh mắt và nụ cười (cả hai đều có kích thước nhỏ hơn), xác định một khu vực phụ trong khung video thang độ xám (là khu vực được quay lại bởi dòng khuôn mặt). Điều này chỉ có thể được thực hiện vì mắt hoặc nụ cười sẽ chỉ được phát hiện bên trong khuôn mặt. ( Dòng 13-14 )
- Dòng 16-21: Chuyển vùng phụ được xác định ở bước trước đến các tầng ‘mắt’ và ‘nụ cười’ để một loạt các tọa độ của mắt và nụ cười được phát hiện được trả lại. Tiếp theo, khởi tạo vòng lặp ‘for’ cho mỗi mảng này ( Dòng 18 & 20 ) và đặt các hộp giới hạn xung quanh mỗi đối tượng được phát hiện ( Dòng 21 ).
- Dòng 27: Cuối cùng, giải phóng nguồn cấp dữ liệu video webcam đã được tải vào bộ nhớ.
- Dòng 28: Đóng tất cả các cửa sổ (Nếu có cửa sổ đang mở và đang chạy).
Kết quả
Sau khi thực hiện chi tiết theo hướng dẫn trên, kết quả nhận diện khuôn mặt sẽ hiện lên những ô chủ nhật khác nhau có nhiệm vụ nhận diện đối tượng như mắt, mũi, miệng,..
Chúc các bạn thử thành công!!!
Kết luận
Bài viết trên giải thích chi tiết về tổng quan Haar Cascade là gì? Cách hoạt động và hướng dẫn nhận diện khuôn mặt trong ảnh bằng Haar Cascade Opencv Python. Hy vọng bài viết đem lại cho bạn nhiều thông tin hữu ích về Haar Cascade face detection!!! Bài viết đến đây là kết thúc, cảm ơn các bạn đã theo dõi ^^!