画像検索
画像検索は、テキストやメタデータだけでなく、視覚的なコンテンツを比較することで類似画像を見つけるのに役立ちます。この機能は、eコマース、コンテンツモデレーション、デジタルアセット管理など、画像の外観に基づいて画像を検索したり重複を除去したりする必要があるあらゆるシナリオに役立ちます。
TiDBはベクトル検索による画像検索を可能にします。自動埋め込み機能により、画像URL、PIL画像、またはキーワードテキストからマルチモーダル埋め込みモデルを用いて画像埋め込みを生成できます。TiDBはその後、類似ベクトルを大規模に検索します。
注記:
画像検索の完全な例については、 画像検索の例参照してください。
基本的な使い方
ステップ1. 埋め込み関数を定義する
画像の埋め込みを生成するには、画像入力を受け入れる埋め込みモデルが必要です。
デモンストレーションには、Jina AI のマルチモーダル埋め込みモデルを使用できます。
ジナ・アイに進み、API キーを作成し、次のように埋め込み関数を初期化します。
from pytidb.embeddings import EmbeddingFunction
image_embed = EmbeddingFunction(
# Or another provider/model that supports multimodal input
model_name="jina_ai/jina-embedding-v4",
api_key="{your-jina-api-key}",
multimodal=True,
)
ステップ2. テーブルとベクトルフィールドを作成する
VectorField()画像の埋め込みを格納するためのベクトルフィールドを定義します。3 source_field画像のURLを格納するフィールドを指定するためのパラメータです。
from pytidb.schema import TableModel, Field
class ImageItem(TableModel):
__tablename__ = "image_items"
id: int = Field(primary_key=True)
image_uri: str = Field()
image_vec: list[float] = image_embed.VectorField(
source_field="image_uri"
)
table = client.create_table(schema=ImageItem, if_exists="overwrite")
ステップ3.画像データを挿入する
データを挿入すると、 image_vecフィールドにimage_uriから生成された埋め込みが自動的に入力されます。
table.bulk_insert([
ImageItem(image_uri="https://example.com/image1.jpg"),
ImageItem(image_uri="https://example.com/image2.jpg"),
ImageItem(image_uri="https://example.com/image3.jpg"),
])
ステップ4. 画像検索を実行する
画像検索はベクター検索の一種です。自動埋め込み機能では、画像URL、PIL画像、またはキーワードテキストを直接入力すると、それぞれの入力が類似マッチングのための埋め込み情報に変換されます。
オプション1: 画像のURLで検索
画像の URL を指定して類似画像を検索します。
results = table.search("https://example.com/query.jpg").limit(3).to_list()
クライアントは画像URLをベクトルに変換します。TiDBはベクトルを比較して最も類似した画像を返します。
オプション2: PIL画像で検索
画像ファイルまたはバイトを指定して類似画像を検索することもできます。
from PIL import Image
image = Image.open("/path/to/query.jpg")
results = table.search(image).limit(3).to_list()
クライアントは、PIL イメージ オブジェクトを埋め込みモデルに送信する前に、Base64 文字列に変換します。
オプション3: キーワードテキストで検索
キーワードテキストを入力して類似画像を検索することもできます。
たとえば、ペットの画像データセットを扱っている場合は、「オレンジ色のトラ猫」や「ゴールデン レトリバーの子犬」などのキーワードで検索して、類似の画像を見つけることができます。
results = table.search("orange tabby cat").limit(3).to_list()
次に、マルチモーダル埋め込みモデルはキーワードテキストをその意味を捉える埋め込みに変換し、TiDB はベクトル検索を実行してそのキーワード埋め込みに最も類似した埋め込みを持つ画像を検索します。