Google Vision API在图像识别中的应用 | 作者:Matthew Chua - Medium
文章目录
Google Vision API 在图像识别中的应用
在快速发展的技术世界中,人工智能(AI)取得了显著进步,彻底改变了各个行业。其中,AI 在在线住宿领域的应用尤为突出,尤其是 Airbnb 平台。作为一名有抱负的数据科学家,我开发了一个基于 Google Vision API 的图像识别系统,旨在帮助 Airbnb 用户更高效地标记房间图像。这一项目不仅简化了房东对房间照片的管理流程,还为潜在游客提供了更好的决策支持。
项目背景与挑战
随着短期租赁市场的持续增长,Airbnb 等平台上的房东需要管理大量房间图片。手动组织和标记这些照片既耗时又容易出错。因此,开发一个高效的图像识别系统成为解决这一问题的关键。
为了实现这一目标,我选择了 Google Vision API 作为核心工具。该 API 提供了先进的图像分析功能,能够检测和分类图像中的对象、人脸和地标,非常适合项目需求。
数据集准备
在项目中,我们使用了一个专门的房间图像数据集,包含厨房、客厅和卧室的图片。数据集来源如下:
数据预处理
以下是数据预处理的主要步骤:
- 重命名图像文件:将每个子文件夹中的图像重命名为
image_1、image_2等,方便后续处理。 - 调整图像大小:根据图像方向(横向或纵向)调整大小为 320×240 或 240×320,并覆盖原始文件。
- 统计文件数量:统计每个子文件夹中的图像数量,并打印文件夹名称及对应的文件数量。
- 生成 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
最新文章
- 如何为现代图形API编写渲染器 | Clean Rinse
- Python + BaiduTransAPI :快速检索千篇英文文献(附源码)
- Nexus API 的入门教程与使用指南
- API 规范:设计与最佳实践
- Undetectable检查AI API的使用指南
- 深度解析思维链Prompt(Chain-of-Thought Prompt):激发大模型推理能力的关键技术
- DeepSpeed-Chat 模型训练实战
- 使用NestJS和Prisma构建REST API:身份验证
- 教育革命:在App中集成ChatGPT API…
- LangChain | 一种语言模型驱动应用的开发框架
- API 是否应该采用语义化版本控制?
- 如何获取 RollToolsApi 开放平台 API Key 密钥(分步指南)