멀티미디어 검색

멀티미디어 검색 (Multimedia search · near_media)

이미지나 영상, 오디오를 검색 입력값으로 그대로 써서 벡터 유사도 검색을 하고 싶을 때가 있어요. 멀티미디어 검색은 near_media 연산자로 이런 검색을 제공해요. 이미지만 쓸 때는 전용 near_image가 있고, 여러 미디어 타입을 하나의 인터페이스로 다루고 싶으면 near_media를 쓰면 돼요.

출처: Weaviate 공식 문서 — Multimedia search

멀티미디어 검색 설정하기

이미지·영상·오디오를 검색 입력으로 쓰려면, 컬렉션에 이 미디어 타입을 지원하는 멀티모달 벡터라이저를 구성해야 해요.

예를 들어 구글의 multi2vec-googlegemini-embedding-2 모델을 쓰면 이미지·영상·오디오 입력을 모두 지원해요. 사용 가능한 옵션은 모델 프로바이더 통합 페이지에서 확인할 수 있어요.

컬렉션은 적절한 미디어 필드로 구성되어야 해요. 예를 들어 이렇게 만들 수 있어요.

from weaviate.classes.config import Configure, Property, DataType

client.collections.delete("MediaExample")
client.collections.create(
    name="MediaExample",
    properties=[
        Property(name="title", data_type=DataType.TEXT),
        Property(name="mediaType", data_type=DataType.TEXT),
    ],
    vector_config=Configure.Vectors.multi2vec_google_gemini(
        model="gemini-embedding-2",
        text_fields=["title"],
        # video_fields=["video"],
        # image_fields=["image"],
    ),
)

로컬 파일 경로로 검색

near_media 연산자에 영상 파일의 파일 경로를 넣어서 검색할 수 있어요.

base64 표현으로 검색

베이스64로 인코딩한 영상 문자열을 제공하는 방식도 있어요.

import base64
from weaviate.classes.query import MetadataQuery, NearMediaType

with open("./videos/cat.mp4", "rb") as f:
    video_base64 = base64.b64encode(f.read()).decode("utf-8")

collection = client.collections.use("MediaExample")

최대 거리 설정

최대 distance를 설정해서 결과를 걸러내고, 거리 메타데이터를 함께 반환받을 수 있어요. 이렇게 하면 유사도가 너무 낮은 결과는 아예 제외할 수 있죠.

필터와 결합

near_media 검색에 필터를 결합해 결과를 좁힐 수 있어요. 예를 들어 mediaType이 "animals"인 영상만 찾고 싶다면 이렇게 해요.

import base64
from weaviate.classes.query import NearMediaType
from weaviate.classes.query import Filter

with open("./videos/dog.mp4", "rb") as f:
    video_base64 = base64.b64encode(f.read()).decode("utf-8")

collection = client.collections.use("MediaExample")

response = collection.query.near_media(
    media=video_base64,
    media_type=NearMediaType.VIDEO,
    filters=Filter.by_property("mediaType").equal("animals"),
    return_properties=["title", "mediaType"],
    limit=5,
)

for obj in response.objects:
    print(obj.properties)

다른 미디어 타입

near_media 연산자는 오디오 같은 다른 미디어 타입도 지원해요. media_type 파라미터를 알맞은 NearMediaType 값으로 설정하면 돼요.

import base64
from weaviate.classes.query import NearMediaType

collection = client.collections.use("MediaExample")

response = collection.query.near_media(
    media=Path("./audio/dog.wav"),
    media_type=NearMediaType.AUDIO,
    ...
)

지원하는 미디어 타입

NearMediaType enum은 아래 미디어 타입을 지원해요. 다만 어떤 타입을 쓸 수 있는지 벡터라이저 모듈과 모델에 따라 달라져요.

미디어 타입 Enum 값 설명
Audio NearMediaType.AUDIO 오디오 파일 (예: .wav, .mp3)
Image NearMediaType.IMAGE 이미지 파일 (예: .jpg, .png) — 이미지 검색 참고
Depth NearMediaType.DEPTH 깊이 맵 데이터
Thermal NearMediaType.THERMAL 열화상 이미지 데이터
IMU NearMediaType.IMU 관성 측정 장치(IMU) 데이터

모델 지원: 모든 모델이 모든 미디어 타입을 지원하는 건 아니에요. 예를 들어 gemini-embedding-2는 이미지·영상·오디오를 지원해요. 지원 가능한 모달리티는 각 모델 프로바이더 문서를 확인해야 해요.

더 알아보기