증명사진 자동 보정 서버. 키오스크 촬영 원본을 받아 얼굴 크롭, 톤 보정, 배경 제거, 얼굴 복원을 수행하고 결과를 반환한다. FastAPI + Celery 기반, Python.
- 개발 형태: 1인 설계 / 구현 / 운영
- 기간: 2025.06~ (진행 중)
배경
키오스크 촬영 사진의 보정이 사람 손에 의존하고 있었다. 조명 환경, 카메라 설정, 프린터 특성이 현장마다 다르고, 소프트웨어 단의 이미지 보정이 전무한 상태. 현장 직원이 카메라 드라이버 값을 수동 조정하는 방식이라 촬영 품질이 기기마다 달랐고, 일관된 출력을 보장할 수 없었다.
조명이 어둡든 밝든, 색온도가 치우쳐 있든 관계없이 동일한 출력 품질을 만들어내는 서버가 필요했다.
해결

FastAPI + Celery 기반 이미지 보정 서버를 설계하고 구현했다. 키오스크가 촬영 원본을 HTTP로 전송하면, 서버에서 얼굴 감지부터 최종 복원까지 전체 파이프라인을 자동 실행하고 결과를 반환한다.
5단계 자동 톤 보정. 이미지의 밝기 분포와 채널 비율, 컬러 불균형 지수를 수치 분석한 뒤, 얼굴 기반 밝기 조정, 히스토그램 레벨, 색온도 보정, LAB 컬러 밸런스, 딥러닝 화이트밸런스를 순서대로 적용한다. 각 단계의 파라미터가 이미지 특성에 따라 자동 조절되며, 이전 단계의 결과를 기반으로 다음 단계가 동작하는 구조.
4종 AI 모델 통합. MediaPipe로 얼굴을 감지하고 크롭하며, Deep WB U-Net으로 화이트밸런스를 보정하고, InSPyReNet으로 배경을 제거하며, GFPGAN으로 얼굴을 복원한다. 모델마다 입출력 형식, 해상도 제약, GPU/CPU 요구가 모두 다르지만 단일 파이프라인에서 순차 실행된다. 어느 단계에서 실패해도 원본을 유지하는 구조.
비동기 처리 아키텍처. Celery + Redis 태스크 큐로 ML 추론을 비동기 처리한다. 리버스 프록시가 복수의 클라이언트 환경을 분리하고, 환경별로 파이프라인 옵션을 달리 적용한다. Supabase 업로드는 fire-and-forget으로 처리하여 응답 지연에 영향을 주지 않는다.
기술 스택
| 영역 | 기술 | 적용 |
|---|---|---|
| API / 비동기 | FastAPI, Celery, Redis | 6개 엔드포인트, 태스크 큐, 결과 브로커 |
| 이미지 처리 | OpenCV, NumPy, PIL | 존 분석, 히스토그램 레벨, 색온도, 컬러 밸런스 |
| AI 모델 | PyTorch, GFPGAN, InSPyReNet | 얼굴 복원, 배경 제거, 화이트밸런스 |
| 얼굴 감지 | MediaPipe | 얼굴 탐지, 랜드마크 검출, 뺨 밝기 측정 |
| 스토리지 | Supabase | 이미지 저장, 디바이스 관리, API 로그 |
| 프록시 | httpx, uvicorn | 환경 분리, 요청 라우팅 |
문서 구성
| 문서 | 내용 |
|---|---|
| 01-자동-보정-파이프라인 | 5단계 AutoMastering, 존 분석, 얼굴 기반 밝기, 히스토그램 레벨, 적응적 화이트밸런스 |
| 02-딥러닝-모델-통합 | Deep WB 파이프라인 통합, 피부 보호 마스크, GFPGAN 얼굴 복원, InSPyReNet 배경 제거 |
| 03-서비스-아키텍처 | FastAPI + Celery 비동기 파이프라인, 프록시 환경 분리, 지연 초기화 |