Phát hiện gương mặt

Một phần của tài liệu Nghiên cứu và cài Đặt chương trình sử dụng hog:lbp feature Để phát hiện mặt người trong video cho phép làm việc với dữ liệu Đầu vào từ webcam và file video (Trang 25 - 29)

3. Chi tiết chương trình

3.4. Phát hiện gương mặt

Hình 20: Phát hiện mặt người

Chuyển đổi ảnh sang ảnh xám:

- Đầu tiên, khung hình đầu vào (ảnh màu) được chuyển thành ảnh xám bằng cách sử dụng cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) để chuẩn bị cho quá trình phát hiện khuôn mặt.

Phát hiện khuôn mặt bằng Haar Cascade:

- Hàm cascade.detectMultiScale được sử dụng để phát hiện các khuôn mặt trong ảnh xám. Các tham số như scaleFactor, minNeighbors, và minSize điều chỉnh cách thức phát hiện khuôn mặt, giúp cân bằng giữa tốc độ và độ chính xác.

Trích xuất đặc trưng HOG và LBP:

- Đối với mỗi khuôn mặt được phát hiện (với tọa độ (x, y, w, h)), hai loại đặc trưng (HOG và LBP) được trích xuất từ vùng khuôn mặt:

20

Hình 21: Trích xuất đặc trưng HOG và LBP

Dự đoán và xác nhận khuôn mặt:

- Mỗi đặc trưng (HOG và LBP) sau đó được đưa vào mô hình đã huấn luyện (dùng hog_model.predict và lbp_model.predict) để dự đoán xem khuôn mặt có hợp lệ hay không.

- Nếu mô hình dự đoán giá trị 1 (khuôn mặt hợp lệ), khuôn mặt sẽ được lưu vào danh sách các khuôn mặt đã xác nhận (verified_faces_hog hoặc verified_faces_lbp) và ảnh khuôn mặt đó sẽ được lưu vào thư mục OUTPUT_DIR.

Lưu ảnh khuôn mặt:

- Mỗi khuôn mặt phát hiện được sẽ được lưu dưới dạng tệp ảnh riêng biệt trong thư mục OUTPUT_DIR, với tên tệp được đánh số theo thứ tự

(face_hog_{face_count}.jpg cho HOG và face_lbp_{face_count}.jpg cho LBP).

Tính toán độ chính xác:

- Độ chính xác của mô hình HOG và LBP được tính bằng cách so sánh các dự đoán với nhãn thực tế (ở đây là tất cả đều là 1, tức là khuôn mặt hợp lệ). Hàm accuracy_score từ thư viện sklearn.metrics được sử dụng để tính toán độ chính xác của mô hình cho mỗi phương pháp.

Trả về kết quả:

- Hàm trả về các danh sách khuôn mặt đã xác nhận từ HOG và LBP, cùng với độ chính xác của hai mô hình.

2.4.1. HOG (với joblib)

Phương pháp phát hiện khuôn mặt sử dụng các gradient và SVM để nhận diện khuôn mặt trong ảnh.

- hog_detector(gray) là bước gọi hàm get_frontal_face_detector() từ thư viện dlib.

Đây là bước chính trong việc phát hiện khuôn mặt bằng HOG. Sau khi đặc trưng được trích xuất, các classifier học được sẽ xác định đâu là khuôn mặt trong ảnh.

- Thực tế, dlib.get_frontal_face_detector() không chỉ đơn giản là phát hiện khuôn mặt mà còn thực hiện trích xuất đặc trưng HOG trong quá trình phát hiện khuôn mặt.

Hàm hog_detector(gray) là một quá trình kết hợp giữa hai bước trích xuất đặc trưng và phát hiện gương mặt .

Cụ thể hơn:

- Trích xuất đặc trưng HOG: Đầu tiên, đặc trưng HOG được trích xuất từ ảnh xám (grayscale). Tính toán các gradient (sự thay đổi độ sáng) cho từng pixel trong ảnh để mô tả các đối tượng. Chia ảnh thành các vùng nhỏ (cells), để mô tả các hướng gradient và mức độ mạnh yếu của chúng trong một khu vực, giúp nhận dạng các hình dạng và cấu trúc. Trong mỗi cell, tính toán histogram các gradient hướng. Sau đó kết hợp các histogram của từng cell để tạo thành một đặc trưng chung cho cửa sổ (window).

Hình 22: Trích xuất đặc trưng

