1. Ringkasan
Apa itu Document AI?
Document AI adalah solusi pemahaman dokumen yang mengambil data tidak terstruktur (misalnya dokumen, email, invoice, formulir, dll.) dan mempermudah data untuk dipahami, dianalisis, serta digunakan. API ini menyediakan struktur melalui klasifikasi konten, ekstraksi entitas, penelusuran lanjutan, dan lainnya.
Di lab ini, Anda akan mempelajari cara melakukan Pengenalan Karakter Optik menggunakan Document AI API dengan Python.
Kami akan menggunakan file PDF dari novel klasik "Winnie the Pooh" oleh AA Milne, yang baru-baru ini menjadi bagian dari Domain Publik di Amerika Serikat. File ini dipindai dan didigitalkan oleh Google Buku.
Yang akan Anda pelajari
- Cara mengaktifkan Document AI API
- Cara mengautentikasi permintaan API
- Cara menginstal library klien untuk Python
- Cara mengurai teks dari file PDF
- Cara menjalankan permintaan asinkron menggunakan Google Cloud Storage
Yang Anda butuhkan
Survei
Bagaimana Anda akan menggunakan tutorial ini?
Bagaimana penilaian Anda terhadap pengalaman dengan Python?
Bagaimana penilaian Anda terhadap pengalaman menggunakan layanan Google Cloud?
2. Penyiapan dan Persyaratan
Buka https://gcpcredits.com/io2022, lalu klik tombol "Klik di sini untuk mengakses kredit Anda":
Pada dialog berikutnya, setujui persyaratan layanan dengan mengklik tombol "Setuju dan Lanjutkan":
Setelah menyetujui persyaratan layanan, Anda akan dialihkan ke halaman ringkasan penagihan yang menyertakan panel seperti ini di dekat pojok kanan bawah:
Terakhir, ketika membuat project pertama, Anda akan melihat dialog yang memungkinkan Anda menetapkan akun penagihan ke project Anda. Pilih akun penagihan yang terkait dengan kredit gratis Anda, lalu klik tombol buat:
Singkatnya, sekarang Anda memiliki akun penagihan dan project, dan kedua entity tersebut ditautkan sedemikian rupa sehingga semua pekerjaan yang Anda lakukan di codelab hari ini akan didanai oleh kredit gratis Anda**.**
Penyiapan lingkungan mandiri
- Login ke Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. (Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.)
Ingat Project ID, nama unik di semua project Google Cloud. (Maaf, ID Project di atas telah digunakan dan tidak akan berfungsi untuk Anda). Anda harus memberikan ID ini nanti sebagai PROJECT_ID
.
- Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan resource Google Cloud.
Pastikan untuk mengikuti petunjuk di bagian "Membersihkan". Bagian ini memberi tahu Anda cara mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis seharga $300 USD.
Mulai Cloud Shell
Saat menggunakan Google Cloud, Anda dapat mengoperasikannya dari jarak jauh menggunakan laptop, codelab ini menggunakan Google Cloud Shell, lingkungan command line yang dijalankan di Cloud.
Mengaktifkan Cloud Shell
- Dari Cloud Console, klik Aktifkan Cloud Shell
Jika belum pernah memulai Cloud Shell, Anda akan melihat layar perantara (di paruh bawah) yang menjelaskan apa itu Cloud Shell. Jika demikian, klik Lanjutkan (dan Anda tidak akan pernah melihatnya lagi). Berikut tampilan layar sekali-tampil tersebut:
Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke Cloud Shell.
Cloud Shell memberi Anda akses terminal ke mesin virtual yang dihosting di cloud. Mesin virtual ini mencakup semua alat pengembangan yang akan Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda dalam codelab ini dapat dilakukan hanya dengan browser.
Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke Project ID Anda.
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list
Output perintah
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
Output perintah
[core] project = <PROJECT_ID>
Jika tidak, Anda dapat menyetelnya dengan perintah ini:
gcloud config set project <PROJECT_ID>
Output perintah
Updated property [core/project].
3 Mengaktifkan Document AI API
Sebelum dapat mulai menggunakan Document AI, Anda harus mengaktifkan API. Buka Cloud Console di browser Anda.
- Dengan menggunakan Kotak Penelusuran di bagian atas konsol, telusuri "Document AI API", lalu klik Aktifkan untuk menggunakan API di project Google Cloud Anda
- Atau, API dapat diaktifkan menggunakan perintah
gcloud
berikut.
gcloud services enable documentai.googleapis.com
Anda akan melihat yang seperti ini:
Operation "operations/..." finished successfully.
Sekarang, Anda dapat menggunakan Document AI.
4. Membuat dan Menguji Prosesor
Anda harus membuat instance prosesor Document OCR terlebih dahulu yang akan melakukan ekstraksi. Hal ini dapat diselesaikan menggunakan Cloud Console atau Processor Management API.
Cloud Console
- Di console, buka Ringkasan Document AI Platform
- Klik Create Processor, lalu pilih Document OCR
- Tentukan nama prosesor dan pilih region Anda dari daftar.
- Klik Buat untuk membuat prosesor
- Salin ID Prosesor Anda. Anda harus menggunakan ini dalam kode nanti.
Anda dapat menguji prosesor di console dengan mengupload dokumen. Klik Upload Dokumen Pengujian dan pilih dokumen untuk diuraikan.
Anda dapat mendownload file PDF di bawah, yang berisi 3 halaman pertama novel kami.
Output Anda akan terlihat seperti ini:
Library Klien Phyton
Ikuti codelab ini untuk mempelajari cara mengelola prosesor Document AI dengan Library Klien Python:
5. Melakukan Autentikasi permintaan Firebase
Untuk membuat permintaan ke Document AI API, Anda harus menggunakan Akun Layanan. Akun Layanan merupakan milik project Anda dan digunakan oleh library Klien Python untuk membuat permintaan API. Seperti akun pengguna lainnya, akun layanan diwakili oleh alamat email. Di bagian ini, Anda akan menggunakan Cloud SDK untuk membuat akun layanan, lalu membuat kredensial yang diperlukan untuk melakukan autentikasi sebagai akun layanan.
Pertama, tetapkan variabel lingkungan dengan PROJECT_ID
yang akan Anda gunakan di seluruh codelab ini:
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)
Selanjutnya, buat akun layanan baru untuk mengakses Document AI API dengan menggunakan:
gcloud iam service-accounts create my-docai-sa \
--display-name "my-docai-service-account"
Selanjutnya, buat kredensial yang digunakan kode Python Anda untuk login sebagai akun layanan baru. Buat kredensial ini dan simpan sebagai file JSON "~/key.json" dengan menggunakan perintah berikut:
gcloud iam service-accounts keys create ~/key.json \
--iam-account my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
Terakhir, tetapkan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS, yang digunakan oleh library untuk menemukan kredensial Anda. Untuk membaca selengkapnya tentang autentikasi formulir ini, lihat panduan. Variabel lingkungan harus ditetapkan ke jalur lengkap file JSON kredensial yang Anda buat, dengan menggunakan:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json"
6. Instal library klien
Instal library klien:
pip3 install --upgrade google-cloud-documentai
pip3 install --upgrade google-cloud-storage
Anda akan melihat yang seperti ini:
... Installing collected packages: google-cloud-documentai Successfully installed google-cloud-documentai-1.2.0 . . Installing collected packages: google-cloud-storage Successfully installed google-cloud-storage-1.43.0
Sekarang, Anda siap untuk menggunakan Document AI API.
Mulai Python Interaktif
Dalam tutorial ini, Anda akan menggunakan penafsir Python interaktif yang disebut IPython. Mulai sesi dengan menjalankan ipython
di Cloud Shell. Perintah ini menjalankan penafsir Python dalam sesi interaktif.
ipython
Anda akan melihat sesuatu seperti ini:
Python 3.7.3 (default, Jul 25 2020, 13:03:44) Type 'copyright', 'credits' or 'license' for more information IPython 7.30.1 -- An enhanced Interactive Python. Type '?' for help. In [1]:
7. Download Contoh PDF
Kami memiliki dokumen contoh yang berisi 3 halaman pertama novel.
Anda dapat mendownload PDF menggunakan link berikut. Kemudian, upload ke instance cloudshell.
Anda juga dapat mendownloadnya dari Bucket Google Cloud Storage publik kami menggunakan gsutil
.
gsutil cp gs://cloud-samples-data/documentai/codelabs/ocr/Winnie_the_Pooh_3_Pages.pdf .
8 Membuat Permintaan Dokumen Proses Sinkron
Pada langkah ini, Anda akan memproses 3 halaman pertama novel menggunakan endpoint sinkron. Metode ini paling cocok untuk dokumen yang lebih kecil yang disimpan secara lokal. Lihat daftar prosesor lengkap untuk mengetahui ukuran halaman dan ukuran file maksimum bagi setiap jenis prosesor.
Salin kode berikut ke sesi iPython:
from google.cloud import documentai_v1 as documentai
def process_document(project_id: str, location: str,
processor_id: str, file_path: str,
mime_type: str) -> documentai.Document:
"""
Processes a document using the Document AI API.
"""
# Instantiates a client
documentai_client = documentai.DocumentProcessorServiceClient()
# The full resource name of the processor, e.g.:
# projects/project-id/locations/location/processor/processor-id
# You must create new processors in the Cloud Console first
resource_name = documentai_client.processor_path(
project_id, location, processor_id)
# Read the file into memory
with open(file_path, "rb") as image:
image_content = image.read()
# Load Binary Data into Document AI RawDocument Object
raw_document = documentai.RawDocument(
content=image_content, mime_type=mime_type)
# Configure the process request
request = documentai.ProcessRequest(
name=resource_name, raw_document=raw_document)
# Use the Document AI client to process the sample form
result = documentai_client.process_document(request=request)
return result.document
def main():
"""
Run the codelab.
"""
project_id = 'YOUR_PROJECT_ID'
location = 'YOUR_PROJECT_LOCATION' # Format is 'us' or 'eu'
processor_id = 'YOUR_PROCESSOR_ID' # Create processor in Cloud Console
file_path = 'Winnie_the_Pooh_3_Pages.pdf' # The local file in your current working directory
# Refer to https://cloud.google.com/document-ai/docs/processors-list for the supported file types
mime_type = 'application/pdf'
document = process_document(project_id=project_id, location=location,
processor_id=processor_id, file_path=file_path,
mime_type=mime_type)
print("Document processing complete.")
print(f"Text: {document.text}")
Panggil fungsi utama, dan Anda akan melihat teks yang diekstrak dan dicetak di console.
main()
Anda akan melihat output berikut jika menggunakan dokumen contoh kami:
Document processing complete. Text: CHAPTER I IN WHICH We Are Introduced to 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 " ... Digitized by Google
9. Membuat Permintaan Dokumen Proses Asinkron
Sekarang, misalnya Anda ingin membaca teks dari seluruh novel.
- Metode
process_documents()
memiliki batasan jumlah halaman dan ukuran file yang dapat dikirim dan hanya mengizinkan satu file dokumen per panggilan API. - Metode
batch_process_documents()
memungkinkan pemrosesan asinkron dari file yang lebih besar dan pemrosesan batch untuk beberapa file.
Pada langkah ini, kita akan memproses seluruh novel "Winnie the Pooh" dengan Document AI Async API dan mengeluarkan teks ke dalam Bucket Google Cloud Storage.
Upload PDF ke Cloud Storage
Metode batch_process_documents()
saat ini menerima file dari Google Cloud Storage. Anda dapat merujuk documentai_v1.types.BatchProcessRequest
untuk mengetahui informasi selengkapnya tentang struktur objek.
Untuk contoh ini, Anda dapat menyalin file dari contoh bucket data kami...
gsutil cp gs://cloud-samples-data/documentai/codelabs/ocr/Winnie_the_Pooh.pdf gs://YOUR_BUCKET_NAME/
...atau Anda dapat mendownload file sampel novel dari link di bawah ini dan menguploadnya ke bucket Anda sendiri.
Anda juga akan memerlukan Bucket GCS untuk menyimpan output API.
Menggunakan metode batch_process_documents()
Salin kode berikut ke sesi iPython:
import re
from google.api_core.operation import Operation
from google.cloud import documentai_v1 as documentai
from google.cloud import storage
def batch_process_documents(
project_id: str,
location: str,
processor_id: str,
gcs_input_uri: str,
input_mime_type: str,
gcs_output_uri: str,
) -> Operation:
"""
Constructs a request to process a document using the Document AI
Asynchronous API.
"""
# You must set the api_endpoint if you use a location other than 'us', e.g.:
opts = {}
if location == "eu":
opts = {"api_endpoint": "eu-documentai.googleapis.com"}
# Instantiates a client
documentai_client = documentai.DocumentProcessorServiceClient(client_options=opts)
# The full resource name of the processor, e.g.:
# projects/project-id/locations/location/processor/processor-id
# You must create new processors in the Cloud Console first
resource_name = documentai_client.processor_path(project_id, location, processor_id)
# Cloud Storage URI for the Input Document
input_document = documentai.GcsDocument(
gcs_uri=gcs_input_uri, mime_type=input_mime_type
)
# Load GCS Input URI into a List of document files
input_config = documentai.BatchDocumentsInputConfig(
gcs_documents=documentai.GcsDocuments(documents=[input_document])
)
# Cloud Storage URI for Output directory
gcs_output_config = documentai.DocumentOutputConfig.GcsOutputConfig(
gcs_uri=gcs_output_uri
)
# Load GCS Output URI into OutputConfig object
output_config = documentai.DocumentOutputConfig(gcs_output_config=gcs_output_config)
# Configure Process Request
request = documentai.BatchProcessRequest(
name=resource_name,
input_documents=input_config,
document_output_config=output_config,
)
# Future for long-running operations returned from Google Cloud APIs.
operation = documentai_client.batch_process_documents(request)
return operation
def get_documents_from_gcs(
gcs_output_uri: str, operation_name: str
) -> [documentai.Document]:
"""
Download the document output from GCS.
"""
# The GCS API requires the bucket name and URI prefix separately
match = re.match(r"gs://([^/]+)/(.+)", gcs_output_uri)
output_bucket = match.group(1)
prefix = match.group(2)
# The output files will be in a new subdirectory with the Operation ID as the name
operation_id = re.search("operations\/(\d+)", operation_name, re.IGNORECASE).group(1)
output_directory = f"{prefix}/{operation_id}"
storage_client = storage.Client()
# List of all of the files in the directory `gs://gcs_output_uri/operation_id`
blob_list = list(storage_client.list_blobs(output_bucket, prefix=output_directory))
output_documents = []
for blob in blob_list:
# Document AI should only output JSON files to GCS
if ".json" in blob.name:
document = documentai.types.Document.from_json(blob.download_as_bytes())
output_documents.append(document)
else:
print(f"Skipping non-supported file type {blob.name}")
return output_documents
def main():
"""
Run the codelab.
"""
project_id = 'YOUR_PROJECT_ID'
location = 'YOUR_PROJECT_LOCATION' # Format is 'us' or 'eu'
processor_id = 'YOUR_PROCESSOR_ID' # Create processor in Cloud Console
# Format 'gs://input_bucket/directory/file.pdf'
gcs_input_uri = "INPUT_BUCKET_URI"
input_mime_type = "application/pdf"
# Format 'gs://output_bucket/directory'
gcs_output_uri = "YOUR_OUTPUT_BUCKET_URI"
# Batch Process returns a Long Running Operation (LRO)
operation = batch_process_documents(
project_id=project_id,
location=location,
processor_id=processor_id,
gcs_input_uri=gcs_input_uri,
input_mime_type=input_mime_type,
gcs_output_uri=gcs_output_uri,
)
# Format: projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID
operation_name = operation.operation.name
# Continually polls the operation until it is complete.
# This could take some time for larger files
print(f"Waiting for operation {operation_name} to complete...")
result = operation.result(timeout=300)
# NOTE: Can also use callbacks for asynchronous processing
#
# def my_callback(future):
# result = future.result()
#
# operation.add_done_callback(my_callback)
print("Document processing complete.")
# Get the Document Objects from the Output Bucket
document_list = get_documents_from_gcs(
gcs_output_uri=gcs_output_uri, operation_name=operation_name
)
for document in document_list:
print(document.text)
Panggil fungsi utama, dan Anda akan melihat teks novel lengkap yang diekstrak dan dicetak di konsol.
main()
Mungkin butuh waktu beberapa saat untuk menyelesaikan karena file jauh lebih besar dari contoh sebelumnya. (Oh, merepotkan...)
Namun, dengan API asinkron, Anda akan menerima ID Operasi yang dapat digunakan untuk mendapatkan output dari GCS setelah tugas selesai.
This is a reproduction of a library book that was digitized by Google as part of an ongoing effort to preserve the information in books and make it universally accessible. TM Google books https://books.google.com ..... He nodded and went out ... and in a moment I heard Winnie-the-Pooh -bump, bump, bump-go-ing up the stairs behind him. Digitized by Google
10. Selamat
Anda telah berhasil menggunakan Document AI untuk mengekstrak teks dari novel menggunakan API sinkron dan asinkron.
Sebaiknya Anda bereksperimen dengan dokumen lain dan menjelajahi pemroses lain yang tersedia di platform.
Pembersihan
Agar tidak menimbulkan tagihan ke akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini:
- Di Cloud Console, buka halaman Mengelola resource.
- Dalam daftar project, pilih project Anda lalu klik Hapus.
- Pada dialog, ketik project ID, lalu klik Matikan untuk menghapus project.
Pelajari Lebih Lanjut
Lisensi
Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.