View a markdown version of this page

Mendeteksi teks dengan AWS Lambda Fungsi - Amazon Textract

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mendeteksi teks dengan AWS Lambda Fungsi

AWS Lambda adalah layanan komputasi yang dapat Anda gunakan untuk menjalankan kode tanpa menyediakan atau mengelola server. Anda dapat memanggil operasi Amazon Texttract API dari dalam fungsi AWS Lambda. Petunjuk berikut menunjukkan cara membuat fungsi Lambda dengan Python yang memanggil. DetectDocumentText

Fungsi Lambda mengembalikan daftar objek Blokir dengan informasi tentang kata-kata dan baris teks yang terdeteksi. Instruksi termasuk contoh kode Python yang menunjukkan cara memanggil fungsi Lambda dengan dokumen yang disediakan dari bucket Amazon S3 atau komputer lokal Anda. Gambar yang disimpan di Amazon S3 harus dalam format dokumen PDF atau TIFF satu halaman, atau dalam format JPEG atau PNG. Gambar lokal harus dalam format PDF atau TIFF satu halaman. Kode Python mengembalikan bagian dari respon JSON untuk setiap jenis Blok terdeteksi dalam dokumen.

Untuk contoh yang menggunakan fungsi Lambda untuk memproses dokumen dalam skala besar, lihat Amazon Textract IDP CDK Constructs and Use machine learning untuk mengotomatisasi dan memproses dokumen dalam skala besar.

Langkah 1: Buat AWS Lambda fungsi (konsol)

Pada langkah ini, Anda membuat AWS Lambda fungsi kosong dan peran eksekusi IAM yang memungkinkan fungsi Anda memanggil DetectDocumentText operasi. Jika Anda memasok dokumen dari Amazon S3, langkah ini juga menunjukkan cara memberikan akses ke bucket yang menyimpan dokumen Anda.

Kemudian Anda menambahkan kode sumber dan secara opsional menambahkan lapisan ke fungsi Lambda.

