Menemukan anomali dengan suatu fungsi AWS Lambda - Amazon Lookout for Vision

Pemberitahuan akhir dukungan: Pada 31 Oktober 2025, AWS akan menghentikan dukungan untuk Amazon Lookout for Vision. Setelah 31 Oktober 2025, Anda tidak akan lagi dapat mengakses konsol Lookout for Vision atau sumber daya Lookout for Vision. Untuk informasi lebih lanjut, kunjungi posting blog ini.

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

Menemukan anomali dengan suatu fungsi AWS Lambda

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. DetectAnomalies Fungsi menganalisis gambar yang disediakan dan mengembalikan klasifikasi untuk keberadaan anomali pada gambar itu. 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 DetectAnomalies operasi. Ini juga memberikan akses ke bucket Amazon S3 yang menyimpan gambar untuk dianalisis. Anda juga menentukan variabel lingkungan untuk berikut ini:

  • Proyek Amazon Lookout for Vision dan versi model 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

    PROJECT_NAME

    Proyek Lookout for Vision yang berisi model yang ingin Anda gunakan.

    MODEL_VERSION

    Versi model yang ingin Anda gunakan.

    CONFIDENCE

    Nilai minumum (0-100) untuk keyakinan model bahwa prediksi tersebut anomali. Jika kepercayaan diri lebih rendah, klasifikasi dianggap normal.

  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": "lookoutvision:DetectAnomalies", "Resource": "*", "Effect": "Allow", "Sid": "DetectAnomaliesAccess" } ] }
  12. Pilih Berikutnya.

  13. Di Detail kebijakan, masukkan nama untuk kebijakan, seperti DetectAnomalies-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. DetectAnomaliesOperasi 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 DetectAnomalies dan mengembalikan klasifikasi (true jika gambar anomali, false jika gambar normal). 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 Amazon Lookout for Vision model. """ import base64 import imghdr from os import environ from io import BytesIO import logging import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) # Get the model and confidence. project_name = environ['PROJECT_NAME'] model_version = environ['MODEL_VERSION'] min_confidence = int(environ.get('CONFIDENCE', 50)) lookoutvision_client = boto3.client('lookoutvision') 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: file_name = "" # Determine image source. if 'image' in event: # Decode the encoded image image_bytes = event['image'].encode('utf-8') img_b64decoded = base64.b64decode(image_bytes) image_type = get_image_type(img_b64decoded) image = BytesIO(img_b64decoded) file_name = event['filename'] elif 'S3Object' in event: bucket = boto3.resource('s3').Bucket(event['S3Object']['Bucket']) image_object = bucket.Object(event['S3Object']['Name']) image = image_object.get().get('Body').read() image_type = get_image_type(image) file_name = f"s3://{event['S3Object']['Bucket']}/{event['S3Object']['Name']}" else: raise ValueError( 'Invalid image source. Only base 64 encoded image bytes or images in S3 buckets are supported.') # Analyze the image. response = lookoutvision_client.detect_anomalies( ProjectName=project_name, ContentType=image_type, Body=image, ModelVersion=model_version) reject = reject_on_classification( response['DetectAnomalyResult'], confidence_limit=float(environ['CONFIDENCE'])/100) status = "anomalous" if reject else "normal" lambda_response = { "statusCode": 200, "body": { "Reject": reject, "RejectMessage": f"Image {file_name} is {status}." } } except ClientError as err: error_message = f"Couldn't analyze {file_name}. " + \ err.response['Error']['Message'] lambda_response = { 'statusCode': 400, 'body': { "Error": err.response['Error']['Code'], "ErrorMessage": error_message, "Image": file_name } } 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), "Image": event['filename'] } } logger.error("Error function %s: %s", context.invoked_function_arn, format(val_error)) return lambda_response def get_image_type(image): """ Gets the format of the image. Raises an error if the type is not PNG or JPEG. :param image: The image that you want to check. :return The type of the image. """ image_type = imghdr.what(None, image) if image_type == "jpeg": content_type = "image/jpeg" elif image_type == "png": content_type = "image/png" else: logger.info("Invalid image type") raise ValueError( "Invalid file format. Supply a jpeg or png format file.") return content_type def reject_on_classification(prediction, confidence_limit): """ Returns True if the anomaly confidence is greater than or equal to the supplied confidence limit. :param image: The name of the image file that was analyzed. :param prediction: The DetectAnomalyResult object returned from DetectAnomalies :param confidence_limit: The minimum acceptable confidence. Float value between 0 and 1. :return: True if the error condition indicates an anomaly, otherwise False. """ reject = False if prediction['IsAnomalous'] and prediction['Confidence'] >= confidence_limit: reject = True reject_info = (f"Rejected: Anomaly confidence ({prediction['Confidence']:.2%}) is greater" f" than limit ({confidence_limit:.2%})") logger.info("%s", reject_info) if not reject: logger.info("No anomalies found.") return reject
  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. Jika Anda belum melakukannya, lakukan hal berikut:

    1. Pastikan pengguna yang menggunakan kode klien memiliki lambda:InvokeFunction izin. Anda dapat menggunakan izin berikut.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "LambdaPermission", "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: Mengatur AWS CLI dan AWS SDKs.

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

  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: Shows how to call the anomaly detection AWS Lambda function. """ from botocore.exceptions import ClientError import argparse import logging import base64 import json import boto3 from os import environ 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, "filename": image} 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() # Analyze image and display results. result = analyze_image(args.function, args.image) status = result['statusCode'] if status == 200: classification = result['body'] print(f"classification: {classification['Reject']}") print(f"Message: {classification['RejectMessage']}") 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 jalur ke gambar lokal yang ingin Anda analisis. Sebagai contoh:

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

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

  4. 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.