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 - 988Trong 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!
Các bài cũ hơn
- Hướng dẫn đăng nhập trên trang chủ và trang quản trị Spring MVC-MongoDB (05:58 PM - 21/03/2024)
- Hướng dẫn xây dựng Layout trang User và Admin trong Spring MVC (07:25 PM - 18/03/2024)
- Xử lý giỏ hàng trong Spring MVC Hibernate-SQL Server (02:22 PM - 11/03/2024)
- Hướng dẫn các thao tác cơ bản với MongoDB trong Spring MVC-Maven-Eclipse (11:47 AM - 04/03/2024)
- Các thao tác cơ bản CRUD-Tìm kiếm-Phân trang trong Spring MVC-Hibernate-SQL Server (11:41 PM - 28/02/2024)