View a markdown version of this page

Mendeteksi Label dalam Gambar Menggunakan Lambda dan Python - Amazon Rekognition

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

Mendeteksi Label dalam Gambar Menggunakan Lambda dan Python

AWS Lambda adalah layanan komputasi yang dapat Anda gunakan untuk menjalankan kode tanpa penyediaan atau mengelola server. Anda dapat memanggil operasi Rekognition API dari dalam fungsi Lambda. Instruksi berikut menunjukkan cara membuat fungsi Lambda di Python yang memang DetectLabels gil.

Fungsi Lambda DetectLabels memanggil dan mengembalikan array label yang terdeteksi dalam gambar, serta tingkat kepercayaan yang dengannya mereka terdeteksi.

Instruksi termasuk contoh kode Python yang menunjukkan kepada Anda cara memanggil fungsi Lambda dan menyediakannya dengan gambar yang bersumber dari bucket Amazon S3 atau komputer lokal Anda.

Pastikan gambar yang Anda pilih memenuhi batas Rekognition. Lihat Pedoman dan kuota di Rekognition dan Refer DetectLabels ensi API untuk informasi tentang jenis file gambar dan batas ukuran.

Buat fungsi Lambda (konsol)

Pada langkah ini, Anda membuat fungsi Lambda kosong dan peran eksekusi IAM yang memungkinkan fungsi Lambda Anda memanggil operasi. DetectLabels Pada langkah selanjutnya, Anda menambahkan kode sumber dan secara opsional menambahkan lapisan ke fungsi Lambda.

Jika Anda menggunakan dokumen yang disimpan dalam bucket Amazon S3, langkah ini juga menunjukkan cara memberikan akses ke bucket yang menyimpan dokumen Anda.

Untuk membuat 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 versi terbaru dari Python.

    • 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 Tambah izin lalu Buat kebijakan sebaris.

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

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

  10. Masukkan nama untuk kebijakan, misalnya DetectLabels-access.

  11. Pilih Buat kebijakan.

  12. Jika Anda menyimpan dokumen untuk analisis di 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 jalur 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.

(Opsional) Buat layer (konsol)

Anda tidak perlu melakukan langkah ini untuk menggunakan fungsi Lambda dan panggilanDetectLabels.

DetectLabelsOperasi ini disertakan dalam lingkungan Lambda Python default sebagai bagian dari AWS SDK untuk Python (Boto3).

Jika bagian lain dari fungsi Lambda Anda memerlukan pembaruan AWS layanan terbaru yang tidak ada di lingkungan Lambda Python default, maka Anda dapat melakukan langkah ini untuk menambahkan rilis Boto3 SDK terbaru sebagai lapisan ke fungsi Anda.

Untuk menambahkan SDK sebagai layer, pertama-tama 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 lapisan dengan fungsi Lambda Anda.

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

    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 pada langkah 1 prosedur ini.

  9. Untuk runtime yang kompatibel, pilih versi Python terbaru.

  10. Pilih Cre ate 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 sebelumnyaBuat fungsi Lambda (konsol).

  14. Pilih tab Kode.

  15. Di bagian Layers, pilih Add a layer.

  16. Pilih lapisan kustom.

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

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

  19. Pilih Tambahkan.

Tambahkan kode Python (konsol)

Pada langkah ini, Anda menambahkan kode Python Anda ke fungsi Lambda Anda melalui editor kode konsol Lambda. Kode mendeteksi label dalam gambar menggunakan DetectLabels operasi. Ini mengembalikan array label yang terdeteksi dalam gambar, serta tingkat kepercayaan pada label yang terdeteksi.

