Menganalisis gambar dengan suatu AWS Lambda fungsi - Rekognition

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

Menganalisis gambar dengan suatu AWS Lambda fungsi

AWS Lambda adalah layanan komputasi yang memungkinkan Anda menjalankan kode tanpa menyediakan atau mengelola server. Misalnya, Anda dapat menganalisis gambar yang dikirimkan dari aplikasi seluler tanpa harus membuat server untuk meng-host kode aplikasi. Petunjuk berikut menunjukkan cara membuat fungsi Lambda dengan Python yang memanggil. DetectCustomLabels Fungsi menganalisis gambar yang disediakan dan mengembalikan daftar label yang ditemukan dalam gambar. Instruksi termasuk contoh kode Python yang menunjukkan cara memanggil fungsi Lambda dengan gambar di bucket Amazon S3, atau gambar yang disediakan dari komputer lokal.

Langkah 1: Buat AWS Lambda fungsi (konsol)

Pada langkah ini, Anda membuat AWS fungsi kosong dan peran IAM eksekusi yang memungkinkan fungsi Anda memanggil DetectCustomLabels operasi. Ini juga memberikan akses ke bucket Amazon S3 yang menyimpan gambar untuk dianalisis. Anda juga menentukan variabel lingkungan untuk berikut ini:

  • Model Label Kustom Amazon Rekognition yang Anda inginkan untuk digunakan oleh fungsi Lambda Anda.

  • Batas kepercayaan yang Anda ingin model gunakan.

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

Untuk membuat AWS Lambda fungsi (konsol)
  1. Masuk ke AWS Management Console 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.10.

  4. Pilih Buat fungsi untuk membuat AWS Lambda fungsi.

  5. Pada halaman fungsi, Pilih tab Konfigurasi.

  6. Pada panel variabel Lingkungan, pilih Edit.

  7. Tambahkan variabel lingkungan berikut. Untuk setiap variabel pilih Tambahkan variabel lingkungan dan kemudian masukkan kunci variabel dan nilai.

    Kunci Nilai

    MODEL_ARN

    Amazon Resource Name (ARN) dari model yang Anda ingin fungsi Lambda Anda gunakan. Anda bisa mendapatkan model ARN dari tab Gunakan Model pada halaman detail model di konsol Amazon Rekognition Custom Labels.

    CONFIDENCE

    Nilai minimum (0-100) untuk kepercayaan model dalam prediksi untuk label. Fungsi Lambda tidak mengembalikan label dengan nilai kepercayaan lebih rendah dari nilai ini.

  8. Pilih Simpan untuk menyimpan variabel lingkungan.

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

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

  11. Pilih JSONdan ganti kebijakan yang ada dengan kebijakan berikut.

    { "Version": "2012-10-17", "Statement": [ { "Action": "rekognition:DetectCustomLabels", "Resource": "*", "Effect": "Allow", "Sid": "DetectCustomLabels" } ] }
  12. Pilih Berikutnya.

  13. Di Detail kebijakan, masukkan nama untuk kebijakan, seperti DetectCustomLabels-access.

  14. Pilih Buat kebijakan.

  15. Jika Anda menyimpan gambar untuk dianalisis dalam bucket Amazon S3, ulangi langkah 10—14.

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

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

Langkah 2: (Opsional) Buat layer (konsol)

Untuk menjalankan contoh ini, Anda tidak perlu melakukan langkah ini. DetectCustomLabelsOperasi ini termasuk dalam lingkungan Lambda Python default sebagai bagian dari untuk AWS SDK 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 SDK Boto3. Anda kemudian 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.

    pip install boto3 --target python/. zip boto3-layer.zip -r python/
  2. Perhatikan nama file zip (boto3-layer.zip). Anda membutuhkannya di langkah 6 dari 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. 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 buatLangkah 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 menganalisis gambar yang disediakan dengan DetectCustomLabels dan mengembalikan daftar label yang ditemukan dalam gambar. Gambar yang disediakan dapat ditemukan di bucket Amazon S3 atau disediakan sebagai byte gambar yang dikodekan byte64.

