목록으로 돌아가기
20262026-04-218분 읽기

Photo Selector 제작기 - AI로 사진 선별 시간을 줄이다

Photo Selector 제작기 - AI로 사진 선별 시간을 줄이다

Photo Selector 제작기 - AI로 사진 선별 시간을 줄이다

사진을 많이 찍는 날이면 문제는 촬영이 아니라 선별에서 시작됩니다. 비슷한 구도, 살짝 다른 표정, 연속 촬영으로 쌓인 수백 장의 사진을 하나씩 넘기다 보면 좋은 사진을 고르는 데 생각보다 많은 시간이 들어갑니다.

이번에 공개한 Photo Selector는 이 과정을 줄이기 위해 만든 로컬 전용 사진 선별 웹앱입니다. 사진 폴더를 선택하면 AI가 비슷한 사진을 씬별로 묶고, 각 씬에서 가장 좋은 후보를 먼저 추천합니다. 사용자는 추천 결과를 그대로 쓰거나, 씬 안의 다른 사진으로 직접 바꾼 뒤 최종 선택본만 내보낼 수 있습니다.

핵심은 “AI가 사진을 대신 골라준다”가 아닙니다. 사람이 반드시 봐야 하는 후보군을 줄이고, 비교 순서를 정리해서 선별 시간을 줄이는 것입니다.

왜 만들었나

기존 사진 정리 방식은 너무 수동적이었습니다. 마음에 드는 사진을 고르려면 전체 파일을 훑고, 비슷한 사진끼리 비교하고, 흔들림이나 눈 감음까지 직접 확인해야 했습니다.

특히 연속 촬영 사진은 더 번거롭습니다. 파일명만 보고는 어느 사진이 가장 나은지 알 수 없고, 썸네일만으로는 초점이나 표정을 판단하기 어렵습니다. 결국 같은 장면을 여러 번 확대해서 비교하게 됩니다. 사진을 잘 찍는 것보다 사진을 버리는 일이 더 어려워지는 순간입니다.

제가 원했던 것은 사진을 완전히 자동으로 결정해주는 프로그램이 아니라, 검토해야 할 양을 먼저 줄여주는 도구였습니다. AI가 1차로 묶고 추천하되, 마지막 판단은 사람이 할 수 있는 구조가 필요했습니다.

목표로 잡은 사용 경험

Photo Selector에서 가장 중요하게 본 사용 경험은 세 가지였습니다.

  1. 사진이 외부로 나가지 않아야 합니다.
  2. 비슷한 사진을 한 묶음으로 볼 수 있어야 합니다.
  3. AI 추천을 받되 최종 선택은 사용자가 바꿀 수 있어야 합니다.

이 기준 때문에 처음부터 로컬 전용 웹앱으로 설계했습니다. 복잡한 계정이나 클라우드 업로드 없이, 내 PC에서 사진 폴더를 선택하고 브라우저에서 결과를 확인하는 흐름이 가장 자연스러웠습니다.

핵심 기능

Photo Selector의 기본 흐름은 단순합니다.

  1. 사진 폴더를 선택합니다.
  2. AI가 중복과 비슷한 컷을 줄이고, 씬 단위로 그룹화합니다.
  3. 구도, 미적 점수, 얼굴 선명도, 표정, 눈 감음 여부 등을 종합해 대표 컷을 추천합니다.
  4. 브라우저 UI에서 씬별 추천 사진을 검토합니다.
  5. 제외할 씬은 빼고, 필요한 경우 직접 다른 사진을 선택합니다.
  6. 최종 선택본만 원하는 폴더로 복사합니다.

두 번째 실행부터는 캐시를 불러와 분석 시간을 줄일 수 있게 했습니다. 사진이 많은 폴더를 반복해서 검토할 때 특히 체감이 큽니다. 한 번 분석한 폴더를 다시 열 때 처음부터 모든 이미지를 다시 계산하지 않아도 되기 때문입니다.

선별 로직의 큰 흐름

분석 파이프라인은 크게 네 단계로 나눴습니다.

1. 이미지 로딩과 기본 전처리

먼저 선택한 폴더의 이미지 파일을 읽고, 분석 가능한 형식으로 정리합니다. 이 단계에서는 파일 경로, 썸네일, 이미지 크기, 캐시 여부를 함께 관리합니다. 사용자가 보는 UI와 분석 파이프라인이 같은 파일을 안정적으로 참조해야 하기 때문에, 초기에 파일 목록을 정돈하는 것이 중요했습니다.

2. 유사도 기반 그룹화

비슷한 사진을 묶기 위해 CLIP 임베딩을 활용했습니다. 이미지마다 임베딩을 만들고, 서로 가까운 사진을 같은 씬으로 묶는 방식입니다.

이 과정의 목적은 중복 제거가 아니라 비교 단위 축소입니다. 완전히 같은 사진만 찾는 것이 아니라, 같은 장면에서 조금씩 다른 후보들을 한 묶음으로 보여주는 것이 실제 선별에 더 유용했습니다.

