GSP1138
總覽
Document AI 是文件解讀解決方案,可擷取並處理文件、電子郵件、帳單和表單等非結構化資料,方便您解讀、分析和使用。Document AI API 會透過內容分類、實體擷取、進階搜尋等功能,將文件轉換成結構化資料。
在本實驗室中,您將使用 Document AI 和 Python,對 PDF 文件執行光學字元辨識 (OCR)。您將瞭解如何提出線上 (同步) 和批次 (非同步) 處理要求。
我們將使用艾倫.亞歷山大.米恩的經典小說《小熊維尼》的 PDF 檔,這本書最近成為美國公有領域 資源。Google 圖書 已掃描這個檔案並數位化。
目標
在本實驗室中,您將瞭解如何執行下列工作:
啟用 Document AI API
驗證 API 要求
安裝 Python 用戶端程式庫
使用線上和批次處理 API
剖析 PDF 檔中的文字
設定和需求
瞭解以下事項後,再點選「Start Lab」按鈕
請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」 後就會開始計時,顯示可使用 Google Cloud 資源的時間。
您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。
為了順利完成這個實驗室,請先確認:
可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意事項: 請使用無痕模式 (建議選項) 或私密瀏覽視窗執行此實驗室,這可以防止個人帳戶和學員帳戶之間的衝突,避免個人帳戶產生額外費用。
是時候完成實驗室活動了!別忘了,活動一旦開始將無法暫停。
注意事項: 務必使用實驗室專用的學員帳戶。如果使用其他 Google Cloud 帳戶,可能會產生額外費用。
如何開始研究室及登入 Google Cloud 控制台
點選「Start Lab」 按鈕。如果實驗室會產生費用,畫面上會出現選擇付款方式的對話方塊。左側的「Lab Details」窗格會顯示下列項目:
「Open Google Cloud console」按鈕
剩餘時間
必須在這個研究室中使用的臨時憑證
完成這個實驗室所需的其他資訊 (如有)
點選「Open Google Cloud console」 ;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」 。
接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。
提示 :您可以在不同的視窗中並排開啟分頁。
注意 :如果頁面中顯示「選擇帳戶」 對話方塊,請點選「使用其他帳戶」 。
如有必要,請將下方的 Username 貼到「登入」 對話方塊。
{{{user_0.username | "Username"}}}
您也可以在「Lab Details」窗格找到 Username。
點選「下一步」 。
複製下方的 Password ,並貼到「歡迎使用」 對話方塊。
{{{user_0.password | "Password"}}}
您也可以在「Lab Details」窗格找到 Password。
點選「下一步」 。
重要事項 :請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。
注意 :如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
按過後續的所有頁面:
接受條款及細則。
由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
請勿申請免費試用。
Google Cloud 控制台稍後會在這個分頁開啟。
注意: 如要使用 Google Cloud 產品和服務,請點選「導覽選單」 ,或在「搜尋」 欄位輸入服務或產品名稱。
啟動 Cloud Shell
Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。
點按 Google Cloud 控制台頂端的「啟用 Cloud Shell」 圖示 。
系統顯示視窗時,請按照下列步驟操作:
繼續操作 Cloud Shell 視窗。
授權 Cloud Shell 使用您的憑證發出 Google Cloud API 呼叫。
連線建立完成即代表已通過驗證,而且專案已設為您的 Project_ID : 。輸出內容中有一行文字,宣告本工作階段的 Project_ID :
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud 是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵自動完成功能。
(選用) 您可以執行下列指令來列出使用中的帳戶:
gcloud auth list
點按「授權」 。
輸出內容:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
(選用) 您可以使用下列指令來列出專案 ID:
gcloud config list project
輸出內容:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意: 如需 gcloud 的完整說明,請前往 Google Cloud 參閱 gcloud CLI 總覽指南 。
工作 1:啟用 Document AI API
您必須先啟用 API,才能使用 Document AI。
使用控制台頂端的搜尋列搜尋「Document AI API」,然後點按「啟用」 ,即可在 Google Cloud 專案中使用這個 API。
使用搜尋列搜尋「Cloud Storage API」,如果尚未啟用,請點按「啟用」 。
或者,您也能使用下列 gcloud 指令啟用 API。
gcloud services enable documentai.googleapis.com
gcloud services enable storage.googleapis.com
輸出內容應如下所示:
Operation "operations/..." finished successfully.
您現在可以使用 Document AI 了!
點按「Check my progress」 ,確認目標已達成。
啟用 Document AI API
工作 2:建立及測試處理器
您必須先建立文件 OCR 處理器執行個體,才能執行擷取作業。您可以使用 Cloud 控制台或 Processor Management API 完成這項操作。
從「導覽選單」點按「查看所有產品」 。在「人工智慧」 專區,選取「Document AI」 。
依序點按「探索處理器」 >「Document OCR」 。
將名稱設為 lab-ocr,然後從清單中選取最接近的區域。
點按「建立」 即可建立處理器
複製 處理器 ID。您稍後必須在程式碼中使用此 ID。
下載下方的 PDF 檔,內含艾倫.亞歷山大.米恩的小說《小熊維尼》前 3 頁。
下載 PDF
現在,您可以在控制台中上傳文件,測試處理器。
點按「上傳測試文件」 ,然後選取下載的 PDF 檔。
輸出內容應如下所示:
點按「Check my progress」 ,確認目標已達成。
建立及測試處理器
工作 3:驗證 API 要求
如要向 Document AI API 提出要求,必須使用「服務帳戶」 。 「服務帳戶」屬於您的專案,Python 用戶端程式庫會使用此帳戶提出 API 要求。服務帳戶與其他使用者帳戶一樣,都是以電子郵件地址表示。在本節中,您將使用 「Cloud SDK」建立服務帳戶,然後建立以服務帳戶身分進行驗證所需的憑證。
首先,開啟新的 Cloud Shell 視窗,然後執行下列指令,使用專案 ID 設定環境變數:
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)
接著,請使用下列方式建立新的服務帳戶,用以存取 Document AI API:
gcloud iam service-accounts create my-docai-sa \
--display-name "my-docai-service-account"
使用下列指令,授予服務帳戶存取 Document AI、Cloud Storage 和服務使用情形的權限:
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/documentai.admin"
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/storage.admin"
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/serviceusage.serviceUsageConsumer"
建立 Python 程式碼使用的憑證,用以登入新的服務帳戶。輸入下列指令,建立憑證並儲存為 JSON 檔案 ~/key.json:
gcloud iam service-accounts keys create ~/key.json \
--iam-account my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
最後,設定 GOOGLE_APPLICATION_CREDENTIALS 環境變數,程式庫會使用這個變數尋找憑證。環境變數應設為您所建立 JSON 憑證檔案的完整路徑,方法如下:
export GOOGLE_APPLICATION_CREDENTIALS=$(realpath key.json)
如要進一步瞭解這種驗證方式,請參閱指南 。
點按「Check my progress」 ,確認目標已達成。
驗證 API 要求
工作 4:安裝用戶端程式庫
在 Cloud Shell 執行下列指令,安裝 Document AI 和 Cloud Storage 的 Python 用戶端程式庫。
pip3 install --upgrade google-cloud-documentai
pip3 install --upgrade google-cloud-storage
輸出內容應如下所示:
...
Installing collected packages: google-cloud-documentai
Successfully installed google-cloud-documentai-1.4.1
.
.
Installing collected packages: google-cloud-storage
Successfully installed google-cloud-storage-1.43.0
您現在可以使用 Document AI API 了!
注意: 如果您要自行設定 Python 開發環境,請參閱這些指南 。
將範例 PDF 上傳至 Cloud Shell
在 Cloud Shell 工具列中,點按三點圖示,然後選取「上傳」 。
依序選取「檔案」 >「選擇檔案」 ,然後選取先前下載的 3 頁 PDF 檔。
點按「上傳」。
或者 ,您也能使用 gcloud storage cp 從公開的 Google Cloud Storage Bucket 下載 PDF。
gcloud storage cp gs://cloud-samples-data/documentai/codelabs/ocr/Winnie_the_Pooh_3_Pages.pdf .
工作 5:發出線上處理要求
在這個步驟中,您將使用線上處理 (同步) API 處理小說的前 3 頁。這種方法最適合用於儲存在本機的小型文件。如要瞭解各處理器類型的頁數和檔案大小上限,請參閱完整處理器清單 。
在 Cloud Shell 建立檔案 online_processing.py,然後在該檔案貼上下列程式碼:
from google.api_core.client_options import ClientOptions
from google.cloud import documentai_v1 as documentai
PROJECT_ID = "YOUR_PROJECT_ID"
LOCATION = "YOUR_PROJECT_LOCATION" # 格式為「us」或「eu」
PROCESSOR_ID = "YOUR_PROCESSOR_ID" # 在 Cloud 控制台建立處理器
# 您目前工作目錄中的本機檔案
FILE_PATH = "Winnie_the_Pooh_3_Pages.pdf"
# 請參閱 https://cloud.google.com/document-ai/docs/file-types
# 瞭解支援的檔案類型
MIME_TYPE = "application/pdf"
# 建立用戶端執行個體
docai_client = documentai.DocumentProcessorServiceClient(
client_options=ClientOptions(api_endpoint=f"{LOCATION}-documentai.googleapis.com")
)
# 處理器的完整資源名稱,例如:
# projects/project-id/locations/location/processor/processor-id
# 您必須先在 Cloud 控制台建立新的處理器
RESOURCE_NAME = docai_client.processor_path(PROJECT_ID, LOCATION, PROCESSOR_ID)
# 將檔案載入記憶體
with open(FILE_PATH, "rb") as image:
image_content = image.read()
# 將二進位資料載入 Document AI RawDocument 物件
raw_document = documentai.RawDocument(content=image_content, mime_type=MIME_TYPE)
# 設定處理要求
request = documentai.ProcessRequest(name=RESOURCE_NAME, raw_document=raw_document)
# 使用 Document AI 用戶端處理範例表單
result = docai_client.process_document(request=request)
document_object = result.document
print("Document processing complete.")
print(f"Text: {document_object.text}")
將 YOUR_PROJECT_ID、YOUR_PROJECT_LOCATION、YOUR_PROCESSOR_ID 和 FILE_PATH 換成您環境適用的值。
注意: FILE_PATH 是您在上一個步驟中上傳至 Cloud Shell 的檔案名稱。如果沒有重新命名,檔名應為 Winnie_the_Pooh_3_Pages.pdf,這是預設值,不需要變更。
執行程式碼,系統會擷取文字並顯示於控制台。
python3 online_processing.py
輸出內容應如下所示:
Document processing complete.
Text: IN WHICH We Are Introduced to
CHAPTER I
Winnie-the-Pooh and Some
Bees, and the Stories Begin
HERE is Edward Bear, coming
downstairs now, bump, bump, bump, on the back
of his head, behind Christopher Robin. It is, as far
as he knows, the only way of coming downstairs,
but sometimes he feels that there really is another
way, if only he could stop bumping for a moment
and think of it. And then he feels that perhaps there
isn't. Anyhow, here he is at the bottom, and ready
to be introduced to you. Winnie-the-Pooh.
When I first heard his name, I said, just as you
are going to say, "But I thought he was a boy?"
"So did I," said Christopher Robin.
"Then you can't call him Winnie?"
"I don't."
"But you said--"
...
工作 6:發出批次處理要求
現在,假設您想閱讀整本小說的內容。
線上處理功能對可傳送的頁數和檔案大小設有限制,且每次 API 呼叫只能處理一個文件檔案。
批次處理功能可透過非同步方法處理較大或多個檔案。
在本節中,您將使用 Document AI 批次處理 API 處理整本《小熊維尼》小說,並將文字輸出至 Google Cloud Storage Bucket。
批次處理會使用長時間執行的作業 ,以非同步方式管理要求,因此我們必須以不同於線上處理的方式,提出要求並擷取輸出內容。
不過,無論使用線上或批次處理,輸出內容都會採用相同的 Document 物件格式。
本節說明如何提供特定文件,供 Document AI 處理。後續章節會說明如何處理整個文件目錄。
將 PDF 上傳至 Cloud Storage
batch_process_documents() 方法目前接受 Google Cloud Storage 中的檔案。如要進一步瞭解物件結構,請參閱 documentai_v1.types.BatchProcessRequest 。
執行下列指令,建立 Google Cloud Storage Bucket 來儲存 PDF 檔,並上傳至該 bucket:
gcloud storage buckets create gs://$GOOGLE_CLOUD_PROJECT
gcloud storage cp gs://cloud-samples-data/documentai/codelabs/ocr/Winnie_the_Pooh.pdf gs://$GOOGLE_CLOUD_PROJECT/
使用 batch_process_documents() 方法
建立檔案 batch_processing.py,然後貼上下列程式碼:
import re
from typing import List
from google.api_core.client_options import ClientOptions
from google.cloud import documentai_v1 as documentai
from google.cloud import storage
PROJECT_ID = "YOUR_PROJECT_ID"
LOCATION = "YOUR_PROJECT_LOCATION" # 格式為「us」或「eu」
PROCESSOR_ID = "YOUR_PROCESSOR_ID" # 在 Cloud 控制台建立處理器
# 格式為「gs://input_bucket/directory/file.pdf」
GCS_INPUT_URI = "gs://cloud-samples-data/documentai/codelabs/ocr/Winnie_the_Pooh.pdf"
INPUT_MIME_TYPE = "application/pdf"
# 格式為「gs://output_bucket/directory」
GCS_OUTPUT_URI = "YOUR_OUTPUT_BUCKET_URI"
# 建立用戶端執行個體
docai_client = documentai.DocumentProcessorServiceClient(
client_options=ClientOptions(api_endpoint=f"{LOCATION}-documentai.googleapis.com")
)
# 處理器的完整資源名稱,例如:
# projects/project-id/locations/location/processor/processor-id
# 您必須先在 Cloud 控制台建立新的處理器
RESOURCE_NAME = docai_client.processor_path(PROJECT_ID, LOCATION, PROCESSOR_ID)
# 輸入文件的 Cloud Storage URI
input_document = documentai.GcsDocument(
gcs_uri=GCS_INPUT_URI, mime_type=INPUT_MIME_TYPE
)
# 將 GCS 輸入 URI 載入文件檔案清單
input_config = documentai.BatchDocumentsInputConfig(
gcs_documents=documentai.GcsDocuments(documents=[input_document])
)
# 輸出目錄的 Cloud Storage URI
gcs_output_config = documentai.DocumentOutputConfig.GcsOutputConfig(
gcs_uri=GCS_OUTPUT_URI
)
# 將 GCS 輸出 URI 載入 OutputConfig 物件
output_config = documentai.DocumentOutputConfig(gcs_output_config=gcs_output_config)
# 設定處理要求
request = documentai.BatchProcessRequest(
name=RESOURCE_NAME,
input_documents=input_config,
document_output_config=output_config,
)
# 批次處理會傳回長時間執行的作業 (LRO)
operation = docai_client.batch_process_documents(request)
# 持續輪詢作業直到完成。
# 較大型的檔案可能需要一些時間才能完成
# 格式:projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID
print(f"Waiting for operation {operation.operation.name} to complete...")
operation.result()
# 注意:也能使用回呼進行非同步處理
#
# def my_callback(future):
# result = future.result()
#
# operation.add_done_callback(my_callback)
print("Document processing complete.")
# 作業完成後,
# 從作業中繼資料取得輸出文件資訊
metadata = documentai.BatchProcessMetadata(operation.metadata)
if metadata.state != documentai.BatchProcessMetadata.State.SUCCEEDED:
raise ValueError(f"Batch Process Failed: {metadata.state_message}")
documents: List[documentai.Document] = []
# 用於從 GCS 擷取輸出檔案的 Cloud Storage 用戶端
storage_client = storage.Client()
# 每個輸入文件一個處理程序
for process in metadata.individual_process_statuses:
# output_gcs_destination 格式:gs://BUCKET/PREFIX/OPERATION_NUMBER/0
# GCS API 需要個別的 bucket 名稱和 URI 前置字串
output_bucket, output_prefix = re.match(
r"gs://(.*?)/(.*)", process.output_gcs_destination
).groups()
# 從輸出 Bucket 取得文件物件清單
output_blobs = storage_client.list_blobs(output_bucket, prefix=output_prefix)
# DocAI 可能會針對每個來源檔案輸出多個 JSON 檔案
for blob in output_blobs:
# Document AI 應只將 JSON 檔案輸出至 GCS
if ".json" not in blob.name:
print(f"Skipping non-supported file type {blob.name}")
continue
print(f"Fetching {blob.name}")
# 下載 JSON 檔案並轉為文件物件
document = documentai.Document.from_json(
blob.download_as_bytes(), ignore_unknown_fields=True
)
documents.append(document)
# 顯示所有文件的文字
# 為求簡潔,截斷為 100 個字元
for document in documents:
print(document.text[:100])
將 YOUR_PROJECT_ID、YOUR_PROJECT_LOCATION、YOUR_PROCESSOR_ID、GCS_INPUT_URI 和 GCS_OUTPUT_URI 換成您環境適用的值。
在 GCS_INPUT_URI 中,使用您在上一步驟中上傳至 bucket 的檔案 URI,即 gs:// /Winnie_the_Pooh.pdf。
在 GCS_OUTPUT_URI 中,使用您在上一步驟中建立的 bucket URI,即 gs://。
執行程式碼,您應會看到完整的小說文字已擷取並顯示於控制台。
python3 batch_processing.py
注意: 檔案比先前的範例大得多,因此可能需要一段時間才能完成。不過,使用 Batch Processing API 時,您會收到作業 ID,可用於在工作完成後從 Cloud Storage 取得輸出內容。
輸出內容應如下所示:
Document processing complete.
Fetching 16218185426403815298/0/Winnie_the_Pooh-0.json
Fetching 16218185426403815298/0/Winnie_the_Pooh-1.json
Fetching 16218185426403815298/0/Winnie_the_Pooh-10.json
Fetching 16218185426403815298/0/Winnie_the_Pooh-11.json
Fetching 16218185426403815298/0/Winnie_the_Pooh-12.json
Fetching 16218185426403815298/0/Winnie_the_Pooh-13.json
Fetching 16218185426403815298/0/Winnie_the_Pooh-14.json
Fetching 16218185426403815298/0/Winnie_the_Pooh-15.json
..
This is a reproduction of a library book that was digitized
by Google as part of an ongoing effort t
0
TAM MTAA
Digitized by
Google
Introduction
(I₂
F YOU happen to have read another
book about Christo
84
Eeyore took down his right hoof from his right
ear, turned round, and with great difficulty put u
94
..
太好了!您已成功使用 Document AI 批次處理 API,從 PDF 檔擷取文字。
點按「Check my progress」 ,確認目標已達成。
發出批次處理要求
工作 7:對目錄發出批次處理要求
有時您可能會想要處理整個文件目錄,而不需要個別列出每份文件。batch_process_documents() 方法支援輸入特定文件清單或目錄路徑。
在本節中,您將瞭解如何處理完整的文件檔案目錄。大部分的程式碼與上一個步驟相同,唯一的差異是透過 BatchProcessRequest 傳送的 GCS URI。
執行下列指令,將範例目錄 (內含小說的多個頁面,分別位於不同檔案中) 複製到 Cloud Storage bucket。
gsutil -m cp -r gs://cloud-samples-data/documentai/codelabs/ocr/multi-document/* gs://$GOOGLE_CLOUD_PROJECT/multi-document/
您可以直接讀取檔案,或將檔案複製到自己的 Cloud Storage bucket。
建立檔案 batch_processing_directory.py,然後貼上下列程式碼:
import re
from typing import List
from google.api_core.client_options import ClientOptions
from google.cloud import documentai_v1 as documentai
from google.cloud import storage
PROJECT_ID = "YOUR_PROJECT_ID"
LOCATION = "YOUR_PROJECT_LOCATION" # 格式為「us」或「eu」
PROCESSOR_ID = "YOUR_PROCESSOR_ID" # 在 Cloud 控制台建立處理器
# 格式為「gs://input_bucket/directory」
GCS_INPUT_PREFIX = "gs://cloud-samples-data/documentai/codelabs/ocr/multi-document"
# 格式為「gs://output_bucket/directory」
GCS_OUTPUT_URI = "YOUR_OUTPUT_BUCKET_URI"
# 建立用戶端執行個體
docai_client = documentai.DocumentProcessorServiceClient(
client_options=ClientOptions(api_endpoint=f"{LOCATION}-documentai.googleapis.com")
)
# 處理器的完整資源名稱,例如:
# projects/project-id/locations/location/processor/processor-id
# 您必須先在 Cloud 控制台建立新的處理器
RESOURCE_NAME = docai_client.processor_path(PROJECT_ID, LOCATION, PROCESSOR_ID)
# 輸入目錄的 Cloud Storage URI
gcs_prefix = documentai.GcsPrefix(gcs_uri_prefix=GCS_INPUT_PREFIX)
# 將 GCS 輸入 URI 載入批次輸入設定
input_config = documentai.BatchDocumentsInputConfig(gcs_prefix=gcs_prefix)
# 輸出目錄的 Cloud Storage URI
gcs_output_config = documentai.DocumentOutputConfig.GcsOutputConfig(
gcs_uri=GCS_OUTPUT_URI
)
# 將 GCS 輸出 URI 載入 OutputConfig 物件
output_config = documentai.DocumentOutputConfig(gcs_output_config=gcs_output_config)
# 設定處理要求
request = documentai.BatchProcessRequest(
name=RESOURCE_NAME,
input_documents=input_config,
document_output_config=output_config,
)
# 批次處理會傳回長時間執行的作業 (LRO)
operation = docai_client.batch_process_documents(request)
# 持續輪詢作業直到完成。
# 較大型的檔案可能需要一些時間才能完成
# 格式:projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID
print(f"Waiting for operation {operation.operation.name} to complete...")
operation.result()
# 注意:也能使用回呼進行非同步處理
#
# def my_callback(future):
# result = future.result()
#
# operation.add_done_callback(my_callback)
print("Document processing complete.")
# 作業完成後,
# 從作業中繼資料取得輸出文件資訊
metadata = documentai.BatchProcessMetadata(operation.metadata)
if metadata.state != documentai.BatchProcessMetadata.State.SUCCEEDED:
raise ValueError(f"Batch Process Failed: {metadata.state_message}")
documents: List[documentai.Document] = []
# 用於從 GCS 擷取輸出檔案的 Cloud Storage 用戶端
storage_client = storage.Client()
# 每個輸入文件一個處理程序
for process in metadata.individual_process_statuses:
# output_gcs_destination 格式:gs://BUCKET/PREFIX/OPERATION_NUMBER/0
# GCS API 需要個別的 bucket 名稱和 URI 前置字串
output_bucket, output_prefix = re.match(
r"gs://(.*?)/(.*)", process.output_gcs_destination
).groups()
# 從輸出 Bucket 取得文件物件清單
output_blobs = storage_client.list_blobs(output_bucket, prefix=output_prefix)
# DocAI 可能會針對每個來源檔案輸出多個 JSON 檔案
for blob in output_blobs:
# Document AI 應只將 JSON 檔案輸出至 GCS
if ".json" not in blob.name:
print(f"Skipping non-supported file type {blob.name}")
continue
print(f"Fetching {blob.name}")
# 下載 JSON 檔案並轉為文件物件
document = documentai.Document.from_json(
blob.download_as_bytes(), ignore_unknown_fields=True
)
documents.append(document)
# 輸出所有文件的文字
# 為求簡潔,截斷為 100 個字元
for document in documents:
print(document.text[:100])
將 PROJECT_ID、LOCATION、PROCESSOR_ID、GCS_INPUT_PREFIX 和 GCS_OUTPUT_URI 換成您環境適用的值。
在 GCS_INPUT_PREFIX中,使用您在上一節中上傳至 bucket 的目錄 URI,即 gs:// /multi-document。
在 GCS_OUTPUT_URI 中,使用您在上一節中建立的 bucket URI,即 gs://。
使用下列指令執行程式碼,您應該會看到從 Cloud Storage 目錄中所有文件檔案擷取到的文字。
python3 batch_processing_directory.py
輸出內容應如下所示:
Document processing complete.
Fetching 16354972755137859334/0/Winnie_the_Pooh_Page_0-0.json
Fetching 16354972755137859334/1/Winnie_the_Pooh_Page_1-0.json
Fetching 16354972755137859334/2/Winnie_the_Pooh_Page_10-0.json
..
Introduction
(I₂
F YOU happen to have read another
book about Christopher Robin, you may remember
th
IN WHICH We Are Introduced to
CHAPTER I
Winnie-the-Pooh and Some
Bees, and the Stories Begin
HERE is
..
太好了!您已成功使用 Document AI Python 用戶端程式庫,透過 Document AI 處理器處理文件目錄,並將結果輸出至 Cloud Storage。
點按「Check my progress」 ,確認目標已達成。
對目錄提出批次處理要求
恭喜!
恭喜!在本實驗室中,您學會如何使用 Document AI Python 用戶端程式庫,透過 Document AI 處理器處理目錄中的文件,並將結果輸出至 Cloud Storage。您也學會如何使用服務帳戶金鑰檔案驗證 API 要求、安裝 Document AI Python 用戶端程式庫,以及使用線上 (同步) 和批次 (非同步) API 處理要求。
後續步驟/瞭解詳情
如要進一步瞭解 Document AI 和 Python 用戶端程式庫,請參閱下列資源:
Google Cloud 教育訓練與認證
協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程 會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證 可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。
手冊上次更新日期:2024 年 6 月 13 日
實驗室上次測試日期:2024 年 6 月 13 日
Copyright 2025 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。