← Projects

멀티모달 임베딩 + 게임

POSTERDLE

영화 포스터 맞히기 게임 · 10번의 단서, 한 번의 선택.

  • Python
  • EmbeddingGemma 2
  • FastAPI
  • Vite
  • VLM
  • EasyOCR · LaMa
  • Cloudflare Tunnel

Think Flow

비정형 데이터를, 비정형으로 찾을 수 있는 도구가 나왔습니다.

사진과 단어가 같은 공간에 있습니다.

우리는 이것을 이용하여 어떤 걸 만들 수 있을까요?

사람은 포스터를 보고 "비 오는 밤"이라고 말합니다.

AI는 같은 포스터를 768개의 숫자로 봅니다.

둘은 얼마나 가까울까요?

10번의 단서, 한 번의 선택.

How it works

어떻게 플레이하나요?

사용자단서 입력
임베딩텍스트 → 벡터
행렬곱 한 번포스터와 비교
결과N위 · S점
최고 순위 NN장 중 선택

↺ 단서는 최대 10번. 막히면 원할 때 힌트를 열고, 최고 순위가 20위 안에 들면 남은 단서를 건너뛰고 바로 고를 수 있습니다

임베딩 모델의 계산 사용자의 선택

01 · 같은 공간

그림과 말을 그대로 비교합니다

포스터
단서 비 오는 밤
→
768차원 공간
  • KOBIS 주간 박스오피스(2003년~)에서 흥행작을 고르고, TMDB에서 포스터를 받아 정답 후보 1,327편을 만들었습니다. 캐주얼 모드는 그중 주간 1위를 한 549편입니다.
  • 포스터를 장르·색상 같은 태그로 바꾸지 않고 이미지 그대로 임베딩합니다. 사용자의 단서도 같은 모델로 같은 공간에 놓습니다.
  • 수천 장 규모라 벡터 DB 없이 넘파이 배열 하나로 전수 비교합니다. 모델은 SigLIP 2와 비교한 뒤 다국어 EmbeddingGemma 2 (4.4억 파라미터)로 정했습니다.
1,327편정답 후보 포스터
(시네필 모드 기준)
약 85ms단서 하나를 채점하는 시간
(CPU, GPU 없음)

02 · 포스터 속 글자

모델이 글자를 읽는다는 걸 알게 됐습니다

  • 원본 포스터에 영화 제목을 단서로 넣으면 78.7%가 바로 1위였습니다. 모델이 그림보다 포스터에 적힌 제목을 읽고 있었습니다.
  • EasyOCR로 글자를 찾고 LaMa로 지운 포스터를 따로 임베딩하자 같은 비율이 17%로 내려갔습니다. 화면에는 계속 원본을 보여 줍니다.
  • 두 벡터를 원본 0.42 + 글자 지움 0.58로 섞어 채점합니다. 비율은 GPT가 쓴 묘사 약 8만 개를 모두 채점해서 찾았습니다.

힌트 2개를 합친 묘사로 맞힐 때의 평균 점수 (100점 만점)

원본만62.9
글자 지움67.5
섞음69.6

03 · 순위와 점수

유사도 대신 "몇 번째로 가까운가"를 보여 줍니다

예시 · 캐주얼 모드 549편 중 정답의 순위

우주첫 단서
312위9점
비 오는 밤방향을 바꿔 봄
48위39점
비 오는 밤 우산 쓴 두 사람이전 단서에 이어 붙임
4위78점 → 건너뛰기 가능

점수는 로그 눈금유사도 원값은 좁은 구간에 몰려 차이가 느껴지지 않습니다. 그래서 순위를 100 × (1 − ln N / ln 풀 크기)로 바꿨습니다. 1위 100점, 5위 74점, 20위 52점(세로선)입니다.

단서는 하나씩 따로 채점시스템이 단서를 합치지 않습니다. 좁히고 싶으면 사용자가 직접 앞 단서를 이어 붙여 씁니다. 입력을 100자까지 넉넉히 받는 이유입니다.

순위와 점수는 점수 공식으로 계산한 예시입니다.

04 · 힌트

막히면 원할 때만 힌트를 엽니다

처음부터장르 · 개봉 연도
50위 안상위 포스터를 겹친 흐린 그림
5번째 뒤제작 국가
7번째 뒤색 · 빛 · 구도"푸른 어둠 속 한 줄기 빛"
8번째 뒤사물 · 인물"등을 돌린 남자"
9번째 뒤포스터 전체 묘사두 번 눌러야 열립니다
  • 묘사 힌트는 VLM(GPT)이 포스터 1,349장을 직접 보고 미리 썼습니다. 제목·배우·감독 이름은 금지어로 걸러 냅니다.
  • 힌트마다 같은 모델로 채점해 너무 강한 힌트와 여러 영화에 똑같이 쓰인 문장을 찾아냅니다. 전체 묘사는 평균 92점이라 확인 단계를 한 번 더 둡니다.
  • 힌트에 점수 불이익은 없습니다. 연 힌트 수는 공유 텍스트에 💡로 남습니다.

05 · 선택

최고 순위 N장 중 한 장을 고릅니다

🎯 정답!
  • 가장 좋았던 순위 N을 기준으로 최소 3장, 최대 10장을 섞어 보여 줍니다. 1위를 해도 3장 중에서 골라야 해서, 제목 한 번으로 끝나지 않습니다.
  • 보기는 (문제 번호, 단서 목록)을 시드로 뽑아서 새로고침해도 바뀌지 않습니다.
  • 고르기 전에 떠오른 제목을 받고, 맞으면 결과와 공유 텍스트에 🎯를 남깁니다. 공유 링크를 메신저에 붙이면 결과 카드가 미리보기로 뜹니다.

구성

오프라인 · 데이터 파이프라인

미리 계산해 두는 것

KOBIS 박스오피스 → TMDB 포스터 매칭 → 글자 지움(EasyOCR + LaMa) → 포스터 임베딩 → VLM 묘사 힌트와 채점표. 무거운 작업은 모두 여기서 끝냅니다.

온라인 · 게임 서버

단서 하나에 행렬곱 한 번

FastAPI 서버가 단서를 임베딩해 채점하고, Vite로 만든 화면을 내줍니다. 하루 한 문제의 진행 상태는 서버가 아니라 서명된 쿠키에 담아, 재시작해도 이어서 풉니다.

플레이 해보기 ↗

posterdle.jblee.app · 맥미니 + Cloudflare Tunnel로 운영합니다.