3. 품질 점수 계산

대표 컷을 추천하기 위해 미적 점수, 선명도, 얼굴 관련 지표를 함께 사용했습니다. 풍경이나 사물 사진은 구도와 전체 품질이 중요하고, 인물 사진은 얼굴 선명도와 표정이 더 중요합니다.

얼굴이 있는 사진은 DeepFace와 OpenCV 기반 지표를 함께 사용해 표정, 얼굴 선명도, 눈 감음 가능성을 반영했습니다. 단순히 “비슷한 이미지”를 찾는 데서 끝내지 않고, 실제로 사람이 고를 만한 사진을 앞에 두는 데 집중했습니다.

4. 사용자 검토와 내보내기

AI가 추천한 대표 컷은 최종 결정이 아닙니다. 사용자는 씬별 후보를 확인하고, 마음에 들지 않으면 같은 씬 안의 다른 사진으로 바꿀 수 있습니다. 필요 없는 씬은 제외하고, 최종 선택본만 별도 폴더로 복사합니다.

이 구조 덕분에 자동화와 수동 검수 사이의 균형을 맞출 수 있었습니다. AI가 모든 판단을 강제하지 않고, 사람이 선택하기 쉬운 형태로 정리해주는 역할을 맡습니다.

기술적으로 신경 쓴 부분

이번 프로젝트는 Python 기반으로 구성했습니다. python app.py 한 줄로 Flask 웹앱이 실행되고, 브라우저에서 localhost:5000으로 접근하는 방식입니다.

분석 파이프라인에서는 CLIP 임베딩으로 사진 간 유사도를 비교하고, 미적 평가 모델로 기본 품질 점수를 계산했습니다. 얼굴이 있는 사진은 DeepFace와 OpenCV 기반 지표를 함께 사용했습니다. 사용자가 체감하는 결과는 “대표 컷 추천”이지만, 내부적으로는 유사도 계산, 품질 평가, 얼굴 분석, 캐시 관리가 함께 움직입니다.

또 하나 중요하게 본 부분은 보안입니다. 이 도구는 로컬 전용으로 설계했습니다. 앱 서버는 127.0.0.1에만 바인딩되며, 사진을 외부 서비스로 업로드하지 않는 구조입니다. 개인 사진을 다루는 도구이기 때문에 편의성보다 로컬 처리 원칙을 우선했습니다.

만들면서 배운 점

AI 도구를 만들 때 가장 중요한 것은 “AI가 어디까지 결정하게 할 것인가”를 정하는 일이라고 생각합니다. Photo Selector는 최종 판단까지 AI에게 맡기는 도구가 아닙니다. 대신 사람이 봐야 할 범위를 줄이고, 비교 순서를 정리해주는 보조자에 가깝습니다.

이 정도의 역할 분리가 실제 사용성에서는 더 안정적이었습니다. 추천은 빠르게 받고, 마음에 걸리는 장면은 직접 바꿀 수 있으니 자동화와 수동 검수 사이의 균형이 맞았습니다.

또 하나 느낀 점은, AI 기능보다 UX가 더 중요할 때가 많다는 것입니다. 아무리 좋은 점수를 계산해도 사용자가 씬별 후보를 빠르게 비교하지 못하면 선별 시간이 줄어들지 않습니다. 그래서 모델 성능만큼이나 썸네일 배치, 후보 전환, 선택본 내보내기 흐름이 중요했습니다.

현재 한계와 다음 개선 방향

아직 개선할 부분도 분명합니다.

  • 대량 사진 폴더에서 초기 분석 시간이 길어질 수 있습니다.
  • 인물 사진과 풍경 사진의 평가 기준을 더 세밀하게 분리할 필요가 있습니다.
  • 사용자가 직접 선택한 결과를 다음 추천에 반영하는 개인화 로직이 아직 부족합니다.
  • 후보 비교 UI는 더 빠르게 훑을 수 있도록 개선할 여지가 있습니다.

다음 단계에서는 사용자가 고른 사진과 제외한 사진의 패턴을 기록해, 개인 취향에 맞는 추천 가중치를 조정하는 방향을 생각하고 있습니다. 사진 선별은 정답이 하나인 문제가 아니라 취향과 목적이 섞인 문제이기 때문입니다.

마치며

Photo Selector는 거창한 서비스라기보다, 실제로 귀찮았던 일을 줄이기 위해 만든 작은 도구입니다. 하지만 만들고 나니 AI 도구의 방향에 대해 다시 생각하게 됐습니다.

좋은 AI 도구는 사람을 대체하는 것이 아니라, 사람이 판단해야 할 지점을 더 선명하게 만들어야 합니다. Photo Selector는 그 방향으로 만든 첫 번째 사진 선별 실험입니다.

프로젝트는 공개 저장소로 정리했습니다.

Photo Selector GitHub 바로가기