- SVM (Support Vector Machine): Sau khi trích xuất đặc trưng HOG, SVM (hoặc một mô hình phân loại tương tự) được sử dụng để phân loại các đặc trưng này. SVM là một thuật toán học máy mạnh mẽ được sử dụng để phân loại các điểm dữ liệu vào các lớp khác nhau. Trong trường hợp này, SVM được huấn luyện để phân biệt khuôn mặt với các đối tượng không phải là khuôn mặt. Dlib sử dụng một mô hình SVM đã được huấn luyện từ trước, được sử dụng cho việc phát hiện khuôn mặt trong các bức ảnh.

- Kết quả cuối cùng sẽ trả về danh sách các khuôn mặt phát hiện được dưới dạng bounding boxes, hog_faces chứa kết quả phát hiện các khuôn mặt. Kết quả này là một danh sách các hình chữ nhật (bounding boxes), mỗi hình chữ nhật đại diện cho một khuôn mặt được phát hiện trong ảnh. Mỗi phần tử trong danh sách hog_faces là một đối tượng dlib.rectangle, với các thuộc tính left(), top(), width(), height() để chỉ ra vị trí và kích thước của bounding box.

2.4.2. LBP (với OpenCV)

22

Phương pháp phát hiện khuôn mặt sử dụng các đặc trưng nhị phân (binary) trong các vùng nhỏ của ảnh, hiệu quả và nhanh chóng.

Trong trường hợp LBP, quá trình trích chọn đặc trưng không rõ ràng như HOG, nhưng LBP dựa trên một đặc trưng mô tả kết cấu của vùng ảnh, bằng cách so sánh các pixel trong một cửa sổ nhỏ với giá trị trung tâm.

- lbp_cascade.detectMultiScale(gray) là hàm của OpenCV để phát hiện khuôn mặt sử dụng cascade classifier (một mô hình phân loại học máy được huấn luyện bằng các đặc trưng LBP).

- detectMultiScale(gray) sẽ tự động trích xuất đặc trưng LBP và sử dụng bộ phân loại (classifier) cascade đã được huấn luyện sẵn để phát hiện khuôn mặt. Nó nhận ảnh xám và trả về một danh sách các hình chữ nhật chứa khuôn mặt phát hiện được.

- lbpcascade_frontalface.xml: Đây là một file XML chứa mô hình phân loại đã được huấn luyện trước với thuật toán Haar Cascade và sử dụng LBP thay vì các đặc trưng Haar. Các đặc trưng LBP giúp mô tả các mô hình bề mặt của đối tượng thông qua các phép toán đơn giản dựa trên so sánh giá trị của các pixel xung quanh mỗi pixel trung tâm trong một cửa sổ con của ảnh. File này được sử dụng bởi CascadeClassifier để phát hiện các khuôn mặt trong ảnh.

Cụ thể hơn:

- Chuyển ảnh thành ảnh xám: Màu sắc không quan trọng trong việc phát hiện khuôn mặt bằng LBP, nên ảnh được chuyển sang ảnh xám để giảm độ phức tạp.

- Trích xuất đặc trưng: LBP là một phương pháp để trích xuất đặc trưng của ảnh thông qua việc so sánh các giá trị pixel trong một cửa sổ nhỏ quanh mỗi điểm ảnh với một giá trị trung tâm (thường là 3x3 hoặc 5x5). Nếu giá trị pixel xung quanh lớn hơn hoặc bằng giá trị trung tâm, gán giá trị 1, ngược lại, gán giá trị 0. Các giá trị này được mã hóa thành một chuỗi nhị phân, từ đó tạo ra một đặc trưng có thể dùng để phân loại hình ảnh

- Lấy đặc trưng toàn cục: Biến mã nhị phân này thành một số lượng đặc trưng nhất định, có thể sử dụng các phép toán thống kê (như histogram) trên các vùng ảnh để mô tả các đặc trưng cục bộ của bề mặt.

- Phát hiện khuôn mặt: chương trình sử dụng một Cascade Classifier đã được huấn luyện trước với đặc trưng LBP để phát hiện khuôn mặt trong ảnh xám. Cụ thể, lbp_cascade.detectMultiScale() là hàm chính thực hiện quá trình phát hiện khuôn mặt bằng cách sử dụng mô hình phân loại LBP.

- Trả về kết quả: lbp_faces sẽ chứa một danh sách các tọa độ của các khuôn mặt phát hiện được (dưới dạng các bounding box). Những khuôn mặt này sẽ được vẽ lên ảnh bằng cách sử dụng hàm draw_detected_faces(frame, lbp_faces, "LBP", (255, 0, 0)).

Một phần của tài liệu Nghiên cứu và cài Đặt chương trình sử dụng hog:lbp feature Để phát hiện mặt người trong video cho phép làm việc với dữ liệu Đầu vào từ webcam và file video (Trang 25 - 29)

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

(40 trang)