iBetter Books
수정

세 번째 프로젝트는 방향이 다릅니다. 얼굴을 알아보는 대신 가립니다. 사진·영상 속 얼굴을 자동으로 모자이크 처리하는 프라이버시 도구입니다. 뉴스 영상의 행인, 공개 데이터셋의 배경 인물처럼 동의받지 않은 얼굴을 가려야 할 때 쓰는, 얼굴 기술의 책임 있는 활용입니다.

검출만 있으면 된다

이 프로젝트는 인식이 필요 없습니다. 누구인지 알 필요 없이, 얼굴이 있는 위치만 찾아 가리면 되기 때문입니다. PART 02의 검출기 하나면 충분합니다. 속도가 중요하면 YuNet, 작은·옆 얼굴까지 놓치지 않아야 하면 RetinaFace를 씁니다(프라이버시 도구는 하나라도 놓치면 안 되므로 정확도를 우선하는 경우가 많습니다).

flowchart LR A[이미지/영상] --> B[얼굴 검출
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를 만듭니다.