Google Vision API在图像识别中的应用 | 作者:Matthew Chua - Medium

作者:API传播员 · 2025-11-25 · 阅读时间:5分钟
本文介绍了基于Google Vision API和Vertex AI构建的图像识别系统,用于Airbnb房间图像自动标记,涵盖数据集准备、环境配置、模型训练和部署,帮助房东高效管理图片并提升用户体验。

Google Vision API 在图像识别中的应用

在快速发展的技术世界中,人工智能(AI)取得了显著进步,彻底改变了各个行业。其中,AI 在在线住宿领域的应用尤为突出,尤其是 Airbnb 平台。作为一名有抱负的数据科学家,我开发了一个基于 Google Vision API 的图像识别系统,旨在帮助 Airbnb 用户更高效地标记房间图像。这一项目不仅简化了房东对房间照片的管理流程,还为潜在游客提供了更好的决策支持。


项目背景与挑战

随着短期租赁市场的持续增长,Airbnb 等平台上的房东需要管理大量房间图片。手动组织和标记这些照片既耗时又容易出错。因此,开发一个高效的图像识别系统成为解决这一问题的关键。

为了实现这一目标,我选择了 Google Vision API 作为核心工具。该 API 提供了先进的图像分析功能,能够检测和分类图像中的对象、人脸和地标,非常适合项目需求。


数据集准备

在项目中,我们使用了一个专门的房间图像数据集,包含厨房、客厅和卧室的图片。数据集来源如下:

房间分类数据集

数据预处理

以下是数据预处理的主要步骤:

  1. 重命名图像文件:将每个子文件夹中的图像重命名为 image_1image_2 等,方便后续处理。
  2. 调整图像大小:根据图像方向(横向或纵向)调整大小为 320×240 或 240×320,并覆盖原始文件。
  3. 统计文件数量:统计每个子文件夹中的图像数量,并打印文件夹名称及对应的文件数量。
  4. 生成 CSV 文件:创建一个 CSV 文件,映射图像路径及其标签,用于导入 Google Cloud Storage。

环境配置与依赖安装

在开始使用 Google Vision API 之前,需要完成以下环境配置和依赖安装:

安装必要的 Python 包

使用 Conda 安装以下软件包:

conda install -c conda-forge google-cloud-aiplatform
conda install -c conda-forge google-cloud-storage

安装 Google Cloud SDK

在终端中运行以下命令安装 Google Cloud SDK:

!curl https://sdk.cloud.google.com | bash

安装完成后,初始化 SDK:

!gcloud init

配置项目 ID 和区域

设置 Google Cloud 项目 ID 和区域:

PROJECT_ID = 'your_project_id'
REGION = 'us-central1'

!gcloud config set project $PROJECT_ID
!gcloud config set compute/region $REGION

设置服务账户凭据

创建一个包含服务账户凭据的 JSON 文件(如 details.json),并配置环境变量:

my_path = 'path/to/details.json'
%env GOOGLE_APPLICATION_CREDENTIALS = $my_path

通过以下命令验证服务账户身份:

!gcloud auth activate-service-account 'service_account' --key-file=$GOOGLE_APPLICATION_CREDENTIALS --project=$PROJECT_ID

数据上传到 Google Cloud Storage

创建存储桶

创建一个存储桶用于存储数据集和模型资源:

BUCKET_NAME = 's1-210899z-aip-3386'
BUCKET_URI = f"gs://{BUCKET_NAME}"
print(BUCKET_URI)

!gsutil mb -l $REGION -p $PROJECT_ID $BUCKET_URI

验证存储桶是否创建成功:

!gsutil ls -al $BUCKET_URI

上传数据

将图像和注释文件(data.csv)上传到存储桶:

!gsutil -m cp -r rooms $BUCKET_URI
!gsutil ls -r $BUCKET_URI

验证注释文件内容:

IMPORT_FILE = "gs://s1-210899z-aip-3386/rooms/data.csv"
print(IMPORT_FILE)
!gsutil cat $IMPORT_FILE

使用 Vertex AI 创建数据集

初始化 Vertex AI SDK

导入所需库并初始化 Vertex AI SDK:

import google.cloud.aiplatform as aip

aip.init(project=PROJECT_ID, staging_bucket=BUCKET_URI)

创建数据集资源

使用 ImageDataset.create 方法创建数据集资源:

display_name = 'rooms'

dataset = aip.ImageDataset.create(
    display_name=display_name,
    gcs_source=[IMPORT_FILE],
    import_schema_uri=aip.schema.dataset.ioformat.image.multi_label_classification,
)

print(dataset.resource_name)

训练 AutoML 图像识别模型

创建训练管道

使用 AutoMLImageTrainingJob 类创建训练管道:

dag = aip.AutoMLImageTrainingJob(
    display_name=display_name,
    prediction_type="classification",
    multi_label=True,
    model_type="CLOUD",
    base_model=None,
)

运行训练管道

执行训练管道并训练模型:

model = dag.run(
    dataset=dataset,
    model_display_name=display_name,
    training_fraction_split=0.8,
    validation_fraction_split=0.1,
    test_fraction_split=0.1,
    budget_milli_node_hours=8000,
    disable_early_stopping=False,
)

训练过程可能需要 2-3 小时,具体时间取决于数据集大小和模型复杂性。


模型评估与部署

模型评估

使用以下代码评估模型性能:

models = aip.Model.list()

client_options = {"api_endpoint": f"{REGION}-aiplatform.googleapis.com"}
model_service_client = aip.gapic.ModelServiceClient(client_options=client_options)

model_evaluations = model_service_client.list_model_evaluations(parent=models[0].resource_name)
model_evaluation = list(model_evaluations)[0]

print(model_evaluation)

模型部署

将训练好的模型部署到端点:

endpoint = model.deploy()

在线预测与取消部署

在线预测

定义辅助函数,将图像文件编码为 base64 字符串,并使用模型进行预测:

# 示例代码略

取消部署模型

完成预测后,可通过以下代码取消部署模型:

endpoint.undeploy_all()

总结

通过本项目,我们成功利用 Google Vision API 和 Vertex AI 构建了一个高效的图像识别系统,帮助 Airbnb 用户更好地管理房间图片。该系统不仅提升了用户体验,还为未来的类似应用提供了重要参考。

原文链接: https://matthewchuagt.medium.com/google-vision-api-for-image-recognition-d77d9408b784