VIết bài nhiều lúc tôi phải che mặt người trong ảnh, kiểu chỉ làm ví dụ thôi. Tôi thử sử dụng ChatGPT nhưng lúc che được lúc không. Sau đó thì dán dán. Cuối cùng nghĩ mình là người lập trình mà, nên tôi làm 1 cái tool đơn giản bằng python dưới sự hỗ trợ của Chat GPT. Nếu biết lập trình, mọi việc đơn giản.
Các bạn có thể test kết quả tại đây: https://app.itcctv.vn/removeface. upload hình lên, và tải hình xuống thôi ạ.
Để lập trình thì làm như sau nhé!
Bạn cần cài đặt thư viện OpenCV và Mediapipe:
pip install mediapipe opencv-python
Dưới đây là hàm che khuôn mặt:
def remove_faces_with_color(image_stream, color,output_path):
# Đọc dữ liệu ảnh từ stream
file_bytes = np.frombuffer(image_stream.read(), np.uint8)
img = cv2.imdecode(file_bytes, cv2.IMREAD_COLOR)
# Chuyển màu từ HEX sang BGR
hex_color = color.lstrip("#")
rgb_color = tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4))
bgr_color = (rgb_color[2], rgb_color[1], rgb_color[0])
# Khởi tạo Mediapipe Face Detection
mp_face_detection = mp.solutions.face_detection
# Sử dụng Mediapipe để phát hiện khuôn mặt
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
with mp_face_detection.FaceDetection(model_selection=1, min_detection_confidence=0.5) as face_detection:
results = face_detection.process(img_rgb)
# Kiểm tra nếu có khuôn mặt được phát hiện
if results.detections:
for detection in results.detections:
# Lấy tọa độ bounding box của khuôn mặt
bboxC = detection.location_data.relative_bounding_box
ih, iw, _ = img.shape
x, y, w, h = int(bboxC.xmin * iw), int(bboxC.ymin * ih), \
int(bboxC.width * iw), int(bboxC.height * ih)
# Che phủ mặt bằng màu được chọn
cv2.rectangle(img, (x, y), (x + w, y + h), bgr_color, -1)
cv2.imwrite(output_path, img)
print(f"Ảnh đã được lưu tại {output_path}")