Menemukan anomali denganAWS Lambdafungsi - 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 denganAWS Lambdafungsi

AWS Lambda adalah layanan komputasi yang memungkinkan Anda menjalankan kode tanpa perlu 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 memanggilDetectAnomalies. Fungsi ini menganalisis gambar yang disediakan dan mengembalikan klasifikasi untuk keberadaan anomali dalam gambar itu. Instruksi termasuk contoh kode Python yang menunjukkan cara memanggil fungsi Lambda dengan gambar dalam bucket Amazon S3, atau gambar yang disediakan dari komputer lokal.

Langkah 1: BuatAWS Lambdafungsi (konsol)

Pada langkah ini, Anda membuat kosongAWSfungsi dan peran eksekusi IAM yang memungkinkan fungsi Anda memanggilDetectAnomaliesoperasi. 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 fungsi Lambda Anda.

  • Batas kepercayaan diri yang Anda inginkan untuk digunakan model.

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

Untuk membuatAWS Lambdafungsi (konsol)
  1. Masuk ke AWS Management Console dan buka konsol AWS Lambda di https://console.aws.amazon.com/lambda/.

  2. Pilih Buat fungsi. Untuk informasi lebih lanjut, lihatMembuat Fungsi Lambda dengan Konsol.

  3. Pilih opsi berikut.

    • Pilih Penulis dari scratch.

    • Masukkan nilai untukNama fungsi.

    • UntukRuntimepilihPython 3.10.

  4. PilihBuat fungsiuntuk membuatAWS Lambdafungsi.

  5. Pada halaman fungsi, PilihKonfigurasitab.

  6. PadaVariabel lingkunganpanel, pilihMengedit.

  7. Tambahkan variabel lingkungan berikut. Untuk setiap variabel pilihTambahkan variabel lingkungandan 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.

    KEPERCAYAAN

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

  8. PilihSimpanuntuk menyimpan variabel lingkungan.

  9. PadaIzinpanel, Di bawahNama peran, pilih peran eksekusi untuk membuka peran di konsol IAM.

  10. DalamIzintab, pilihTambahkan izindan kemudianBuat kebijakan inline.

  11. PilihJSONdan mengganti kebijakan yang ada dengan kebijakan berikut.

    { "Version": "2012-10-17", "Statement": [ { "Action": "lookoutvision:DetectAnomalies", "Resource": "*", "Effect": "Allow", "Sid": "DetectAnomaliesAccess" } ] }
  12. Pilih Selanjutnya.

  13. DalamRincian kebijakan, masukkan nama untuk kebijakan, sepertiDetectAnomalies-akses.

  14. Pilih Buat kebijakan.

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

    1. Untuk langkah 11, gunakan kebijakan berikut. Gantijalur ember/folderdengan 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, sepertiS3Bucket-akses.

Langkah 2: (Opsional) Buat layer (konsol)

Untuk menjalankan contoh ini, Anda tidak perlu melakukan langkah ini. YangDetectAnomaliesoperasi disertakan dalam lingkungan default Lambda Python sebagai bagian dariAWSSDK untuk Python (Boto3). Jika bagian lain dari fungsi Lambda Anda perlu baru-baru iniAWSpembaruan layanan 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. Anda kemudian membuat layer dan menambahkan arsip file.zip ke layer. Untuk informasi lebih lanjut, lihatMenggunakan layer dengan fungsi Lambda.

Untuk membuat dan menambahkan layer (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 pada langkah 6 dari prosedur ini.

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

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

  5. Pilih Buat lapisan.

  6. Masukkan nilai untukNamadanDeskripsi.

  7. PilihUnggah file.zipdan pilihlahUnggah.

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

  9. Untuk runtime yang kompatibel, pilihPython 3.9.

  10. PilihBuatuntuk 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: BuatAWS Lambdafungsi (konsol).

  14. PilihKodetab.

  15. DalamLapisanbagian, pilihTambahkan layer.

  16. PilihLapisan kustom.

  17. DalamLapisan kustom, pilih nama layer yang Anda masukkan pada langkah 6.

  18. DalamVersipilih 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 denganDetectAnomaliesdan 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 konsol AWS Lambda tersebut di https://console.aws.amazon.com/lambda/.

    2. Buka fungsi Lambda yang Anda buatLangkah 1: BuatAWS Lambdafungsi (konsol).

  2. PilihKodetab.

  3. DalamSumber kode, ganti kode dilambda_function.pydengan yang berikut:

    # 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. PilihMenyebarkanuntuk menyebarkan fungsi Lambda Anda.

Langkah 4: Coba fungsi Lambda

Pada langkah ini Anda menggunakan kode Python di komputer Anda untuk meneruskan gambar lokal, atau gambar dalam 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, lihatMengunggah objek.

Pastikan Anda menjalankan kode dalam hal yang samaAWSWilayah di mana Anda membuat fungsi Lambda. Anda dapat melihatAWSWilayah untuk fungsi Lambda Anda di bilah navigasi halaman detail fungsi diKonsol Lambda.

JikaAWS Lambdafungsi mengembalikan kesalahan batas waktu, memperpanjang periode batas waktu untuk fungsi fungsi Lambda, Untuk informasi lebih lanjut, lihatMengkonfigurasi batas waktu fungsi (konsol).

Untuk informasi selengkapnya tentang menjalankan fungsi Lambda dari kode Anda, lihatMemohonAWS LambdaFungsi.

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

    1. Pastikan pengguna menggunakan kode klien memilikilambda:InvokeFunctionizin. 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 ARN untuk fungsi fungsi Lambda Anda dari ikhtisar fungsi diKonsol Lambda.

      Untuk menyediakan akses, tambahkan izin ke pengguna, grup, atau peran Anda:

    2. Instal dan konfigurasikanAWSSDK untuk Python. Untuk informasi selengkapnya, lihat Langkah 4: Mengatur AWS CLI and AWS SDKs.

    3. Mulai modelnyayang Anda tentukan pada langkah 7Langkah 1: BuatAWS Lambdafungsi (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. Misalnya:

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

    Jika berhasil, output adalah klasifikasi untuk anomali yang ditemukan dalam gambar. Jika klasifikasi tidak dikembalikan, pertimbangkan untuk menurunkan nilai kepercayaan yang Anda tetapkan pada langkah 7Langkah 1: BuatAWS Lambdafungsi (konsol).

  4. Jika Anda telah selesai dengan fungsi Lambda dan model tidak digunakan oleh aplikasi lain,hentikan modelnya. Ingatlah untukmulai modellain kali Anda ingin menggunakan fungsi Lambda.