Menggunakan model dalam komponen aplikasi klien Anda - Amazon Lookout for Vision

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

Menggunakan model dalam komponen aplikasi klien Anda

Langkah-langkah untuk menggunakan model dari komponen aplikasi klien mirip dengan menggunakan model yang dihosting di cloud.

  1. Mulai menjalankan model.

  2. Mendeteksi anomali dalam gambar.

  3. Hentikan model, jika tidak lagi diperlukan.

Amazon Lookout for Vision Edge Agent menyediakan API untuk memulai model, mendeteksi anomali dalam gambar, dan menghentikan model. Anda juga dapat menggunakan API untuk membuat daftar model pada perangkat dan mendapatkan informasi tentang model yang diterapkan. Untuk informasi selengkapnya, lihat Referensi API Amazon Lookout for Vision Edge Agent.

Anda bisa mendapatkan informasi kesalahan dengan memeriksa kode status gRPC. Untuk informasi selengkapnya, lihat Mendapatkan informasi kesalahan.

Untuk menulis kode Anda, Anda dapat menggunakan bahasa apa pun yang didukung oleh gRPC. Kami memberikan contoh kode Python.

Menggunakan rintisan di komponen aplikasi klien Anda

Gunakan kode berikut untuk mengatur akses ke model Anda melalui Lookout for Vision Edge Agent.

import grpc from edge_agent_pb2_grpc import EdgeAgentStub import edge_agent_pb2 as pb2 # Creating stub. with grpc.insecure_channel("unix:///tmp/aws.iot.lookoutvision.EdgeAgent.sock") as channel: stub = EdgeAgentStub(channel) # Add additional code that works with Edge Agent in this block to prevent resources leakage

Memulai model

Anda memulai model dengan memanggil StartModel API. Model mungkin membutuhkan waktu beberapa saat untuk memulai. Anda dapat memeriksa status saat ini dengan meneleponDescribeModel. Model berjalan jika nilai status bidang sedang berjalan.

Kode contoh

Ganti component_name dengan nama komponen model Anda.

import time import grpc from edge_agent_pb2_grpc import EdgeAgentStub import edge_agent_pb2 as pb2 model_component_name = "component_name" def start_model_if_needed(stub, model_name): # Starting model if needed. while True: model_description_response = stub.DescribeModel(pb2.DescribeModelRequest(model_component=model_name)) print(f"DescribeModel() returned {model_description_response}") if model_description_response.model_description.status == pb2.RUNNING: print("Model is already running.") break elif model_description_response.model_description.status == pb2.STOPPED: print("Starting the model.") stub.StartModel(pb2.StartModelRequest(model_component=model_name)) continue elif model_description_response.model_description.status == pb2.FAILED: raise Exception(f"model {model_name} failed to start") print(f"Waiting for model to start.") if model_description_response.model_description.status != pb2.STARTING: break time.sleep(1.0) # Creating stub. with grpc.insecure_channel("unix:///tmp/aws.iot.lookoutvision.EdgeAgent.sock") as channel: stub = EdgeAgentStub(channel) start_model_if_needed(stub, model_component_name)

Mendeteksi anomali

Anda menggunakan DetectAnomalies API untuk mendeteksi anomali dalam gambar.

DetectAnomaliesOperasi mengharapkan bitmap gambar diteruskan dalam format RGB888 yang dikemas. Byte pertama mewakili saluran merah, byte kedua mewakili saluran hijau, dan byte ketiga mewakili saluran biru. Jika Anda memberikan gambar dalam format yang berbeda, seperti BGR, prediksi dari salah DetectAnomalies .

Secara default, OpenCV menggunakan format BGR untuk bitmap gambar. Jika Anda menggunakan OpenCV untuk mengambil gambar untuk dianalisisDetectAnomalies, Anda harus mengonversi gambar ke format RGB888 sebelum Anda meneruskan gambar ke. DetectAnomalies

Gambar yang Anda berikan DetectAnomalies harus memiliki dimensi lebar dan tinggi yang sama dengan gambar yang Anda gunakan untuk melatih model.

Mendeteksi Anomali dengan menggunakan byte gambar

Anda dapat mendeteksi anomali dalam gambar dengan memasok gambar sebagai byte gambar. Dalam contoh berikut, byte gambar diambil dari gambar yang disimpan dalam sistem file lokal.

Ganti sample.jpg dengan nama file gambar yang ingin Anda analisis. Ganti component_name dengan nama komponen model Anda.

import time from PIL import Image import grpc from edge_agent_pb2_grpc import EdgeAgentStub import edge_agent_pb2 as pb2 model_component_name = "component_name" .... # Detecting anomalies. def detect_anomalies(stub, model_name, image_path): image = Image.open(image_path) image = image.convert("RGB") detect_anomalies_response = stub.DetectAnomalies( pb2.DetectAnomaliesRequest( model_component=model_name, bitmap=pb2.Bitmap( width=image.size[0], height=image.size[1], byte_data=bytes(image.tobytes()) ) ) ) print(f"Image is anomalous - {detect_anomalies_response.detect_anomaly_result.is_anomalous}") return detect_anomalies_response.detect_anomaly_result # Creating stub. with grpc.insecure_channel("unix:///tmp/aws.iot.lookoutvision.EdgeAgent.sock") as channel: stub = EdgeAgentStub(channel) start_model_if_needed(stub, model_component_name) detect_anomalies(stub, model_component_name, "sample.jpg")

Mendeteksi Anomali dengan menggunakan segmen memori bersama

Anda dapat mendeteksi anomali pada gambar dengan memasok gambar sebagai byte gambar di segmen memori bersama POSIX. Untuk kinerja terbaik, sebaiknya gunakan memori bersama untuk DetectAnomalies permintaan. Untuk informasi selengkapnya, lihat DetectAnomalies.

Menghentikan model

Jika Anda tidak lagi menggunakan model, StopModel API akan menghentikan model berjalan.

stop_model_response = stub.StopModel( pb2.StopModelRequest( model_component=model_component_name ) ) print(f"New status of the model is {stop_model_response.status}")

Daftar model pada perangkat

Anda dapat menggunakan ListModels API untuk membuat daftar model yang diterapkan ke perangkat.

models_list_response = stub.ListModels( pb2.ListModelsRequest() ) for model in models_list_response.models: print(f"Model Details {model}")

Menggambarkan model

Anda bisa mendapatkan informasi tentang model yang diterapkan ke perangkat dengan memanggil DescribeModel API. Menggunakan DescribeModel berguna untuk mendapatkan status model saat ini. Misalnya, Anda perlu tahu apakah model berjalan sebelum Anda dapat meneleponDetectAnomalies. Untuk kode sampel, lihat Memulai model.

Mendapatkan informasi kesalahan

Kode status gRPC digunakan untuk melaporkan hasil API.

Anda bisa mendapatkan informasi kesalahan dengan menangkap RpcError pengecualian, seperti yang ditunjukkan pada contoh berikut. Untuk informasi tentang kode status kesalahan, lihat topik referensi untuk API.

# Error handling. try: stub.DetectAnomalies(detect_anomalies_request) except grpc.RpcError as e: print(f"Error code: {e.code()}, Status: {e.details()}")