利用Vertex AI进行图像嵌入:分步教程

2024年11月18日 由 alex 发表 110 0

介绍

Google Cloud的Vertex AI为各种机器学习任务提供了强大的模型,包括图像分析和嵌入。图像嵌入是一种将图像表示为数值向量(数字数组)的方式,这些向量能够捕捉图像的本质或特征。这些嵌入随后可用于图像搜索、图像比较和推荐系统等任务。


在本文中,我们将向你展示如何与Vertex AI中的MultiModalEmbeddingModel交互以生成图像嵌入。我们将介绍API的两种变体:一种直接传递图像URL,另一种将图像作为原始字节数据传递。这为你·根据图像来源提供了灵活性。


环境设置

开始之前,你需要以下设置:

  • Google Cloud项目:确保你有权访问已启用Vertex AI的Google Cloud项目。
  • Vertex AI API:你将需要与提供图像嵌入功能的Vertex AI MultiModalEmbeddingModel进行交互。
  • 凭据:使用适当的Google Cloud服务凭据对API请求进行身份验证。


初始化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
    )


解释:

  • project:你的Google Cloud项目ID。
  • location:你的Vertex AI服务所在的位置(例如,'us-west4')。
  • credentials:用于连接到API的身份验证凭据。


你在处理图像之前只需要调用此方法一次。


从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


解释:

  • 这个函数使用requests库从提供的URL中获取图像。
  • 如果发生错误(例如URL无法访问),它会抛出一个异常。


进行嵌入调用

与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}")


解释:

  • 输入:该函数接收一个图像URL。
  • 过程:使用get_image_bytes()函数从URL中获取图像。
  • 嵌入:将图像传递给Vertex AI模型以生成嵌入。
  • 输出:该函数打印出图像嵌入,如果可用的话,还会打印出文本嵌入。


变体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}")


解释:

  • 输入:该函数接收原始图像字节数据(如来自本地文件或其他API)。
  • 过程:图像字节数据直接被传递给Image()对象。
  • 嵌入:原始字节数据被发送到Vertex AI模型以生成嵌入。
  • 输出:它打印出图像嵌入和文本嵌入(如果适用)。


批量处理多个图像的方法调用

你可以通过对列表中的每个图像调用process_image_embedding_from_url()或process_image_embedding_from_bytes()方法来处理多个图像。


结论

通过这两种变体,你可以直接从URL获取图像,或者将图像数据作为原始字节传递。这两种方法都能与Vertex AI嵌入模型无缝集成,使你能够高效地处理多个图像。处理图像URL或字节数据的灵活性使得这种方法适用于多种用例,如图像搜索、基于内容的检索或人脸识别。

文章来源:https://medium.com/@rkanagasikamani/how-to-use-vertex-ai-for-image-embedding-python-a-step-by-step-guide-3f5be3042584
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
写评论取消
回复取消