使用 Dataflow 和 Cloud Vision API 建構機器學習視覺分析解決方案

Last reviewed 2024-05-23 UTC

在本參考架構中,您將瞭解部署 Dataflow 管道時的用途、設計替代方案和設計考量,以便使用 Cloud Vision 處理圖片檔案,並將處理結果儲存在 BigQuery 中。您可以將這些儲存的結果用於大規模資料分析,以及訓練 BigQuery ML 預先建構的模型

本參考架構文件適用於資料工程師和資料科學家。

架構

下圖說明這項參考架構的系統流程。

架構圖:顯示擷取和觸發、處理,以及儲存和分析程序的資訊流程。

如上圖所示,資訊流動方式如下:

  1. 擷取和觸發:這是系統流程的第一階段,圖片會先進入系統。在這個階段,系統會執行下列動作:

    1. 用戶端將圖片檔案上傳至 Cloud Storage bucket。
    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 pipeline 中執行額外分析 (未顯示在此圖表中)。

使用的產品

這項參考架構使用下列 Google Cloud 產品:

用途

Vision API 支援多種處理功能,包括為圖片加上標籤、偵測臉部和地標、光學字元辨識,以及為煽情露骨內容加上標記等。這些功能各有用途,適用於不同產業。本文提供一些簡單的範例,說明如何使用 Vision API,但實際應用範圍非常廣泛。

Vision API 也透過 REST 和 RPC API 提供功能強大的預先訓練機器學習模型。您可以為圖片指派標籤,並將圖片分類到數百萬個預先定義的類別。這項 API 可協助您偵測物件、讀取印刷文字與手寫文字,以及將具有參考價值的中繼資料新增至圖片目錄。

這個架構不需要訓練模型,即可直接使用。如要使用特定資料訓練自訂模型,可以透過 Vertex AI 訓練 AutoML 或自訂模型,達成電腦視覺目標,例如圖片分類和物件偵測。或者,您也可以使用 Vertex AI Vision,取得端對端應用程式開發環境,建構、部署及管理電腦視覺應用程式。

設計替代方案

產生圖片的程序可直接將圖片發布至訊息系統 (例如 Pub/Sub),而 Dataflow 管道可直接將圖片傳送至 Vision API,不必將圖片儲存在 Google Cloud Storage 值區中。

如果您需要分析相對較小的圖片,且對延遲時間很敏感,這個替代設計或許是不錯的解決方案。Pub/Sub 訊息大小上限為 10 MB。

如需批次處理大量圖片,可以使用專為此用途設計的 asyncBatchAnnotate API。

設計須知

本節說明這個參考架構的設計考量:

安全性、隱私權和法規遵循

從不可信的來源收到的圖片可能含有惡意軟體。由於 Vision API 不會根據分析的圖片執行任何動作,因此圖片型惡意軟體不會影響 API。如需掃描圖片,請變更 Dataflow pipeline,新增掃描步驟。如要達到相同結果,也可以使用 Pub/Sub 主題的個別訂閱項目,並在個別程序中掃描圖片。

詳情請參閱「自動掃描上傳至 Cloud Storage 的檔案是否含有惡意軟體」。

Vision API 使用身分與存取權管理 (IAM) 進行驗證。如要存取 Vision API,安全性主體必須對包含待分析檔案的值區具有「Cloud Storage」>「Storage 物件檢視者」(roles/storage.objectViewer) 存取權。

如要瞭解 AI 和機器學習工作負載專用的安全性原則和建議,請參閱 Well-Architected Framework 中的「AI 和機器學習觀點:安全性」。

成本最佳化

相較於其他選項 (例如低延遲處理和非同步批次處理),這個參考架構會將 API 要求分批處理,以經濟實惠的方式處理串流管道中的圖片。「設計替代方案」一節中提及的低延遲直接影像串流,可能會因為額外的 Pub/Sub 和 Dataflow 費用而更加昂貴。如果圖片處理作業不需要在幾秒或幾分鐘內完成,您可以批次模式執行 Dataflow 管道。與執行串流管道的費用相比,以批次模式執行管道可節省一些費用。

Vision API 支援所有功能的離線非同步批次圖片註解。非同步要求每批最多可處理 2,000 張圖片。Vision API 會傳回 JSON 檔案,並儲存在 Cloud Storage 值區中。

Vision API 也提供一系列的圖片分析功能。價格是按每張圖片和每項功能計算。為降低成本,請只要求解決方案所需的特定功能。

如要根據預測用量估算費用,請使用 Pricing Calculator

如要瞭解 AI 和機器學習工作負載專用的成本最佳化原則和建議,請參閱 Well-Architected Framework 中的「AI 和機器學習觀點:成本最佳化」。

效能最佳化

Vision API 是耗用大量資源的 API。因此,大規模處理圖片時,需要仔細協調 API 呼叫。Dataflow 管道會負責批次處理 API 要求、妥善處理配額相關例外狀況,以及產生 API 用量的自訂指標。這些指標可協助您判斷是否應提高 API 配額,或是否應調整 Dataflow 管道參數,以減少要求頻率。如要進一步瞭解如何申請提高 Vision API 配額,請參閱「配額與限制」。

Dataflow 管道有幾個參數可能會影響處理延遲。如要進一步瞭解這些參數,請參閱「使用 Dataflow 和 Vision API 部署 ML 影像分析解決方案」。

如要瞭解 AI 和機器學習工作負載專用的效能最佳化原則和建議,請參閱 Well-Architected 架構中的「AI 和機器學習觀點:效能最佳化」。

部署作業

如要部署這個架構,請參閱使用 Dataflow 和 Vision API 部署 ML 影像分析解決方案

後續步驟

貢獻者

作者:

其他貢獻者: