介绍
Google Cloud的Vertex AI为各种机器学习任务提供了强大的模型,包括图像分析和嵌入。图像嵌入是一种将图像表示为数值向量(数字数组)的方式,这些向量能够捕捉图像的本质或特征。这些嵌入随后可用于图像搜索、图像比较和推荐系统等任务。
在本文中,我们将向你展示如何与Vertex AI中的MultiModalEmbeddingModel交互以生成图像嵌入。我们将介绍API的两种变体:一种直接传递图像URL,另一种将图像作为原始字节数据传递。这为你·根据图像来源提供了灵活性。
环境设置
开始之前,你需要以下设置:
初始化Vertex AI
第一步是初始化Vertex AI。此过程将对API客户端进行身份验证,并为其做好准备以供使用。以下是使用必要凭据初始化Vertex AI的方法。
import google
import vertexai
from typing import Optional
def initialize_vertexai(
project: Optional[str] = None,
location: Optional[str] = None,
credentials: Optional[google.auth.credentials.Credentials] = None
):
vertexai.init(
project=project,
location=location,
credentials=credentials
)
解释:
你在处理图像之前只需要调用此方法一次。
从URL获取图像
下一步是从URL获取图像,因为这是访问图像的常见方式。下面是一个函数,它接受图像的URL,下载图像,并返回原始图像字节。
import requests
def get_image_bytes(url: str) -> bytes:
try:
response = requests.get(url)
response.raise_for_status() # Raises HTTPError for bad responses (4xx and 5xx)
return response.content # Return raw image bytes
except requests.RequestException as e:
raise Exception(f"Error accessing the URL: {e}")p
解释:
进行嵌入调用
与Vertex AI的图像嵌入模型交互有两种方式。我们可以传递图像的URL(将会下载图像),或者直接提供图像作为原始字节数据。让我们来看看这两种变体:
变体1:以图像URL作为输入
这个版本的函数将接受图像的URL,下载它,并将其传递给Vertex AI模型以生成嵌入。
from vertexai.vision_models import Image, MultiModalEmbeddingModel
def process_image_embedding_from_url(url: str, model: MultiModalEmbeddingModel):
try:
image_bytes = get_image_bytes(url)
image = Image(image_bytes=image_bytes)
embedding_dimension = 1408
embeddings = model.get_embeddings(
image=image,
dimension=embedding_dimension,
)
print(f"URL: {url}")
print(f"Image Embedding: {embeddings.image_embedding}")
except Exception as e:
print(f"Error processing URL {url}: {e}")
解释:
变体2:以原始图像字节数据作为输入
在这个版本中,图像以原始字节数据的形式传递,比如当图像已经被加载或从其他来源获取时。
def process_image_embedding_from_bytes(image_bytes: bytes, model: MultiModalEmbeddingModel):
try:
image = Image(image_bytes=image_bytes)
embedding_dimension = 1408
embeddings = model.get_embeddings(
image=image,
dimension=embedding_dimension,
)
print(f"Image Embedding: {embeddings.image_embedding}")
print(f"Text Embedding: {embeddings.text_embedding}")
except Exception as e:
print(f"Error processing the image bytes: {e}")
解释:
批量处理多个图像的方法调用
你可以通过对列表中的每个图像调用process_image_embedding_from_url()或process_image_embedding_from_bytes()方法来处理多个图像。
结论
通过这两种变体,你可以直接从URL获取图像,或者将图像数据作为原始字节传递。这两种方法都能与Vertex AI嵌入模型无缝集成,使你能够高效地处理多个图像。处理图像URL或字节数据的灵活性使得这种方法适用于多种用例,如图像搜索、基于内容的检索或人脸识别。