FirstPass (phototriage): 웨딩 사진작가를 위한 로컬 오픈 가중치(Open-Weight) 사진 선별 도구
요약
FirstPass (phototriage)는 웨딩 및 이벤트 사진작가를 위해 개발된 로컬 오픈 가중치 기반 CLI 도구입니다. 이 도구는 수천 장의 원본 사진에서 흐릿하거나 중복되는 이미지를 자동으로 식별하고, 보존해야 할 핵심 '키퍼(keepers)'를 분류합니다. 클라우드 업로드 없이 100% 오프라인으로 작동하여 개인 정보 보호를 최우선으로 합니다.
핵심 포인트
- 로컬 오픈 가중치 기반의 사진 선별 도구입니다.
- 수천 장의 원본에서 핵심 이미지를 자동으로 추출합니다.
- 클라우드 전송 없이 100% 오프라인으로 작동합니다.
- 개인 정보 보호를 중요시하는 사진작가 시장을 목표로 합니다.
이 글은 Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle에 제출하는 내용입니다.
제가 만든 것 (What I Built)
**FirstPass (phototriage)**는 솔로 웨딩 및 이벤트 사진작가를 위해 제작된, 개인 정보 보호를 최우선으로 하는 로컬 CLI(Command Line Interface) 및 시각 검토 도구입니다.
문제점 (The Problem)
10시간짜리 결혼식 후 메모리카드에는 3,000장의 프레임이 담겨 나옵니다. 하지만 사진작가가 전달하는 것은 400장뿐입니다.
이 사진들을 선별(Culling)하는 작업은 4~8시간에 달하는 지루하고 무급 노동입니다: 거의 동일한 버스트샷 중에서 아무도 눈을 깜빡이지 않은 단 한 장의 프레임을 찾아내고, 모션 블러를 폐기하며, 피로연 순간들을 그룹화해야 합니다. 이는 이벤트 사진 촬영에서 가장 싫어하는 작업이며, 촬영 후 아드레날린이 남아있는 상황에서 촉박한 납품 마감 기한과 함께 발생합니다.
누가 비용을 지불할까요? (Who Would Pay For It?)
솔로 웨딩 및 인물 사진작가는 현재 Aftershoot, Narrative Select 또는 Imagen 같은 클라우드 기반 선별 도구에 매월 20달러에서 40달러를 지불하고 있습니다.
FirstPass는 명확하고 정직한 약속으로 이 정확한 시장을 목표로 합니다:
1. 28프레임 합성 촬영 세트 생성 (흐릿한 사진, 연속 촬영, 보케 효과, 선명한 원본)
python scripts/make_fixtures.py /tmp/demo-shoot
...
코드
전체 소스 코드, 합성 벤치마크 생성기 및 테스트 스위트는 GitHub에서 확인할 수 있습니다:
GitHub logo Big0boy / phototriage
로컬 오픈 가중치 AI를 사용하여 흐릿하거나 거의 중복되는 사진을 찾고, 보존할 원본(keepers)을 분류하세요.
phototriage (FirstPass)
카드에서 3,000프레임이 나옵니다. 사진작가는 400개만 보고 싶어 합니다.
흐릿하거나 거의 중복되는 사진을 찾고, 오픈 가중치 모델로 완전히 자체 장비에서 보존할 원본(keepers)을 분류하세요.
어떤 것도 업로드되지 않습니다. --ai 실행 시 유일한 선택적 네트워크 접근은 오픈 CLIP 가중치를 ~/.cache/huggingface/에 일회성으로 다운로드하는 것입니다. 그 이후부터는 도구가 100% 오프라인에서 작동합니다. 클라이언트 사진, 썸네일 또는 점수는 절대 사용자의 장비를 벗어나지 않습니다.
누가 사용해야 할까요?
- 개인 웨딩 및 이벤트 사진작가: 한 이벤트당 2,000
4,000프레임을 촬영하고 거의 동일한 연속 촬영 프레임을 수동으로 선별하는 데 이벤트당 48시간의 유급 시간이 소요되는 경우. - 사생활 보호에 민감한 전문가: 클라이언트 계약서가 미공개 사진을 제3자 클라우드 AI 공급업체에 업로드하는 것을 점점 더 금지하고 있습니다. phototriage는 완전히 로컬에서 실행되므로, 이미지당 추가 비용 없이 사생활 보호 조항을 충족합니다.
- 대규모 사진 촬영이 필요한 모든 사람: 주관적인 판단을 내리지 않으면서 기술적 오류와 보존할 원본(keepers)을 분리하는 자동화되고 설명 가능한 첫 번째 선별 과정을 찾는 경우.
- 언어: Python 3.9+
- 패키징:
pip install -e .을 통해phototriageCLI 진입점을 사용하여 직접 설치 가능. - 테스트 스위트: 합성 인메모리 피처(synthetic in-memory fixtures)에서 실행되는 43개의 자동화된 테스트(
pytest tests -q).
제가 구축한 방법
FirstPass는 엄격한 계층 구조로 구축되었습니다: **가장 먼저 저렴한 수학적 게이트(cheap mathematical gates), 두 번째로 로컬 오픈 가중치 신경망(local open-weight neural networks), 그리고 파일 수준에서의 절대적인 역변환 가능성(absolute reversibility)**입니다.
[ Camera JPEGs ]
│
▼
...
1. 보케(Bokeh)를 유지하는 초점 측정 지표 (Bokeh-Preserving Focus Metric)
일반적인 블러 감지기는 전역 이미지 분산도(global image variance)를 계산합니다. 웨딩 사진의 경우, 이는 완전히 실패합니다: $f/1.4$로 촬영한 인물 사진은 눈은 매우 선명하지만 배경은 부드럽게 흐릿하게 처리됩니다. 전역 평균화는 이를 "흐림"으로 간주하여 그날 최고의 사진을 삭제해 버립니다.
FirstPass는 이미지를 $32 \times 32\text{px}$ 타일 그리드로 분할하고, 각 타일에 대해 라플라시안 분산도(Laplacian variance)를 계산한 후, 가장 선명한 상위 2%의 타일만 평균화합니다. 작고 중앙에서 벗어난 피사체(예: 프레임의 3%를 차지하는 신부의 얼굴)는 보존되는 반면, 실제 모션 블러는 즉시 포착됩니다.
2. 이중 신호 버스트 클러스터링 (Dual-Signal Burst Clustering)
3.0초 이내에 촬영된 연속 사진(bursts)들은 그룹화되며, 가장 선명한 프레임 하나만이 보존본으로 지정됩니다. 컨페티, 자갈 또는 레이스 같은 미세한 질감이 동일한 해시로 잘못 붕괴되는 것을 방지하기 위해, FirstPass는 다음 두 가지 모두를 요구합니다:
- 64비트 차이 해시(dHash), 그리고
- 평균 중심화 및 스케일 정규화된 $16 \times 16$ 그레이스케일 시그니처 피어슨 상관관계($\ge 0.92$).
3. 오픈 가중치 CLIP (openai/clip-vit-base-patch32)
- 허용적인 MIT 라이선스 하에 제공되는 오픈 가중치(open weights)로 구동됩니다.
- 한 번 다운로드하면(~600 MB)
~/.cache/huggingface/에 저장되며, 100% 오프라인에서 실행됩니다. - 자연어 프롬프트("결혼식", "장식, 테이블 세팅 및 디테일", "함께 포즈를 취하는 두 사람")와 비교하여 제한된 메모리 배치로 사진을 평가합니다.
- 핵심 규칙: 이 모델은 라벨링하고 정리하는 데 사용되며, 삭제하는 데는 절대 사용되지 않습니다. 삭제 결정은 엄격하게 수학적이며 설명 가능해야 합니다.
오픈 혁신이 중요한 이유 (Why Does Open Innovation Matter?)
오픈 소스 및 오픈 가중치 모델들은 단순히 이 프로젝트의 구현 선택 사항이 아닙니다 — 그것 자체가 전체 상업적 논지(commercial thesis)입니다:
- 클라이언트 계약서가 폐쇄형 API를 금지합니다: 웨딩 커플들은 법적 구속력이 있는 계약서에 서명합니다. 증가하는 수의 현대적인 계약서는 원본 클라이언트 사진을 제3자 상업용 클라우드 AI 서비스에 전송하지 않는다고 명시하고 있습니다. 독점 클라우드 도구(Aftershoot, Narrative)는 이러한 계약 조건을 충족할 수 없습니다. 오픈 가중치 모델을 로컬에서 실행하는 것이 포토그래퍼가 _“당신의 사진은 절대 내 기기를 벗어나지 않는다”_라고 계약서에 명시할 수 있는 유일한 방법입니다.
- 연간 90,000 프레임에 걸친 $0 한계 비용: $3,000\text{ 프레임} \times 30\text{ 건의 웨딩} = 90,000\text{ 이미지/년}$. 이미지당 클라우드 API를 사용하면 토큰 및 추론(inference) 비용이 프리랜서 마진을 직접적으로 잠식합니다. 포토그래퍼가 보유한 기존 MacBook이나 노트북에서 로컬로 실행할 경우, 이미지당 한계 비용은 사실상 0입니다.
- 와이파이가 없는 현장에서도 작동: 포토그래퍼들은 집으로 돌아가기 전에 비행기 안, 산장의 오두막, 또는 와이파이가 열악한 호텔 방에서 사진을 선별(cull)합니다. FirstPass는 인터넷 연결이 전혀 필요하지 않습니다.
- 교체 가능한 아키텍처: CLIP은 오픈 소스이기 때문에, 모터스포츠나 실내 리셉션을 촬영하는 포토그래퍼가 공급업체의 허락을 구하지 않고도 체크포인트(
--model <HF_ID>)를 교체하거나 사용자 지정 레이블 파일을 제공할 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기