使用 Dataflow 和 Cloud Vision API 构建机器学习视觉分析解决方案

Last reviewed 2024-05-23 UTC

在本参考架构中,您将了解在部署 Dataflow 流水线以使用 Cloud Vision 处理图片文件并将处理结果存储在 BigQuery 中时,应考虑的用例、设计方案和设计注意事项。您可以使用这些存储的结果进行大规模数据分析,以及训练 BigQuery ML 预构建模型

本参考架构文档面向数据工程师和数据科学家。

架构

下图展示了此参考架构的系统流程。

展示用于注入、触发、处理以及存储和分析流程的信息流的架构。

如上图所示,信息流如下:

  1. 提取和触发:这是系统流程的第一阶段,图片会在此阶段首次进入系统。在此阶段,会发生以下操作:

    1. 客户端将图片文件上传到 Cloud Storage 存储桶。
    2. 对于每项文件上传操作,Cloud Storage 都会通过向 Pub/Sub 发布消息自动发送输入通知。
  2. 流程:此阶段紧随注入和触发阶段之后。 对于每条新输入通知,系统都会执行以下操作:

    1. Dataflow 流水线会监听这些文件输入通知,从 Pub/Sub 消息中提取文件元数据,并将文件引用发送到 Vision API 进行处理。
    2. Vision API 会读取图片并创建注解。
    3. Dataflow 流水线会将 Vision API 生成的注释存储在 BigQuery 表中。
  3. 存储和分析:这是流程的最后一个阶段。在此阶段,您可以对已保存的结果执行以下操作:

    1. 查询 BigQuery 表并分析存储的注解。
    2. 使用 BigQuery ML 或 Vertex AI 构建模型,并根据存储的注释执行预测。
    3. 在 Dataflow 流水线中执行其他分析(此图表中未显示)。

使用的产品

此参考架构使用以下 Google Cloud 产品:

使用场景

Vision API 支持多项处理功能,包括图片标记、人脸和地标检测、光学字符识别、露骨内容标记等。每项功能都支持多种适用于不同行业的用例。本文档包含一些简单的示例,展示了使用 Vision API 时可以实现的功能,但可能的应用范围非常广泛。

Vision API 还通过 REST API 和 RPC API 提供功能强大的预训练机器学习模型。您可以为图片分配标签,并将其分类到数百万种预定义的类别。它可以帮助您检测对象、识别印刷体及手写文本,并在您的图像目录中纳入有价值的元数据。

这种架构无需任何模型训练即可使用。如果您需要使用特定数据训练的自定义模型,借助 Vertex AI,您可以训练 AutoML 模型或自定义模型,用于图片分类和对象检测等计算机视觉目标。或者,您也可以使用 Vertex AI Vision 作为端到端应用开发环境,构建、部署和管理计算机视觉应用。

设计替代方案

生成图片的进程可以直接将图片发布到消息系统(例如 Pub/Sub),而不是将图片存储在 Google Cloud Storage 存储桶中,而 Dataflow 流水线可以直接将图片发送到 Vision API。

对于需要分析相对较小图片且对延迟时间敏感的用例,此设计替代方案是一个不错的解决方案。Pub/Sub 将消息的大小上限限制为 10 Mb。

如果您需要批量处理大量图片,可以使用专门设计的 asyncBatchAnnotate API。

设计考虑事项

本部分介绍了此参考架构的设计注意事项:

安全性、隐私权和合规性

从不可信来源接收的图片可能包含恶意软件。由于 Vision API 不会根据其分析的图片执行任何操作,因此基于图片的恶意软件不会影响该 API。如果您需要扫描图片,请更改 Dataflow 流水线以添加扫描步骤。如需实现相同的结果,您还可以对 Pub/Sub 主题使用单独的订阅,并在单独的进程中扫描图片。

如需了解详情,请参阅对上传到 Cloud Storage 的文件进行自动恶意软件扫描

Vision API 使用 Identity and Access Management (IAM) 进行身份验证。如需访问 Vision API,安全主账号需要对包含要分析的文件的存储桶拥有 Cloud Storage > Storage Object Viewer (roles/storage.objectViewer) 访问权限。

如需了解专门针对 AI 和机器学习工作负载的安全原则和建议,请参阅架构框架中的 AI 和机器学习视角:安全

费用优化

与之前讨论的其他选项(例如低延迟处理和异步批处理)相比,此参考架构通过批处理 API 请求,以经济高效的方式处理流式传输流水线中的图片。设计方案部分中提到的延迟时间更短的直接图片流式传输可能会更昂贵,因为需要额外支付 Pub/Sub 和 Dataflow 费用。对于不需要在几秒或几分钟内完成的图片处理,您可以以批量模式运行 Dataflow 流水线。与运行流式流水线的费用相比,以批量模式运行流水线可以节省一些费用。

Vision API 支持将离线异步批量图片注解用于所有功能。此异步请求每批支持多达 2,000 张图片。作为响应,Vision API 会返回存储在 Cloud Storage 存储桶中的 JSON 文件。

Vision API 还提供了一套图片分析功能。价格是按图片和功能计算的。为降低费用,请仅请求您的解决方案所需的特定功能。

如需根据您的预计使用量来估算费用,请使用价格计算器

如需了解专门针对 AI 和机器学习工作负载的费用优化原则和建议,请参阅架构框架中的 AI 和机器学习视角:费用优化

性能优化

Vision API 是一款资源密集型 API。因此,若要大规模处理图片,就需要谨慎地编排 API 调用。Dataflow 流水线负责批量处理 API 请求、妥善处理与达到配额相关的异常,以及生成 API 使用情况的自定义指标。这些指标可帮助您确定是否有必要增加 API 配额,或者是否应调整 Dataflow 流水线参数以降低请求频率。如需详细了解如何增加 Vision API 的配额申请,请参阅配额和限制

Dataflow 流水线有几个参数可能会影响处理延迟时间。如需详细了解这些参数,请参阅使用 Dataflow 和 Vision API 部署机器学习视觉分析解决方案

如需了解专门针对 AI 和机器学习工作负载的性能优化原则和建议,请参阅架构框架中的 AI 和机器学习视角:性能优化

部署

如需部署此架构,请参阅使用 Dataflow 和 Vision API 部署机器学习视觉分析解决方案

后续步骤

贡献者

作者:

其他贡献者: