瞭解如何對 Google Cloud執行光學字元辨識 (OCR)。本教學課程說明如何將圖片檔案上傳至 Cloud Storage、使用 Cloud Vision API 從圖片擷取文字、使用 Google Cloud Translation API 翻譯文字,以及將翻譯存回 Cloud Storage。Pub/Sub 用於將各項工作排入佇列,並觸發正確的 Cloud Run 函式來執行工作。
如要進一步瞭解如何傳送文字偵測 (OCR) 要求,請參閱「偵測圖片中的文字」、「偵測圖片中的手寫文字」或「偵測檔案中的文字 (PDF/TIFF)」。
目標
- 編寫及部署多個背景 Cloud Run 函式。
- 將圖片上傳至 Cloud Storage。
- 擷取、翻譯及儲存包含在上傳圖片中的文字。
費用
在本文件中,您會使用 Google Cloud的下列計費元件:
- Cloud Run functions
- Pub/Sub
- Cloud Storage
- Cloud Translation API
- Cloud Vision
如要根據預測用量估算費用,請使用 Pricing Calculator。
事前準備
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Cloud Pub/Sub, Cloud Storage, Cloud Translation, and Cloud Vision APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Cloud Pub/Sub, Cloud Storage, Cloud Translation, and Cloud Vision APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- 準備開發環境。 <0x
如果您已安裝 gcloud CLI,請執行下列指令來更新:
gcloud components update
視覺化資料流動過程
OCR 教學課程應用程式中的資料流動過程涉及數個步驟:
- 含有任何語言文字的圖片上傳至 Cloud Storage。
- 系統會觸發 Cloud Run 函式,並使用 Vision API 擷取文字及偵測來源語言。
- 將訊息發布至 Pub/Sub 主題,即可將文字加入翻譯佇列。系統會為每個與來源語言不同的目標語言排隊翻譯。
- 如果目標語言與來源語言相符,系統會略過翻譯佇列,並將文字傳送至結果佇列,也就是另一個 Pub/Sub 主題。
- Cloud Run 函式會使用 Translation API 翻譯翻譯佇列中的文字。翻譯結果會傳送至結果佇列。
- 另一個 Cloud Run 函式會將結果佇列中的翻譯文字儲存至 Cloud Storage。
- 結果會以文字檔案的形式儲存在 Cloud Storage 中,每個翻譯作業各有一個檔案。
以下可能有助於透過視覺化的方式瞭解步驟:
準備應用程式
建立 Cloud Storage bucket,並上傳圖片,其中
YOUR_IMAGE_BUCKET_NAME
是全域不重複的 bucket 名稱:gcloud storage buckets create gs://
YOUR_IMAGE_BUCKET_NAME
建立 Cloud Storage bucket,用來儲存文字翻譯,其中
YOUR_RESULT_BUCKET_NAME
是全域不重複的 bucket 名稱:gcloud storage buckets create gs://
YOUR_RESULT_BUCKET_NAME
建立 Pub/Sub 主題,以發布翻譯要求,其中
YOUR_TRANSLATE_TOPIC_NAME
是翻譯要求主題的名稱:gcloud pubsub topics create
YOUR_TRANSLATE_TOPIC_NAME
建立 Pub/Sub 主題,將翻譯完成的結果發布至該主題,其中
YOUR_RESULT_TOPIC_NAME
是翻譯結果主題的名稱:gcloud pubsub topics create
YOUR_RESULT_TOPIC_NAME
將應用程式存放區範例複製到本機電腦中:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
您也可以 下載 zip 格式的範例,然後解壓縮該檔案。
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
您也可以 下載 zip 格式的範例,然後解壓縮該檔案。
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
您也可以 下載 zip 格式的範例,然後解壓縮該檔案。
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
您也可以 下載 zip 格式的範例,然後解壓縮該檔案。
變更為包含 Cloud Run 函式程式碼範例的目錄:
Node.js
cd nodejs-docs-samples/functions/ocr/app/
Python
cd python-docs-samples/functions/ocr/app/
Go
cd golang-samples/functions/ocr/app/
Java
cd java-docs-samples/functions/ocr/ocr-process-image/
瞭解程式碼
匯入依附元件
應用程式必須匯入數個依附元件,才能與 Google Cloud Platform 服務通訊:
Node.js
Python
Go
Java
處理圖片
下列函式會從 Cloud Storage 中讀取上傳的圖片檔案,並呼叫函式來偵測圖像中是否包含文字:
Node.js
Python
Go
Java
下列函式會使用 Vision API 從圖片中擷取文字,並將文字排入翻譯佇列:
Node.js
Python
Go
Java
翻譯文字
下列函式會翻譯擷取的文字,並將翻譯的文字排入儲存回 Cloud Storage 的佇列中:
Node.js
Python
Go
Java
儲存翻譯
最後,下列函式會接收翻譯的文字,並將其儲存回 Cloud Storage:
Node.js
Python
Go
Java
部署函式
如要使用 Cloud Storage 觸發條件部署圖片處理函式,請在包含範例程式碼的目錄中執行下列指令 (如果是 Java,則在
pom.xml
檔案中執行):Node.js
gcloud functions deploy ocr-extract \ --runtime nodejs20 \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--entry-point processImage \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"使用
--runtime
標記指定支援的 Node.js 版本執行階段 ID,以執行函式。Python
gcloud functions deploy ocr-extract \ --runtime python312 \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--entry-point process_image \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"使用
--runtime
標記指定支援的 Python 版本執行階段 ID,以執行函式。Go
gcloud functions deploy ocr-extract \ --runtime go121 \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--entry-point ProcessImage \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"Java
gcloud functions deploy ocr-extract \ --entry-point functions.OcrProcessImage \ --runtime java17 \ --memory 512MB \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"使用
--runtime
標記指定支援的 Java 版本執行階段 ID,以執行函式。其中
YOUR_IMAGE_BUCKET_NAME
是您上傳圖片所在 Cloud Storage 值區的名稱。如要使用 Pub/Sub 觸發條件部署文字翻譯函式,請在包含範例程式碼的目錄中執行下列指令 (如果是 Java,則在
pom.xml
檔案中執行):Node.js
gcloud functions deploy ocr-translate \ --runtime nodejs20 \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--entry-point translateText \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"使用
--runtime
標記指定支援的 Node.js 版本執行階段 ID,以執行函式。Python
gcloud functions deploy ocr-translate \ --runtime python312 \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--entry-point translate_text \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"使用
--runtime
標記指定支援的 Python 版本執行階段 ID,以執行函式。Go
gcloud functions deploy ocr-translate \ --runtime go121 \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--entry-point TranslateText \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"Java
gcloud functions deploy ocr-translate \ --entry-point functions.OcrTranslateText \ --runtime java17 \ --memory 512MB \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"使用
--runtime
標記指定支援的 Java 版本執行階段 ID,以執行函式。如要使用 Cloud Pub/Sub 觸發條件部署函式,將結果儲存至 Cloud Storage,請在包含範例程式碼的目錄中執行下列指令 (如果是 Java,則在
pom.xml
檔案中執行):Node.js
gcloud functions deploy ocr-save \ --runtime nodejs20 \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--entry-point saveResult \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"使用
--runtime
標記指定支援的 Node.js 版本執行階段 ID,以執行函式。Python
gcloud functions deploy ocr-save \ --runtime python312 \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--entry-point save_result \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"使用
--runtime
標記指定支援的 Python 版本執行階段 ID,以執行函式。Go
gcloud functions deploy ocr-save \ --runtime go121 \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--entry-point SaveResult \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"Java
gcloud functions deploy ocr-save \ --entry-point functions.OcrSaveResult \ --runtime java17 \ --memory 512MB \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"使用
--runtime
標記指定支援的 Java 版本執行階段 ID,以執行函式。
上傳圖片
將圖片上傳至您的圖片 Cloud Storage 值區:
gcloud storage cp
PATH_TO_IMAGE
gs://YOUR_IMAGE_BUCKET_NAME
其中
PATH_TO_IMAGE
是本機系統上圖片檔案 (內含文字) 的路徑。YOUR_IMAGE_BUCKET_NAME
是您要上傳圖片的值區名稱。
您可從專案範例下載其中一個圖片。
觀察記錄以確定執行已經完成:
gcloud functions logs read --limit 100
您可以在用於
YOUR_RESULT_BUCKET_NAME
的 Cloud Storage bucket 中查看儲存的翻譯內容。
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。
刪除專案
如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。
如要刪除專案:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
刪除函式
刪除 Cloud Run 函式不會移除儲存在 Cloud Storage 中的任何資源。
如要刪除在本教學課程中建立的 Cloud Run 函式,請執行下列指令:
gcloud functions delete ocr-extract gcloud functions delete ocr-translate gcloud functions delete ocr-save
您也可以從 Google Cloud 控制台刪除 Cloud Run 函式。