Phát hiện khuôn mặt opencv python
Tự động nhận dạng các khuôn mặt có trong bức ảnh với OpenCV và Python, ứng dụng tự động hóa. Show Một nhóm lập trình viên nước ngoài phát triển về trí tuệ nhân tạo đã nhận định rằng: Để đưa ra quyết định thực hiện một việc gì đó thì trước tiên phải nhận dạng được các vật chất xung quanh thế nên chúng tôi đã miệt mài học toán và thuật toán nhằm tối ưu nhất có thể nhận ra một vật thể, cũng là một con mèo nhưng lúc thì nó nhảy, lúc thì nó nằm và còn có lúc nó bị một vật gì đó cản một nửa khuôn mặt thế cho nên rất khó để mà nhận dạng ra được khuôn mặt cúa chúng, thay vào việc mãi mê nghiên cứu và phát triển thuật toán thì chúng tôi đã sử dụng một lượng hình ảnh/dữ liệu về con mèo nạp vào chương trình, cùng là một chi phí hoặc có khả năng thấp hơn nhưng kết quả lại tốt hơn rất nhiều. Bài viết này giới thiệu đến bạn đọc sử dụng OpenCV với ngôn ngữ mô tả là Python cùng với tệp tin XML Haarcascade để nhận diện khuôn mặt trong một bức ảnh. Môi trường thử nghiệm
Các thư viện cần thiếtSử dụng cửa sổ Command Prompt và thực viện dòng lệnh sau đây pip install opencv-python Sử dụng OpenCV trong bài toán nhận diện khuôn mặtPhần giới thiệu đã đề cập đến dùng hình ảnh/dữ liệu để giảm chi phí cho việc nghiên cứu thuật toán và những dữ liệu này đã được đúc kết thành tệp tin xml. Haar Cascade là dữ liệu được sử dụng phổ biến nhất, tôi chỉ sử dụng riêng một tệp tin trong bộ Haar Cascade là haarcascade_frontalface_default.xml và ngoài ra còn có các tệp tin về phát hiện mắt, miệng, hình dáng cơ thể trong bộ Haar Cascade. Đầu tiên khai báo những thư viện sau import cv2 Bước 1: Đầu vào sẽ là bức ảnh và tệp tin xml image = cv2.imread("images/Bill Gates.jpg") face_cascade = cv2.CascadeClassifier("Haar Cascade/haarcascade_frontalface_default.xml") Bước 2: Tạo một bức ảnh xám từ bức ảnh gốc grayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) Bước 3: Sử dụng phương thức detectMultiScale để phát hiện khuôn mặt trong bức ảnh xám faces = faceCascade.detectMultiScale( grayImage, scaleFactor = 1.1, minNeighbors = 5 )
Bước 4: Sau khi tính toán thì dữ liệu các khuôn mặt đã có trong biến faces, để muốn xác thực chúng ta vẽ nó lên bức ảnh gốc và phác họa ra màn hình # Draw for (x, y, w, h) in faces: cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2) # Show cv2.imshow("Faces found", image) Kết thúc chương trình với cv2.waitKey(0) cv2.destroyAllWindows() Kết quả khi chạy chương trình Source code đầy đủimport cv2 # Bước 1: Tấm ảnh và tệp tin xml face_cascade = cv2.CascadeClassifier("Haar Cascade/haarcascade_frontalface_default.xml") image = cv2.imread("images/Bill Gates.jpg") # Bước 2: Tạo một bức ảnh xám grayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # Bước 3: Tìm khuôn mặt faces = face_cascade.detectMultiScale( grayImage, scaleFactor = 1.1, minNeighbors = 5, ) # Bước 4: Vẽ các khuôn mặt đã nhận diện được lên tấm ảnh gốc for (x, y, w, h) in faces: cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2) # Bước 5: Vẽ lên màn hình cv2.imshow("Faces found", image) cv2.waitKey(0) cv2.destroyAllWindows() Thứ tư, 27/03/2019 | 00:00 GMT+7 Hình ảnh chiếm một lượng lớn dữ liệu được tạo ra mỗi ngày, điều này làm cho khả năng xử lý những hình ảnh này trở nên quan trọng. Một phương pháp xử lý hình ảnh là thông qua nhận diện khuôn mặt . Nhận diện khuôn mặt là một nhánh của xử lý hình ảnh sử dụng máy học để phát hiện khuôn mặt trong hình ảnh. Haar Cascade là một phương pháp phát hiện đối tượng được sử dụng để định vị đối tượng quan tâm trong hình ảnh. Thuật toán được đào tạo trên một số lượng lớn các mẫu âm và dương, trong đó các mẫu dương là hình ảnh có chứa đối tượng quan tâm. Mẫu âm bản là hình ảnh có thể chứa bất kỳ thứ gì ngoại trừ đối tượng mong muốn. Sau khi được đào tạo, bộ phân loại sau đó có thể định vị đối tượng quan tâm trong bất kỳ hình ảnh mới nào. Trong hướng dẫn này, bạn sẽ sử dụng mô hình Haar Cascade được đào tạo trước từ OpenCV và Python để phát hiện và extract khuôn mặt từ hình ảnh. OpenCV là một thư viện lập trình open-souce được sử dụng để xử lý hình ảnh. Yêu cầu
Bước 1 - Cấu hình Môi trường localTrước khi bạn bắt đầu viết mã của bạn , trước tiên bạn sẽ tạo một không gian làm việc để chứa mã và cài đặt một số phụ thuộc. Tạo một
folder cho dự án bằng
Thay đổi vào folder mới tạo:
Tiếp theo, bạn sẽ tạo một môi trường ảo cho dự án này. Môi trường ảo cô lập các dự án khác nhau để các phụ thuộc khác nhau sẽ không gây ra bất kỳ gián đoạn nào. Tạo một môi trường ảo có tên
Kích hoạt môi trường bị cô lập:
Đến đây bạn sẽ thấy rằng dấu nhắc của bạn có tiền tố là tên môi trường ảo của bạn:
Đến đây bạn đã kích hoạt môi
trường ảo của bạn, bạn sẽ sử dụng
Tiếp theo, bạn cần cài đặt ba phụ thuộc để hoàn thành hướng dẫn này:
Thêm các phần phụ thuộc sau vào file : request.txt
Lưu và đóng file . Cài đặt các phụ thuộc bằng cách truyền
Trong bước này, bạn cài đặt một môi trường ảo cho dự án của bạn và cài đặt các phụ thuộc cần thiết. Đến đây bạn đã sẵn sàng để bắt đầu viết mã để phát hiện khuôn mặt từ hình ảnh đầu vào trong bước tiếp theo. Bước 2 - Viết và chạy Tập lệnh dò tìm khuôn mặtTrong phần này, bạn sẽ viết mã lấy một hình ảnh làm đầu vào và trả về hai thứ:
Bắt đầu bằng cách tạo một file mới để giữ mã của bạn:
Trong file mới này, hãy bắt đầu viết mã của bạn bằng lệnh các thư viện cần thiết trước. Bạn sẽ nhập hai module ở đây: app.py
Tiếp theo, bạn sẽ chỉ định rằng hình ảnh đầu vào sẽ được chuyển làm đối số cho tập lệnh trong thời gian chạy. Cách
Pythonic để đọc đối số đầu tiên là gán giá trị được trả về bởi hàm app.py
Một thực tế phổ biến trong xử lý hình ảnh là trước tiên chuyển hình ảnh đầu vào sang thang màu xám. Điều này là do việc phát hiện độ sáng, trái ngược với màu sắc, nói chung sẽ mang lại kết quả tốt hơn trong việc phát hiện đối tượng. Thêm mã sau để lấy hình ảnh đầu vào làm đối số và chuyển nó thành thang độ xám: app.py
Hàm Đến đây bạn đã thêm mã để tải hình ảnh, bạn sẽ thêm mã phát hiện khuôn mặt trong hình ảnh được chỉ định: app.py
Đoạn mã này sẽ tạo một đối tượng Tiếp theo, mã áp
dụng phương thức Dưới đây là tóm tắt về các thông số khác mà mã của bạn sử dụng:
Sau khi tạo một danh sách các hình chữ nhật, các mặt sẽ được đếm bằng hàm Tiếp theo, bạn sẽ sử dụng phương thức app.py
Mã này sử dụng vòng lặp for để lặp qua danh sách các vị trí pixel được trả về từ phương thức
Đến đây bạn đã thêm mã để vẽ các hình chữ nhật, hãy sử dụng phương thức app.py
Cuối cùng, thêm mã này để in trả về trạng thái app.py
Tệp đã hoàn thành sẽ giống như sau: app.py
Khi bạn đã xác minh mọi thứ đã được nhập chính xác, hãy lưu file . Lưu ý: Mã này được lấy từ
tài liệu OpenCV có sẵn công khai. Mã của bạn đã hoàn tất và bạn đã sẵn sàng chạy tập lệnh. Bước 3 - Chạy tập lệnh Trong bước này, bạn sẽ sử dụng một hình ảnh để kiểm tra tập lệnh của bạn . Khi bạn tìm thấy hình ảnh bạn muốn sử dụng để kiểm tra, hãy lưu hình ảnh đó vào cùng folder với tập lệnh Nếu bạn muốn kiểm tra với cùng một hình ảnh, hãy sử dụng lệnh sau để download :
Khi bạn có hình ảnh để kiểm tra tập lệnh, hãy chạy tập lệnh và cung cấp đường dẫn hình ảnh làm đối số:
Khi tập lệnh chạy xong, bạn sẽ nhận được kết quả như sau:
Đầu ra
Bạn sẽ thấy rằng tập lệnh của bạn đã phát hiện bốn khuôn mặt trong hình ảnh đầu vào và vẽ các hình chữ nhật để đánh dấu chúng. Trong bước tiếp theo, bạn sẽ sử dụng các vị trí pixel để extract khuôn mặt từ hình ảnh. Bước 4 - Extract khuôn mặt và lưu chúng local (Tùy chọn)Trong bước trước, bạn đã viết mã để sử dụng OpenCV và Haar Cascade để phát hiện và vẽ các hình chữ nhật xung quanh các khuôn mặt trong một hình ảnh. Trong phần này, bạn sẽ sửa đổi mã của bạn để extract các khuôn mặt được phát hiện từ hình ảnh thành các file của riêng chúng. Bắt đầu
bằng cách mở lại file
Tiếp theo, thêm các dòng được đánh dấu dưới dòng app.py
Đối tượng Sau khi hoàn tất, mã lưu âm mưu
dưới dạng hình ảnh mới bằng phương thức Tập lệnh app.py
Tóm lại, mã được cập nhật sử dụng các vị trí pixel để extract các khuôn mặt từ hình ảnh thành một file mới. Khi bạn đã cập nhật xong mã, hãy lưu file . Đến đây bạn đã cập nhật mã, bạn đã sẵn sàng chạy tập lệnh :
Bạn sẽ thấy kết quả tương tự sau khi tập lệnh của bạn xử lý xong hình ảnh:
Tùy thuộc vào số lượng khuôn mặt trong hình ảnh mẫu của bạn, bạn có thể thấy kết quả nhiều hơn hoặc ít hơn. Nhìn vào nội dung của folder làm việc sau khi thực thi tập lệnh, bạn sẽ thấy các file cho ảnh chụp đầu của tất cả các khuôn mặt được tìm thấy trong hình ảnh đầu vào. Đến đây bạn sẽ thấy ảnh chụp đầu được extract từ hình ảnh đầu vào được thu thập trong folder làm việc: Trong bước này, bạn đã sửa đổi tập lệnh của bạn để extract các đối tượng được phát hiện từ hình ảnh đầu vào và lưu chúng local . Kết luậnTrong hướng dẫn này, bạn đã viết một tập lệnh sử dụng OpenCV và Python để phát hiện, đếm và extract các khuôn mặt từ hình ảnh đầu vào. Bạn có thể cập nhật tập lệnh này để phát hiện các đối tượng khác nhau bằng cách sử dụng Haar Cascade khác được đào tạo trước từ thư viện OpenCV hoặc bạn có thể tìm hiểu cách đào tạo Haar Cascade của riêng mình . Tags: Các tin liên quan Cách tạo bộ phân loại học máy bằng Python với Scikit-learning |