Preveil은 사진 속 얼굴·신원·차량·연락처·주거지·위치정보를 분석하고, 사용자가 선택한 민감 영역을 보호한 뒤 안전하게 공유할 수 있는 결과 이미지를 만드는 AI 기반 이미지 프라이버시 보호 서비스입니다.
단순한 블러 처리에 그치지 않고 얼굴 딥페이크 방어, EXIF 메타데이터 검사, 프롬프트 기반 이미지 편집 후 개인정보 보호 재적용까지 하나의 흐름으로 제공합니다.
![]() 홈 사진 보호 시작 |
![]() 사진 선택 다중 이미지 업로드 |
![]() 안전점검 사진별 위험 요소 확인 |
![]() 보호 옵션 민감정보별 처리 선택 |
![]() 보호 처리 AI 학습 방지 및 식별정보 보호 |
![]() 처리 결과 Before·After 결과 확인 |
![]() 게시 준비 프롬프트와 사진 확인 |
![]() SNS 게시 보호된 결과 공유 |
![]() 처리 기록 보호 옵션과 결과 관리 |
![]() 업데이트 알림 새 딥페이크 모델 대응 안내 |
![]() 기존 게시물 재보호 새 보호 모델로 선택 업데이트 |
- Frontend: tech4good-One-T/frontend
- Backend: tech4good-One-T/backend
- AI Server: tech4good-One-T/aiserver
React Native App
-> FastAPI Backend
-> PostgreSQL + RabbitMQ + Celery Worker
-> FastAPI AI Server
-> Gemini + OpenCV + FaceShield
-> AWS S3
사진을 SNS나 웹에 게시하기 전에 사용자가 미처 발견하지 못한 개인정보 노출 위험을 알려주고, 필요한 정보만 선택적으로 보호해 원본의 활용성과 프라이버시를 함께 지키는 것을 목표로 합니다.
- 얼굴 이미지의 딥페이크 학습·합성 악용 위험 완화
- 신분증, 이름, 연락처, 차량 번호판 등 시각적 개인정보 탐지
- 주소, 건물명, 촬영 위치 등 생활 반경을 유추할 수 있는 단서 보호
- EXIF GPS 메타데이터 탐지 및 제거
- 편집 결과에도 개인정보 보호 정책을 다시 적용해 보호 우회 방지
- 이미지 속 개인정보 노출 요소와 좌표 분석
- 얼굴, 신원, 차량, 연락처, 주거지, 건물, 위치정보별 위험도 제공
- 이미지 픽셀 분석과 별도로 EXIF GPS 메타데이터 직접 검사
- 사용자가 선택한 개인정보 영역 블러 처리
- 건물명, 차량 번호판, 이름·명찰 등 항목별 보호 옵션 제공
- 보호 결과를 메타데이터가 제거된 PNG로 생성
- 얼굴이 탐지되면 선택 여부와 관계없이 FaceShield 보호 적용
- 보호 처리 실패 시 보호되지 않은 결과를 반환하지 않는 fail-closed 정책
- 보호 결과를 기준으로 사용자 요청에 따른 이미지 후처리
- LangChain을 이용한 편집 요청 구조화와 정책 검증
- 편집된 이미지를 다시 분석하고 개인정보 마스킹과 얼굴 보호 재적용
- 원본을 덮어쓰지 않는 버전형 결과 관리
- 비동기 이미지 처리 상태 조회
- 처리·편집 결과의 버전과 부모 결과 추적
- 결과 이미지 저장 및 히스토리 확인
- 사용자가 앱에서 사진을 선택합니다.
- Backend가 원본을 S3에 저장하고 AI Server에 분석 작업을 요청합니다.
- AI Server가 이미지의 위험 요소, 좌표, EXIF GPS 여부를 분석합니다.
- 사용자가 보호할 민감 영역과 처리 옵션을 선택합니다.
- 선택 영역에는 OpenCV 블러를, 탐지된 얼굴에는 FaceShield 보호를 적용합니다.
- 결과 이미지의 메타데이터를 제거하고 S3에 저장합니다.
- 추가 편집이 요청되면 편집 결과를 다시 분석해 보호 파이프라인을 재적용합니다.
- Backend가 각 결과를 버전별로 관리하고 앱에 안전한 접근 URL을 제공합니다.
- 사진 선택과 다중 업로드
- 사진별 위험 분석 결과 확인
- 개인정보 보호 옵션 선택
- 처리 진행 상태, 결과, 히스토리 제공
- 라이트·다크 테마 지원
- 모바일 앱용 REST API 제공
- S3 원본·결과 객체 및 Presigned URL 관리
- PostgreSQL 기반 분석 작업·처리 작업·결과 버전 관리
- RabbitMQ와 Celery를 이용한 비동기 AI 작업 처리
- 장시간 정체된 작업을 정리하는 타임아웃 스위퍼 운영
- Gemini 기반 이미지 위험 요소 분석
- 이미지 형식 검증, EXIF 회전 보정, GPS 메타데이터 검사
- OpenCV 기반 선택 영역 블러 처리
- FaceShield 기반 얼굴 딥페이크 방어
- LangChain과 이미지 생성 모델을 이용한 프롬프트 편집
- 편집 결과 개인정보 재분석 및 보호 재적용
| 분류 | 보호 대상 예시 |
|---|---|
| 얼굴·딥페이크 | 사람 얼굴, 얼굴 도용 및 합성 위험 |
| 신원정보 | 신분증, 여권, 학생증, 이름, 생년월일, 명찰 |
| 차량정보 | 차량 번호판, 주차 스티커, 차량 연락처 |
| 연락처·계정 | 전화번호, 이메일, SNS 아이디, 명함 |
| 주거정보 | 도로명 주소, 지번 주소, 아파트 동·호수 |
| 건물정보 | 아파트 브랜드, 건물명, 학교명, 회사명 |
| 위치정보 | EXIF GPS, 촬영 장소, 여행·일정 단서 |
| 영역 | 기술 |
|---|---|
| Mobile | React Native, Expo, TypeScript, React Navigation |
| Backend | FastAPI, SQLAlchemy, Alembic, Celery |
| AI Server | FastAPI, Gemini, LangChain, OpenCV, Pillow, FaceShield |
| Data & Queue | PostgreSQL, RabbitMQ |
| Storage | AWS S3, Presigned URL |
| Infrastructure | Docker, Docker Compose, AWS EC2, AWS SSM |
| CI/CD | GitHub Actions, GitHub Container Registry |
각 저장소를 내려받은 뒤 아래 명령으로 실행하거나 구현 상태를 확인할 수 있습니다.
요구사항: Node.js, npm
git clone https://github.com/tech4good-One-T/frontend.git
cd frontend
npm install
npm run startnpm run ios: iOS 시뮬레이터 실행npm run android: Android 에뮬레이터 실행npm run web: 웹 환경에서 확인npm run typecheck: TypeScript 정적 검사
요구사항: Python 3.12, uv, Docker, Docker Compose
git clone https://github.com/tech4good-One-T/backend.git
cd backend
uv sync --dev
uv run pytest외부 서비스 없이 전체 흐름을 확인하려면 MinIO와 Mock AI Server가 포함된 로컬 스택을 실행합니다.
cp .env.example .env
docker compose -f docker-compose.yml -f docker-compose.local.yml up -d --build- Backend API:
http://localhost:8000 - Swagger UI:
http://localhost:8000/docs - Health Check:
http://localhost:8000/api/v1/health
요구사항: Python 3.12, uv
git clone https://github.com/tech4good-One-T/aiserver.git
cd aiserver
uv sync --dev
cp .env.example .env
uv run uvicorn app.main:app --env-file .env --reload --host 0.0.0.0 --port 8000- Swagger UI:
http://localhost:8000/docs - Health Check:
http://localhost:8000/health - 테스트:
uv run pytest - 린트·포맷 검사:
uv run ruff check . && uv run ruff format --check .
Gemini 연동에는 API 키와 스토리지 호스트 설정이 필요합니다. 얼굴 보호 전체 기능은 FaceShield, NVIDIA CUDA GPU, 별도 Python 3.8 conda 환경이 필요합니다.
- AI Server는 입력 이미지와 탐지한 개인정보 원문을 영구 저장하지 않습니다.
- Presigned URL, 이미지 내용, EXIF/GPS 값, 편집 프롬프트를 로그에 남기지 않습니다.
- HTTPS와 허용된 스토리지 호스트·버킷·객체 경로만 사용합니다.
- 분석 이미지와 처리 이미지의 SHA-256을 비교해 중간 이미지 교체를 방지합니다.
- 개인정보 보호를 해제하거나 복원하려는 편집 요청은 모델 호출 전에 거부합니다.
- 얼굴 보호 또는 편집 후 재보호에 실패하면 안전하지 않은 결과를 업로드하지 않습니다.
main브랜치 push와 Pull Request에서 린트·포맷·테스트를 자동 검증합니다.- 애플리케이션 이미지는 GitHub Container Registry에 버전별로 게시합니다.
- GitHub OIDC와 AWS SSM을 이용해 장기 AWS 자격 증명 없이 EC2에 배포합니다.
- Backend와 AI Server는 독립적으로 배포해 각 서비스의 확장성과 장애 격리를 확보합니다.
| 성명 | 역할 |
|---|---|
| 김영운 | 팀장 |
| 민륜기 | 개발(AI) |
| 박민정 | 개발(AI) |
| 박수빈 | 기획 |
| 우혜성 | 개발(백엔드) |
| 이아형 | 기획 |
| 정승윤 | 개발(프론트) |
| 천정민 | 디자인(장표) |












