세 번째 프로젝트는 방향이 다릅니다. 얼굴을 알아보는 대신 가립니다. 사진·영상 속 얼굴을 자동으로 모자이크 처리하는 프라이버시 도구입니다. 뉴스 영상의 행인, 공개 데이터셋의 배경 인물처럼 동의받지 않은 얼굴을 가려야 할 때 쓰는, 얼굴 기술의 책임 있는 활용입니다.
검출만 있으면 된다
이 프로젝트는 인식이 필요 없습니다. 누구인지 알 필요 없이, 얼굴이 있는 위치만 찾아 가리면 되기 때문입니다. PART 02의 검출기 하나면 충분합니다. 속도가 중요하면 YuNet, 작은·옆 얼굴까지 놓치지 않아야 하면 RetinaFace를 씁니다(프라이버시 도구는 하나라도 놓치면 안 되므로 정확도를 우선하는 경우가 많습니다).
PART 02] B --> C[각 얼굴 영역
모자이크/블러] C --> D[가려진 결과]
모자이크와 블러
얼굴을 가리는 방법은 두 가지가 흔합니다.
- 모자이크(픽셀화): 얼굴 영역을 잘게 줄였다가 다시 키워 픽셀을 뭉갭니다. 격자무늬 효과.
- 블러(흐림): 가우시안 블러로 부드럽게 흐립니다.
# 파일: face_mosaic.py"""검출한 얼굴을 모자이크(픽셀화) 처리한다."""import cv2detector = cv2.FaceDetectorYN.create( "face_detection_yunet_2023mar.onnx", "", (320, 320), 0.7, 0.3, 5000)def pixelate(region, blocks=12): h, w = region.shape[:2] # 작게 줄였다가 원래 크기로 키우면 픽셀이 뭉개진다 small = cv2.resize(region, (blocks, blocks), interpolation=cv2.INTER_LINEAR) return cv2.resize(small, (w, h), interpolation=cv2.INTER_NEAREST)def mosaic_faces(img): h, w = img.shape[:2] detector.setInputSize((w, h)) _, faces = detector.detect(img) if faces is not None: for f in faces: x, y, bw, bh = f[:4].astype(int) x, y = max(x, 0), max(y, 0) # 경계 보정 roi = img[y:y + bh, x:x + bw] if roi.size: img[y:y + bh, x:x + bw] = pixelate(roi) return imgimg = cv2.imread("input.jpg")cv2.imwrite("mosaic_result.jpg", mosaic_faces(img))

pixelate가 모자이크의 핵심입니다. 얼굴 영역을 12×12처럼 아주 작게 줄였다가 원래 크기로 늘리면, 정보가 사라진 굵은 픽셀 격자가 됩니다. 검출기가 찾은 모든 얼굴에 이 처리를 적용하면 자동 모자이크가 완성됩니다. 블러를 원하면 pixelate 대신 cv2.GaussianBlur(roi, (51, 51), 0)을 쓰면 됩니다.
영상에 적용하기
영상은 프레임마다 같은 처리를 반복하면 됩니다.
# 파일: video_mosaic.py (개념)cap = cv2.VideoCapture("input.mp4")# VideoWriter로 출력 영상 준비 후while True: ok, frame = cap.read() if not ok: break writer.write(mosaic_faces(frame)) # 같은 함수 재사용
mosaic_faces 함수 하나를 프레임마다 호출하는 것이 전부입니다. 다만 영상은 한 프레임이라도 검출을 놓치면 그 순간 얼굴이 노출되므로, 검출 임계값을 낮춰 민감하게 잡거나 더 정확한 검출기를 쓰는 것이 안전합니다.
프라이버시 도구의 책임
가리는 도구라고 책임에서 자유롭지는 않습니다.
- 놓침 주의: 검출이 실패하면 얼굴이 그대로 노출됩니다. 공개 전 반드시 사람이 검수합니다.
- 복원 불가: 진짜 프라이버시 보호라면 원본을 따로 남기지 말고, 모자이크가 복원 불가능한지(약한 블러는 일부 복원 가능) 확인합니다.
- 얼굴 외 정보: 이름표·번호판·문신 등 얼굴 외 식별 정보도 함께 가려야 할 수 있습니다.
실무 팁. 모자이크 강도(픽셀 블록 수)는 "복원 불가능할 만큼 충분히 굵게"가 기준입니다. 블록을 너무 많이 두면(예: 30×30) 형태가 남아 누구인지 짐작될 수 있습니다. 프라이버시가 목적이라면 블록을 충분히 적게(굵게, 예: 8~12) 두어 이목구비가 완전히 사라지게 하세요. 약한 블러나 가는 모자이크는 보기엔 가려진 듯해도 정보가 남을 수 있습니다.
이 장에서 기억할 것
얼굴 모자이크는 인식 없이 검출(PART 02)만으로 만드는 프라이버시 도구로, 얼굴 영역을 잘게 줄였다 키워 픽셀을 뭉개거나(모자이크) 가우시안 블러로 흐립니다. mosaic_faces 함수를 프레임마다 호출하면 영상에도 적용됩니다. 검출 놓침·복원 가능성·얼굴 외 정보에 주의하고, 공개 전 사람의 검수를 거칩니다. 다음 장에서는 이런 결과들을 누구나 써 볼 수 있게 Gradio로 데모 UI를 만듭니다.