Vision Dataset / Self De-id

수동 비식별화

이미지를 올리고 비식별 구역을 지정하는 수동 비식별화 화면입니다.

수동 비식별화
작업 화면 위를 클릭해 첫 번째 점을 찍고, 다시 한 번 클릭해 반대 꼭짓점을 찍으면 사각형 bbox가 생성됩니다. 생성된 박스를 클릭하면 선택되고, 선택된 박스를 다시 클릭하면 삭제됩니다.
작업 화면
업로드된 이미지가 이 영역에 표시됩니다
원본 화면처럼 이미지 위에 비식별 구역을 올리는 방식
uploaded preview
생성 상태
현재 상태
첫 번째 점을 기다리는 중
비식별화 방식
마스킹 (#999)
선택 좌표
아직 선택된 점이 없습니다.
사용 순서
1. 첫 번째 클릭으로 시작점 지정
2. 두 번째 클릭으로 반대 꼭짓점 지정
3. 생성된 박스 클릭 시 선택
4. 선택된 박스 재클릭 시 삭제
현재 박스
아직 지정된 구역이 없습니다.
전송 JSON
{
  "prc": "gsd",
  "args": {
    "m": "demo-image",
    "d": []
  }
}
이후 프로세스
실제 운영 환경에서는 작업자가 지정한 구역 정보가 Python 기반 이미지 처리 단계로 전달되고, 이미지 라이브러리로 해당 좌표 구간을 가림 처리한 뒤 결과 파일을 다시 저장하는 흐름으로 이어졌습니다. 여기서는 데모용으로 현재 페이지가 전송 JSON을 만들고, 별도의 PHP 이미지 출력 파일이 그 좌표 구간을 가린 결과를 다시 렌더합니다.

from PIL import Image, ImageDraw

image = Image.open("input.jpg").convert("RGB")
draw = ImageDraw.Draw(image)

self_deid_query = [
    {"x1": 31.14, "y1": 52.85, "x2": 38.42, "y2": 71.26},
    {"x1": 40.35, "y1": 55.44, "x2": 45.67, "y2": 72.03},
]

width, height = image.size

for box in self_deid_query:
    left = int((box["x1"] / 100) * width)
    top = int((box["y1"] / 100) * height)
    right = int((box["x2"] / 100) * width)
    bottom = int((box["y2"] / 100) * height)
    draw.rectangle([left, top, right, bottom], fill="#999999")

image.save("output_masked.jpg")
비식별 적용 이미지
PHP 이미지 출력 데모
전송 JSON 기준으로 별도 PHP 이미지 출력 파일이 마스킹 처리된 결과 화면을 구성합니다.
렌더 결과
아직 생성된 결과가 없습니다
전송 JSON 옆의 버튼으로 결과 이미지를 만들어볼 수 있습니다.
redacted output preview
페이지 이동

같은 과제 안의 다른 화면으로 이동하거나 메인 개요 페이지로 돌아갈 수 있습니다.