멀티미디어 검색
멀티미디어 검색 (Multimedia search · near_media)
이미지나 영상, 오디오를 검색 입력값으로 그대로 써서 벡터 유사도 검색을 하고 싶을 때가 있어요. 멀티미디어 검색은 near_media 연산자로 이런 검색을 제공해요. 이미지만 쓸 때는 전용 near_image가 있고, 여러 미디어 타입을 하나의 인터페이스로 다루고 싶으면 near_media를 쓰면 돼요.
멀티미디어 검색 설정하기
이미지·영상·오디오를 검색 입력으로 쓰려면, 컬렉션에 이 미디어 타입을 지원하는 멀티모달 벡터라이저를 구성해야 해요.
예를 들어 구글의 multi2vec-google에 gemini-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는 이미지·영상·오디오를 지원해요. 지원 가능한 모달리티는 각 모델 프로바이더 문서를 확인해야 해요.