CÔNG NGHỆ THÔNG TIN >> BÀI VIẾT CHỌN LỌC

Phát hiện khuôn mặt người trong ảnh sử dụng thư viện Haar Cascade với OpenCV-Python

Đăng lúc: 09:53 AM - 27/03/2024 bởi Charles Chung - 572

Trong bài viết này tôi sẽ hướng dẫn các bạn sử dụng thư viện Haar Cascade với OpenCV để phát hiện khuôn mặt người trong một bức hình, code với Python

1. 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 xếp 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à 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.

2. 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

3. Ví dụ: Phát hiện tất cả các khuôn mặt có trong bức hình và vẽ ô vuông để nhận diện (sử dụng thư viện haar cascade với opencv trong python)

Bước 1: Cài đặt opencv (xem bài viết Cài đặt và sử dụng thư viện OpenCV trong Python với Visual Code)

Bước 2: Tải tệp tin haarcascade_frontalface_default.xml trong Link github về nhé

Bước 3: Chuẩn bị 1 hình ảnh rõ nét với nhiều khuôn mặt

Bước 4: Code theo gợi ý sau

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# import thư viện opencv
import cv2
# load thư viện nhận diện khuôn mặt
haar=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# đọc ảnh trong thư mục images lên
picture=cv2.imread('images/c2010i1.jpg')
# chuyển ảnh về màu gray
picturegray=cv2.cvtColor(picture,cv2.COLOR_BGR2GRAY)
# gọi hàm dò tìm khuôn mặt
faces=haar.detectMultiScale(
    picturegray,
    scaleFactor=1.1,
    minNeighbors=10,
    minSize=(30,30),
    flags=cv2.CASCADE_DO_ROUGH_SEARCH
)
# vẽ hình chữ nhật vào từng khuôn mặt để quan sát
for(x,y,w,h) in faces:
    cv2.rectangle(picture,(x,y),(x+w,y+h),(0,255,0),2)
# resize hình ảnh nhỏ lại 50% (nếu ảnh gốc to quá)
imgresized=cv2.resize(picture, None,fx=0.5,fy=0.5)
# hiển thị hình ảnh
cv2.imshow('imgresized',imgresized)
cv2.waitKey()

Bước 5: Chạy và xem kết quả

Đôi khi có những khuôn mặt không nhận diện được hoặc nhận diện sai, các bạn có thể thay đổi tham số minNeighbors nhé.

thay lời cảm ơn!

QUẢNG CÁO - TIẾP THỊ