Untuk membuat sebuah AWS Lambda fungsi (konsol)
  1. Masuk ke Konsol Manajemen AWS dan buka AWS Lambda konsol di https://console.aws.amazon.com/lambda/.

  2. Pilih Buat fungsi. Untuk informasi selengkapnya, lihat Membuat Fungsi Lambda dengan Konsol.

  3. Pilih opsi berikut:

    • Pilih Tulis dari awal.

    • Masukkan nilai untuk nama Fungsi.

    • Untuk Runtime, pilih Python 3.9.

    • Untuk Arsitektur, pilih x86_64.

  4. Pilih Buat fungsi untuk membuat AWS Lambda fungsi.

  5. Pada halaman fungsi, pilih tab Konfigurasi.

  6. Pada panel Izin, di bawah Peran eksekusi, pilih nama peran untuk membuka peran di konsol IAM.

  7. Di tab Izin, pilih Tambahkan izin, lalu Buat kebijakan sebaris.

  8. Pilih tab JSON dan ganti kebijakan dengan kebijakan berikut:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Action": "textract:DetectDocumentText", "Resource": "*", "Effect": "Allow", "Sid": "DetectDocumentText" } ] }
  9. Pilih Tinjau kebijakan.

  10. Masukkan nama untuk kebijakan tersebut, misalnya DetectDocumentText-access.

  11. Pilih Buat kebijakan.

  12. Jika Anda menyimpan dokumen untuk analisis dalam bucket Amazon S3, Anda harus menambahkan kebijakan akses Amazon S3. Untuk melakukan ini, ulangi langkah 7 hingga 11 di AWS Lambda konsol dan buat perubahan berikut.

    1. Untuk langkah 8, gunakan kebijakan berikut. Ganti bucket/folder path dengan bucket Amazon S3 dan path folder ke dokumen yang ingin Anda analisis.

      JSON
      { "Version":"2012-10-17", "Statement": [ { "Sid": "S3Access", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::bucket/folder path/*" } ] }
    2. Untuk langkah 10, pilih nama kebijakan yang berbeda, seperti S3Bucket-access.

Langkah 2: (Opsional) Buat layer (konsol)

Untuk menjalankan contoh ini, Anda tidak perlu melakukan langkah ini. DetectDocumentTextOperasi ini disertakan dalam lingkungan Lambda Python default sebagai bagian dari AWS SDK for Python (Boto3). Jika bagian lain dari fungsi Lambda Anda memerlukan pembaruan AWS layanan terbaru yang tidak ada di lingkungan Lambda Python default, lakukan langkah ini untuk menambahkan rilis Boto3 SDK terbaru sebagai lapisan ke fungsi Anda.

Pertama, Anda membuat arsip file zip yang berisi Boto3 SDK. Kemudian, Anda membuat layer dan menambahkan arsip file zip ke layer. Untuk informasi selengkapnya, lihat Menggunakan layer dengan fungsi Lambda Anda.

Untuk membuat dan menambahkan lapisan (konsol)
  1. Buka prompt perintah dan masukkan perintah berikut untuk membuat paket penerapan dengan AWS SDK versi terbaru.

    pip install boto3 --target python/. zip boto3-layer.zip -r python/
  2. Perhatikan nama file zip (boto3-layer.zip), yang Anda gunakan pada langkah 8 prosedur ini.

  3. Buka AWS Lambda konsol di https://console.aws.amazon.com/lambda/.

  4. Di panel navigasi, pilih Layers (Lapisan).

  5. Pilih Buat lapisan.

  6. Masukkan nilai untuk Nama dan Deskripsi.

  7. Untuk jenis entri Kode, pilih Unggah file.zip dan pilih Unggah.

  8. Di kotak dialog, pilih arsip file zip (boto3-layer.zip) yang Anda buat di langkah 1 prosedur ini.

  9. Untuk runtime yang Kompatibel, pilih Python 3.9.

  10. Pilih Create untuk membuat layer.

  11. Pilih ikon menu panel navigasi.

  12. Di panel navigasi, pilih Fungsi.

  13. Dalam daftar sumber daya, pilih fungsi yang Anda buat sebelumnyaLangkah 1: Buat AWS Lambda fungsi (konsol).

  14. Pilih tab Kode.

  15. Di bagian Layers, pilih Add a layer.

  16. Pilih Custom Layers.

  17. Di Custom layers, pilih nama layer yang Anda masukkan pada langkah 6.

  18. Di Versi pilih versi layer, yang seharusnya 1.

  19. Pilih Tambahkan.

Langkah 3: Tambahkan kode Python (konsol)

Pada langkah ini, Anda menambahkan kode Python ke fungsi Lambda Anda dengan menggunakan editor kode konsol Lambda. Kode mendeteksi teks dalam dokumen dengan DetectDocumentText dan mengembalikan daftar objek Blokir dengan informasi tentang teks yang terdeteksi. Dokumen tersebut dapat ditemukan di ember Amazon S3 atau komputer lokal. Gambar yang disimpan di Amazon S3 harus berupa dokumen format PDF atau TIFF satu halaman atau dalam format JPEG atau PNG. Gambar lokal harus dalam format PDF atau TIFF satu halaman.

Untuk menambahkan kode Python (konsol)
  1. Arahkan ke tab Kode.

  2. Di editor kode, ganti kode di lambda_function.py dengan kode berikut:

    # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Purpose An AWS lambda function that analyzes documents with Amazon Textract. """ import json import base64 import logging import boto3 from botocore.exceptions import ClientError # Set up logging. logger = logging.getLogger(__name__) # Get the boto3 client. textract_client = boto3.client('textract') def lambda_handler(event, context): """ Lambda handler function param: event: The event object for the Lambda function. param: context: The context object for the lambda function. return: The list of Block objects recognized in the document passed in the event object. """ try: # Determine document source. if 'image' in event: # Decode the image image_bytes = event['image'].encode('utf-8') img_b64decoded = base64.b64decode(image_bytes) image = {'Bytes': img_b64decoded} elif 'S3Object' in event: image = {'S3Object': {'Bucket': event['S3Object']['Bucket'], 'Name': event['S3Object']['Name']} } else: raise ValueError( 'Invalid source. Only image base 64 encoded image bytes or S3Object are supported.') # Analyze the document. response = textract_client.detect_document_text(Document=image) # Get the Blocks blocks = response['Blocks'] lambda_response = { "statusCode": 200, "body": json.dumps(blocks) } except ClientError as err: error_message = "Couldn't analyze image. " + \ err.response['Error']['Message'] lambda_response = { 'statusCode': 400, 'body': { "Error": err.response['Error']['Code'], "ErrorMessage": error_message } } logger.error("Error function %s: %s", context.invoked_function_arn, error_message) except ValueError as val_error: lambda_response = { 'statusCode': 400, 'body': { "Error": "ValueError", "ErrorMessage": format(val_error) } } logger.error("Error function %s: %s", context.invoked_function_arn, format(val_error)) return lambda_response
  3. Pilih Deploy untuk menerapkan fungsi Lambda Anda.

Langkah 4: Coba fungsi Lambda Anda

Sekarang setelah Anda membuat fungsi Lambda, Anda dapat memanggilnya untuk mendeteksi teks dalam dokumen. Pada langkah ini, Anda menggunakan kode Python di komputer Anda untuk meneruskan dokumen lokal atau dokumen dalam bucket Amazon S3 ke fungsi Lambda Anda. Dokumen yang dilewatkan dari komputer lokal harus lebih kecil dari 6291456 byte. Jika dokumen Anda lebih besar, unggah ke bucket Amazon S3 dan panggil skrip dengan jalur Amazon S3 ke gambar. Untuk informasi tentang mengunggah file gambar ke bucket Amazon S3, lihat Mengunggah objek.

Pastikan Anda menjalankan kode di AWS Wilayah yang sama di mana Anda membuat fungsi Lambda. Anda dapat melihat AWS Wilayah untuk fungsi Lambda Anda di bilah navigasi halaman detail fungsi di konsol Lambda.

Jika AWS Lambda fungsi mengembalikan kesalahan batas waktu, perpanjang periode batas waktu untuk fungsi Lambda. Untuk informasi selengkapnya, lihat Mengonfigurasi batas waktu fungsi (konsol).

Untuk informasi selengkapnya tentang menjalankan fungsi Lambda dari kode Anda, lihat AWS Lambda Memanggil Fungsi.

Untuk mencoba fungsi Lambda Anda
  1. Jika Anda belum melakukannya, lakukan hal berikut:

    1. Pastikan bahwa pengguna memiliki lambda:InvokeFunction izin. Anda dapat menggunakan kebijakan berikut:

      Anda bisa mendapatkan ARN untuk fungsi Lambda Anda dari ikhtisar fungsi di konsol Lambda.

      Untuk memberikan akses dan menambahkan izin bagi pengguna, grup, atau peran Anda:

    2. Instal dan konfigurasikan AWS SDK untuk Python. Untuk informasi selengkapnya, lihat Langkah 2: Siapkan AWS CLI and AWS SDK.

  2. Simpan kode berikut ke file bernamaclient.py:

    # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Purpose Test code for running the Amazon Textract Lambda function example code. """ import argparse import logging import base64 import json import io import boto3 from botocore.exceptions import ClientError from PIL import Image, ImageDraw logger = logging.getLogger(__name__) def analyze_image(function_name, image): """Analyzes a document with an AWS Lambda function. :param image: The document that you want to analyze. :return The list of Block objects in JSON format. """ lambda_client = boto3.client('lambda') lambda_payload = {} if image.startswith('s3://'): logger.info("Analyzing document from S3 bucket: %s", image) bucket, key = image.replace("s3://", "").split("/", 1) s3_object = { 'Bucket': bucket, 'Name': key } lambda_payload = {"S3Object": s3_object} else: with open(image, 'rb') as image_file: logger.info("Analyzing local document: %s ", image) image_bytes = image_file.read() data = base64.b64encode(image_bytes).decode("utf8") lambda_payload = {"image": data} # Call the lambda function with the document. response = lambda_client.invoke(FunctionName=function_name, Payload=json.dumps(lambda_payload)) return json.loads(response['Payload'].read().decode()) def add_arguments(parser): """ Adds command line arguments to the parser. :param parser: The command line parser. """ parser.add_argument( "function", help="The name of the AWS Lambda function that you want " \ "to use to analyze the document.") parser.add_argument( "image", help="The document that you want to analyze.") def main(): """ Entrypoint for script. """ try: logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") # Get command line arguments. parser = argparse.ArgumentParser(usage=argparse.SUPPRESS) add_arguments(parser) args = parser.parse_args() # Get analysis results. result = analyze_image(args.function, args.image) status = result['statusCode'] blocks = result['body'] blocks = json.loads(blocks) if status == 200: for block in blocks: print('Type: ' + block['BlockType']) if block['BlockType'] != 'PAGE': print('Detected: ' + block['Text']) print('Confidence: ' + "{:.2f}".format(block['Confidence']) + "%") print('Id: {}'.format(block['Id'])) if 'Relationships' in block: print('Relationships: {}'.format(block['Relationships'])) print('Bounding Box: {}'.format(block['Geometry']['BoundingBox'])) print('Polygon: {}'.format(block['Geometry']['Polygon'])) print() print("Blocks detected: " + str(len(blocks))) else: print(f"Error: {result['statusCode']}") print(f"Message: {result['body']}") except ClientError as error: logging.error(error) print(error) if __name__ == "__main__": main()
  3. Jalankan kode tersebut. Untuk argumen baris perintah, berikan nama fungsi Lambda dan dokumen yang ingin Anda analisis. Anda dapat menyediakan jalur ke dokumen lokal, atau Anda dapat menggunakan jalur Amazon S3 ke dokumen yang disimpan dalam bucket Amazon S3. Contoh:

    python client.py function_name s3://bucket/path/document.jpg

    Jika dokumen ada di ember Amazon S3. pastikan itu adalah ember yang sama dengan yang Anda tentukan sebelumnya di langkah 12 dari. Langkah 1: Buat AWS Lambda fungsi (konsol)

    Jika berhasil, kode Anda mengembalikan sebagian respons JSON untuk setiap jenis Blok yang terdeteksi dalam dokumen.