/ / Cách làm mờ khuôn mặt người trong thời gian thực bằng Python

Cách làm mờ khuôn mặt người trong thời gian thực bằng Python

Bạn có thể sử dụng tính năng làm mờ khuôn mặt để che giấu khuôn mặt của một người, trong video hoặc hình ảnh, vì một số lý do. Các vấn đề về quyền riêng tư và bảo mật là những vấn đề nổi bật nhất. Hầu hết các nền tảng chia sẻ video và phần mềm chỉnh sửa video đều tích hợp chức năng làm mờ khuôn mặt.


Bạn có thể tạo chương trình làm mờ khuôn mặt của riêng mình từ đầu bằng cách sử dụng Python và các thư viện OpenCV và NumPy.


Thiết lập môi trường của bạn

Để theo dõi hết bài viết này, bạn cần làm quen với kiến ​​thức cơ bản về Python và có hiểu biết cơ bản về cách sử dụng thư viện NumPy.

Mở bất kỳ IDE Python nào mà bạn cảm thấy thoải mái. Tạo một môi trường ảo trong đó bạn sẽ cài đặt các thư viện cần thiết. Tạo một tệp Python mới. Điều hướng đến thiết bị đầu cuối và chạy lệnh sau để cài đặt các thư viện cần thiết. Chuyển các thư viện dưới dạng danh sách được phân cách bằng dấu cách.

 pip install OpenCV-python NumPy 

Bạn sẽ sử dụng OpenCV để lấy và xử lý trước video đầu vào và NumPy để làm việc với các mảng.

Cài đặt thư viện trên thiết bị đầu cuối IDE

Sau khi bạn đã cài đặt các thư viện, hãy đợi IDE cập nhật bộ khung của dự án. Khi quá trình cập nhật hoàn tất và môi trường đã sẵn sàng, bạn có thể thoải mái bắt đầu viết mã.

Nhập các thư viện cần thiết

Bắt đầu bằng cách nhập các thư viện OpenCV và NumPy. Điều này sẽ cho phép bạn gọi và sử dụng bất kỳ chức năng nào họ hỗ trợ. Nhập OpenCV-python dưới dạng cv2.

 import cv2
import numpy as np

Các mô-đun OpenCV-python sử dụng tên cv2 như một quy ước mà cộng đồng OpenCV đã thiết lập. OpenCV-python là một trình bao bọc Python của thư viện OpenCV được viết bằng C++.

Nhận thông tin đầu vào của bạn

Tạo một biến và Khởi tạo biến Quay Video sự vật. Chuyển số 0 làm đối số nếu bạn muốn sử dụng máy ảnh chính của máy tính làm nguồn đầu vào. Để sử dụng máy ảnh bên ngoài được gắn vào máy tính của bạn, hãy vượt qua một. Để thực hiện làm mờ khuôn mặt trên video đã quay trước, thay vào đó hãy chuyển đường dẫn của video. Để sử dụng camera từ xa, hãy chuyển URL của camera chứa địa chỉ IP và số cổng.

 cap = cv2.VideoCapture(0)

Để thực hiện làm mờ khuôn mặt trên đầu vào, bạn sẽ cần ba chức năng:

  • Một chức năng sẽ xử lý trước đầu vào.
  • Một chức năng sẽ làm mờ khuôn mặt trong đầu vào.
  • Một chức năng chính sẽ kiểm soát dòng chảy của chương trình và hiển thị đầu ra.

Tiền xử lý đầu vào video

Tạo chức năng tiền xử lý đầu vào sẽ lấy từng khung hình của video đầu vào làm đầu vào. Khởi tạo lớp CascadeClassifier mà bạn sẽ sử dụng để nhận diện khuôn mặt. Thay đổi kích thước khung thành 640 x 640 pixel. Chuyển đổi khung đã thay đổi kích thước thành thang độ xám để xử lý dễ dàng hơn và cuối cùng phát hiện các khuôn mặt trong đầu vào và liên kết chúng bằng các hình chữ nhật.

 def image_preprocess(frame):
    face_detector = cv2.CascadeClassifier(cv2.data.haarcascades
        + 'haarcascade_frontalface_default.xml')

    resized_image = cv2.resize(frame, (640, 640))

    gray_image = cv2.cvtColor(resized_image,
        cv2.COLOR_BGR2GRAY)

    face_rects = face_detector.detectMultiScale(
        gray_image, 1.04, 5, minSize=(20, 20))

    return resized_image, face_rects