Dokumen yang Anda berikan untuk DetectLabels operasi dapat ditemukan di bucket Amazon S3 atau komputer lokal.

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

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

    import boto3 import logging from botocore.exceptions import ClientError import json import base64 # Instantiate logger logger = logging.getLogger(__name__) # connect to the Rekognition client rekognition = boto3.client('rekognition') def lambda_handler(event, context): try: image = None if 'S3Bucket' in event and 'S3Object' in event: s3 = boto3.resource('s3') s3_object = s3.Object(event['S3Bucket'], event['S3Object']) image = s3_object.get()['Body'].read() elif 'image' in event: image_bytes = event['image'].encode('utf-8') img_b64decoded = base64.b64decode(image_bytes) image = img_b64decoded elif image is None: raise ValueError('Missing image, check image or bucket path.') else: raise ValueError("Only base 64 encoded image bytes or S3Object are supported.") response = rekognition.detect_labels(Image={'Bytes': image}) lambda_response = { "statusCode": 200, "body": json.dumps(response) } labels = [label['Name'] for label in response['Labels']] print("Labels found:") print(labels) except ClientError as client_err: error_message = "Couldn't analyze image: " + client_err.response['Error']['Message'] lambda_response = { 'statusCode': 400, 'body': { "Error": client_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 De plo y untuk menerapkan fungsi Lambda Anda.

Untuk menambahkan kode Python (konsol)

Sekarang setelah Anda membuat fungsi Lambda Anda, Anda dapat memanggilnya untuk mendeteksi label dalam gambar.

Pada langkah ini, Anda menjalankan kode Python di komputer Anda, yang meneruskan gambar lokal atau gambar dalam bucket Amazon S3, ke fungsi Lambda Anda.

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

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

Untuk informasi selengkapnya tentang memanggil fungsi Lambda dari kode Anda, lihat Memang gil Fungsi AWS Lambda.

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 konfigur AWS asikan SDK untuk Python. Untuk informasi selengkapnya, lihat Langkah 2: Siapkan AWS CLI and AWS SDK.

  2. Simpan kode berikut ke file bernamaclient.py:

    import boto3 import json import base64 import pprint # Replace with the name of your S3 bucket and image object key bucket_name = "name of bucket" object_key = "name of file in s3 bucket" # If using a local file, supply the file name as the value of image_path below image_path = "" # Create session and establish connection to client[' session = boto3.Session(profile_name='developer-role') s3 = session.client('s3', region_name="us-east-1") lambda_client = session.client('lambda', region_name="us-east-1") # Replace with the name of your Lambda function function_name = 'RekDetectLabels' def analyze_image_local(img_path): print("Analyzing local image:") with open(img_path, 'rb') as image_file: image_bytes = image_file.read() data = base64.b64encode(image_bytes).decode("utf8") lambda_payload = {"image": data} # Invoke the Lambda function with the event payload response = lambda_client.invoke( FunctionName=function_name, Payload=(json.dumps(lambda_payload)) ) decoded = json.loads(response['Payload'].read().decode()) pprint.pprint(decoded) def analyze_image_s3(bucket_name, object_key): print("Analyzing image in S3 bucket:") # Load the image data from S3 into memory response = s3.get_object(Bucket=bucket_name, Key=object_key) image_data = response['Body'].read() image_data = base64.b64encode(image_data).decode("utf8") # Create the Lambda event payload event = { 'S3Bucket': bucket_name, 'S3Object': object_key, 'ImageBytes': image_data } # Invoke the Lambda function with the event payload response = lambda_client.invoke( FunctionName=function_name, InvocationType='RequestResponse', Payload=json.dumps(event), ) decoded = json.loads(response['Payload'].read().decode()) pprint.pprint(decoded) def main(path_to_image, name_s3_bucket, obj_key): if str(path_to_image) != "": analyze_image_local(path_to_image) else: analyze_image_s3(name_s3_bucket, obj_key) if __name__ == "__main__": main(image_path, bucket_name, object_key)
  3. Jalankan kode tersebut. Jika dokumen ada di ember Amazon S3. pastikan itu adalah bucket yang sama dengan yang Anda tentukan sebelumnya di langkah 12. Buat fungsi Lambda (konsol)

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