📣
TiDB Cloud Essential 开放公测中。此页面由 AI 自动翻译,英文原文请见此处。

图像搜索



图像搜索 通过比较图像的视觉内容(而不仅仅是文本或元信息)来帮助你查找相似的镜像。该功能适用于电商、内容审核、数字资产管理,以及任何需要基于外观搜索或去重镜像的场景。

TiDB 通过 向量搜索 实现图像搜索。借助 Auto Embedding,你可以使用多模态嵌入模型,从镜像 URL、PIL 镜像或关键字文本生成镜像嵌入。TiDB 随后可以在扩展下搜索相似的向量。

基本用法

第 1 步. 定义嵌入函数

要生成镜像嵌入,你需要一个支持镜像输入的嵌入模型。

演示中,你可以使用 Jina AI 的多模态嵌入模型。

前往 Jina AI 创建 API key,然后按如下方式初始化嵌入函数:

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() 定义用于存储镜像嵌入的向量字段。通过设置 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 步. 执行图像搜索

图像搜索是一种向量搜索。借助 Auto Embedding,你可以直接提供镜像 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:通过关键字文本搜索

你还可以通过提供关键字文本来搜索相似镜像。

例如,如果你在处理宠物镜像数据集,可以通过 “orange tabby cat” 或 “golden retriever puppy” 等关键字来查找相似镜像。

results = table.search("orange tabby cat").limit(3).to_list()

然后,多模态嵌入模型会将关键字文本转换为能够表达其语义含义的嵌入,TiDB 会执行向量搜索,查找嵌入与该关键字嵌入最相似的镜像。

另请参阅

文档内容是否有帮助?