Untuk menambahkan kode Python (konsol)
  1. Jika Anda tidak berada di konsol Lambda, lakukan hal berikut:

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

    2. Buka fungsi Lambda yang Anda buat. Langkah 1: Buat AWS Lambda fungsi (konsol)

  2. Pilih tab Kode.

  3. Di Sumber kode, ganti kode di lambda_function.py dengan yang berikut ini:

    # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Purpose An AWS lambda function that analyzes images with an the Amazon Rekognition Custom Labels model. """ import json import base64 from os import environ import logging import boto3 from botocore.exceptions import ClientError # Set up logging. logger = logging.getLogger(__name__) # Get the model ARN and confidence. model_arn = environ['MODEL_ARN'] min_confidence = int(environ.get('CONFIDENCE', 50)) # Get the boto3 client. rek_client = boto3.client('rekognition') 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 labels found in the image passed in the event object. """ try: # Determine image 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 image. response = rek_client.detect_custom_labels(Image=image, MinConfidence=min_confidence, ProjectVersionArn=model_arn) # Get the custom labels labels = response['CustomLabels'] lambda_response = { "statusCode": 200, "body": json.dumps(labels) } except ClientError as err: error_message = f"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
  4. Pilih Deploy untuk menerapkan fungsi Lambda Anda.

Langkah 4: Coba fungsi Lambda Anda

Pada langkah ini Anda menggunakan kode Python di komputer Anda untuk meneruskan gambar lokal, atau gambar di bucket Amazon S3, ke fungsi Lambda Anda. Gambar yang dilewatkan dari komputer lokal harus lebih kecil dari 6291456 byte. Jika gambar Anda lebih besar, unggah gambar 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 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. Pastikan Anda memiliki lambda:InvokeFunction izin. Anda dapat menggunakan kebijakan berikut.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "InvokeLambda", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "ARN for lambda function" } ] }

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

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

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

  3. Mulai model yang Anda tentukan pada langkah 7 dariLangkah 1: Buat AWS Lambda fungsi (konsol).

  4. 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 Rekognition Custom Labels Lambda function example code. """ import argparse import logging import base64 import json import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) def analyze_image(function_name, image): """Analyzes an image with an AWS Lambda function. :param image: The image that you want to analyze. :return The status and classification result for the image analysis. """ lambda_client = boto3.client('lambda') lambda_payload = {} if image.startswith('s3://'): logger.info("Analyzing image from S3 bucket: %s", image) bucket, key = image.replace("s3://", "").split("/", 1) s3_object = { 'Bucket': bucket, 'Name': key } lambda_payload = {"S3Object": s3_object} # Call the lambda function with the image. else: with open(image, 'rb') as image_file: logger.info("Analyzing local image image: %s ", image) image_bytes = image_file.read() data = base64.b64encode(image_bytes).decode("utf8") lambda_payload = {"image": data} 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 image.") parser.add_argument( "image", help="The local image 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'] if status == 200: labels = result['body'] labels = json.loads(labels) print(f"There are {len(labels)} labels in the image.") for custom_label in labels: confidence = int(round(custom_label['Confidence'], 0)) print( f"Label: {custom_label['Name']}: Confidence: {confidence}%") else: print(f"Error: {result['statusCode']}") print(f"Message: {result['body']}") except ClientError as error: logging.error(error) print(error) if __name__ == "__main__": main()
  5. Jalankan kode tersebut. Untuk argumen baris perintah, berikan nama fungsi Lambda dan gambar yang ingin Anda analisis. Anda dapat menyediakan jalur ke gambar lokal, atau jalur S3 ke gambar yang disimpan di bucket Amazon S3. Sebagai contoh:

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

    Jika gambar berada di bucket Amazon S3, pastikan itu adalah bucket yang sama dengan yang Anda tentukan pada langkah 15. Langkah 1: Buat AWS Lambda fungsi (konsol)

    Jika berhasil, outputnya adalah daftar label yang ditemukan pada gambar. Jika tidak ada label yang dikembalikan, pertimbangkan untuk menurunkan nilai kepercayaan yang Anda tetapkan pada langkah 7 dariLangkah 1: Buat AWS Lambda fungsi (konsol).

  6. Jika Anda telah selesai dengan fungsi Lambda dan model tidak digunakan oleh aplikasi lain, hentikan model. Ingatlah untuk memulai model saat berikutnya Anda inginkan gunakan fungsi Lambda.