

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
<a name="lambda-s3-tutorial-python"></a>

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

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

Instruksi termasuk contoh kode Python yang menunjukkan 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](https://docs.aws.amazon.com/rekognition/latest/dg/limits.html) di Rekognition dan DetectLabels Referensi [API](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DetectLabels.html) untuk informasi tentang jenis file gambar dan batas ukuran. 

## Buat fungsi Lambda (konsol)
<a name="lambda-s3-tutorial-python-create"></a>

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/](https://console.aws.amazon.com/lambda/).

1. Pilih **Buat fungsi**. Untuk informasi selengkapnya, lihat [Membuat Fungsi Lambda dengan Konsol.](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html)

1. Pilih opsi berikut:
   + Pilih **Tulis dari awal**. 
   + Masukkan nilai untuk **nama Fungsi**.
   + Untuk **Runtime**, pilih versi terbaru Python.
   + Untuk **Arsitektur**, pilih **x86\_64**.

1. Pilih **Buat fungsi** untuk membuat AWS Lambda fungsi.

1. Pada halaman fungsi, pilih tab **Konfigurasi**.

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

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

1. Pilih tab **JSON** dan ganti kebijakan dengan kebijakan berikut:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Action": "rekognition:DetectLabels",
               "Resource": "*",
               "Effect": "Allow",
               "Sid": "DetectLabels"
           }
       ]
   }
   ```

------

1. Pilih **Tinjau kebijakan**.

1. Masukkan nama untuk kebijakan, misalnya *DetectLabels-access*.

1. Pilih **Buat kebijakan**.

1. 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}}/*"
              }
          ]
      }
      ```

------

   1. Untuk langkah 10, pilih nama kebijakan yang berbeda, seperti *S3Bucket-access*.

## (Opsional) Buat layer (konsol)
<a name="lambda-s3-tutorial-python-layer"></a>

Anda tidak perlu melakukan langkah ini untuk menggunakan fungsi dan panggilan Lambda. `DetectLabels` 

`DetectLabels`Operasi 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, 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 layer dengan fungsi Lambda Anda](https://docs.aws.amazon.com/lambda/latest/dg/invocation-layers.html#invocation-layers-using).

**Untuk membuat dan menambahkan lapisan (konsol)**

1. Buka prompt perintah dan masukkan perintah berikut untuk membuat paket penyebaran dengan versi AWS SDK terbaru.

   ```
   pip install boto3 --target python/.
   zip boto3-layer.zip -r python/
   ```

1. Perhatikan nama file zip (boto3-layer.zip), yang Anda gunakan pada langkah 8 prosedur ini.

1. Buka AWS Lambda konsol di [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Di panel navigasi, pilih **Layers** (Lapisan). 

1. Pilih **Buat lapisan**.

1. Masukkan nilai untuk **Nama** dan **Deskripsi**.

1. Untuk **jenis entri Kode**, pilih **Unggah file.zip** dan pilih **Unggah**.

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

1. Untuk **runtime yang kompatibel**, pilih versi terbaru Python.

1. Pilih **Create** untuk membuat layer.

1. Pilih ikon menu panel navigasi.

1. Di panel navigasi, pilih **Fungsi**.

1. Dalam daftar sumber daya, pilih fungsi yang Anda buat sebelumnya[](#lambda-s3-tutorial-python-create). 

1. Pilih tab **Kode**.

1. Di bagian **Layers**, pilih **Add a layer**.

1. Pilih **Custom Layers**.

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

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

1. Pilih **Tambahkan**.

## Tambahkan kode Python (konsol)
<a name="lambda-s3-tutorial-python-console-code"></a>

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. Ia mengembalikan array label terdeteksi dalam gambar, serta tingkat kepercayaan pada label 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**.

1. 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
   ```

1. Pilih **Deploy untuk menerapkan** fungsi Lambda Anda.

## Untuk menambahkan kode Python (konsol)
<a name="lambda-s3-tutorial-python-invoke"></a>

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

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

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 fungsi Lambda mengembalikan kesalahan batas waktu, perpanjang periode batas waktu untuk fungsi Lambda. Untuk informasi selengkapnya, lihat [Mengonfigurasi batas waktu fungsi (konsol)](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-common.html#configuration-timeout-console).

Untuk informasi selengkapnya tentang menjalankan fungsi Lambda dari kode Anda, [lihat Memanggil Fungsi AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-invocation.html). 

**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.](https://console.aws.amazon.com/lambda/)

      Untuk memberikan akses dan menambahkan izin bagi pengguna, grup, atau peran Anda:
      + Pengguna dan grup di AWS IAM Identity Center:

        Buat rangkaian izin. Ikuti instruksi di [Buat rangkaian izin](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html) dalam *Panduan Pengguna AWS IAM Identity Center *.
      + Pengguna yang dikelola di IAM melalui penyedia identitas:

        Buat peran untuk federasi identitas. Ikuti instruksi dalam [Buat peran untuk penyedia identitas pihak ketiga (federasi)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html) dalam *Panduan Pengguna IAM*.
      + Pengguna IAM:
        + Buat peran yang dapat diambil pengguna Anda. Ikuti instruksi dalam [Buat peran untuk pengguna IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html) dalam *Panduan Pengguna IAM*.
        + (Tidak disarankan) Lampirkan kebijakan langsung ke pengguna atau tambahkan pengguna ke grup pengguna. Ikuti petunjuk dalam [Menambahkan izin ke pengguna (konsol)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) dalam *Panduan Pengguna IAM*.

   1. Instal dan konfigurasikan AWS SDK untuk Python. Untuk informasi selengkapnya, lihat [Langkah 2: Mengatur AWS CLI dan AWS SDKs](setup-awscli-sdk.md).

1. Simpan kode berikut ke file bernama`client.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)
   ```

1. Jalankan kode tersebut. Jika dokumen ada di ember Amazon S3. pastikan itu adalah ember yang sama dengan yang Anda tentukan sebelumnya di langkah 12 dari. [](#lambda-s3-tutorial-python-create)

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