Thị giác máy tính với OpenCV-Python Bài 7 Phần 3: Nhận diện khuôn mặt

Thị giác máy tính với OpenCV-Python Bài 7 Phần 3: Nhận diện khuôn mặt

Thị giác máy tính với OpenCV-Python Bài 7 Phần 3: Nhận diện khuôn mặt

10:27 - 15/02/2022

Trong phần này chúng ta sẽ cùng tìm hiểu cách nhận diện khuôn mặt sử dụng thuật toán Haar Cascades.

Thị giác máy tính với OpenCV-Python Bài 7 Phần 2: Phát hiện người đi bộ trong video
Thị giác máy tính với OpenCV-Python Bài 7 Phần 1: Phát hiện người đi bộ trong hình ảnh
Thị giác máy tính với OpenCV-Python Bài 6 Phần 2: Phép trừ nền
Thị giác máy tính với OpenCV-Python Bài 6 Phần 1: Bắt bám đối tượng với Meanshift và Camshift
Thị giác máy tính với OpenCV-Python Bài 5 Phần 3: Tìm đối tượng thông qua so khớp và phép chiếu hình học

Khái niệm

Phát hiện đối tượng bằng cách sử dụng bộ phân loại tầng dựa trên tính năng Haar là một phương pháp phát hiện đối tượng hiệu quả được đề xuất bởi Paul Vilola và Michael Jones vào năm 2001. Đây là một phương pháp dựa trên học máy, theo đó chức năng cascade được huấn luyện từ rất nhiều hình ảnh có đối tượng và không có đối tượng bên trong. Sau đó, file huấn luyện thu được được sử dụng để phát hiện các đối tượng trong những hình ảnh khác.

Phát hiện khuôn mặt sử dụng Haar Cascade

Ở đây các nhà nghiên cứu đã huấn luyện tạo ra các file phát hiện khuôn mặt và đôi mắt (‘haarcascade_frontalface_default.xml’ và ‘haarcascade_eye.xml’). Chúng ta chỉ cần truy cập vào trang chia sẻ để tải về 2 file này, bỏ vào thư mục chứa file chạy code python là có thể sử dụng được. Nếu các bạn muốn huấn luyện bộ phân loại đối tượng của riêng mình cho bất kỳ đối tượng nào như ô tô, máy bay, ... các bạn có thể sử dụng OpenCV để thực hiện điều này.

Đầu tiên chúng ta cần load các bộ phân loại XML cần thiết, sau đó load hình ảnh (hoặc video) đầu vào ở thang độ xám:

  1. import numpy as np
  2. import cv2
  3. face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
  4. eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
  5. img = cv2.imread('kids.jpg')
  6. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Trường hợp nếu không muốn tải về các file “.xml”, OpenCV đã cung cấp sẵn các file này, công việc của chúng ta là chỉ ra đường dẫn của file. Chúng ta có thể tìm kiếm file haarcascade trên cmd với câu lệnh như sau: where /r C: haarcascade_frontalface_default.xml. Kết quả tìm được:

 

 

Tiếp đó, chúng ta cần thay đường dẫn trong câu lệnh số 4 và số 5 như sau:

face_cascade = cv2.CascadeClassifier(r'C:\Users\BaNguyen\AppData\Local\

                                             Programs\Python\Python310\Lib\site-packages\cv2\data\

                                             haarcascade_frontalface_default.xml’)

eye_cascade = cv2.CascadeClassifier(r'C:\Users\BaNguyen\AppData\Local\

                                             Programs\Python\Python310\Lib\site-packages\cv2\data\

                                             haarcascade_eye.xml’)

Bây giờ chúng ta sẽ tiến hành tìm kiếm khuôn mặt trong hình ảnh. Nếu có khuôn mặt được tìm thấy, hàm tìm kiếm sẽ trả về vị trí của khuôn mặt được phát hiện dưới dạng Rect(x, y, w, h). Khi có được thông tin vị trí này, chúng ta có thể tạo ROI cho khuôn mặt và áp dụng tính năng phát hiện đôi mắt trên ROI này (vì mắt luôn ở trong khuôn mặt):

  1. faces = face_cascade.detectMultiScale(gray, 1.3, 5)
  2. for (x,y,w,h) in faces:
  3. cv2.rectangle(img, (x,y), (x+w,y+h), (255,0,0), 2)
  4. roi_gray = gray[y:y+h, x:x+w]
  5. roi_color = img[y:y+h, x:x+w]
  6. eyes = eye_cascade.detectMultiScale(roi_gray)
  7. for (ex,ey,ew,eh) in eyes:
  8. cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0,255,0), 2)
  9. cv2.imshow('img', img)
  10. cv2.waitKey(0)
  11. cv2.destroyAllWindows()

Trong hàm face_cascade.detectMultiScale, đối số “1.3” là scaleFactor – càng nhỏ thì càng phát hiện tốt hơn, nhưng thuật toán chạy lâu hơn; “5” là minNeighbors – càng lớn thì phát hiện được càng ít nhưng khuôn mặt tìm được có độ chính xác và chất lượng cao hơn.

Kết quả nhận được như sau:

 

 

 

(Sưu tầm)
VIỆN IMC
Tòa nhà IMC Tower, Số 176 Trường Chinh, Phường Khương
Thượng, Quận Đống Đa, Thành phố Hà Nội, Việt Nam
Tel/Fax : (+84) 24 3566 6232 / 24 3566 6234
Email: contact@imc.org.vn   Website: https://imc.org.vn