Hàm này trả về một bộ chứa hình ảnh đã thay đổi kích thước và danh sách các hình chữ nhật đại diện cho các khuôn mặt được phát hiện.

Làm mờ khuôn mặt

Tạo một chức năng làm mờ sẽ làm mờ các khuôn mặt trong đầu vào của bạn. Hàm lấy khung đã thay đổi kích thước và danh sách các hình chữ nhật bao quanh các mặt được hàm tiền xử lý trả về làm đầu vào. Vòng trên mỗi hình chữ nhật mặt. Tính tâm của mỗi hình chữ nhật và bán kính của vòng tròn mờ. Tạo một hình ảnh màu đen có cùng kích thước với khung đã thay đổi kích thước bằng cách khởi tạo tất cả các pixel thành 0. Vẽ một vòng tròn màu trắng trên hình ảnh màu đen có tâm nằm ở mặt hình chữ nhật bằng cách sử dụng bán kính đã tính toán. Cuối cùng, nó làm mờ hình ảnh trên vòng tròn màu trắng.

 def face_blur(resized_frame, face_rects):
    for (x, y, w, h) in face_rects:
        
        
        center_x = x + w // 3
        center_y = y + h // 3
        radius = h // 1

        
        
        mask = np.zeros((resized_frame.shape[:3]), np.uint8)

        
        cv2.circle(mask, (center_x, center_y), radius,
                   (255, 255, 255), -1)

        
        blurred_image = cv2.medianBlur(resized_frame, 99)

        
        
        
        resized_frame = np.where(mask > 0, blurred_image,
                                 resized_frame)

    return resized_frame

Hàm sử dụng NumPy Ở đâu() chức năng để tái tạo lại khung hình trong quá trình làm mờ.

Kiểm soát luồng chương trình của bạn

Tạo một chức năng chính sẽ đóng vai trò là điểm vào của chương trình của bạn. Sau đó, nó sẽ kiểm soát dòng chảy của chương trình. Chức năng này sẽ bắt đầu một vòng lặp vô hạn để chụp liên tục các khung hình của đầu vào video. Gọi phương thức đọc của đối tượng nắp để đọc khung hình từ máy ảnh.

Sau đó, hàm này sẽ chuyển khung hình tới hàm tiền xử lý và chuyển các giá trị trả về cho một hàm khác, face_blur, để thu được hình ảnh mờ. Sau đó, nó thay đổi kích thước khung được trả về bởi chức năng làm mờ và hiển thị đầu ra.

 def main():
    while True:
        success, frame = cap.read()
        resized_input, face_rects = image_preprocess(frame)
        blurred_image = face_blur(resized_input, face_rects)

        
        cv2.imshow("Blurred image", cv2.resize(blurred_image, (500, 500)))

        if cv2.waitKey(1) == ord("q"):
            break

Chức năng này cũng kết thúc hiển thị đầu ra khi người dùng nhấn phím q.

Chạy chương trình

Đảm bảo chức năng chính chạy trước khi bạn chạy tập lệnh. Điều kiện này sẽ sai nếu bạn nhập tập lệnh dưới dạng mô-đun trong chương trình khác.

 if __name__ == "__main__":
    main()

Điều này cho phép bạn sử dụng tập lệnh dưới dạng mô-đun hoặc chạy tập lệnh dưới dạng chương trình độc lập. Khi chương trình chạy, bạn sẽ thấy kết quả tương tự như sau:

Đầu ra của một chương trình trong IDE có khuôn mặt bị mờ

Khuôn mặt bị mờ và không thể nhận ra.

Các ứng dụng làm mờ khuôn mặt trong thế giới thực

Bạn có thể áp dụng làm mờ khuôn mặt trong nhiều loại ứng dụng để bảo vệ quyền riêng tư của mọi người. Các dịch vụ bản đồ và chế độ xem phố sử dụng tính năng làm mờ để làm mờ khuôn mặt của mọi người trong ảnh họ chụp. Cơ quan thực thi pháp luật làm mờ khuôn mặt để bảo vệ danh tính của nhân chứng.

Nhiều nền tảng chia sẻ video cũng đã tích hợp tính năng làm mờ khuôn mặt cho người dùng của họ. So sánh việc sử dụng tính năng làm mờ khuôn mặt ở những khu vực này sẽ giúp bạn quan sát cách các nền tảng khác tích hợp công nghệ.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *