Utilizzo di un modello nel componente dell'applicazione client - Amazon Lookout per Vision

Avviso di fine del supporto: il 31 ottobre 2025 AWS interromperà il supporto per Amazon Lookout for Vision. Dopo il 31 ottobre 2025, non potrai più accedere alla console Lookout for Vision o alle risorse Lookout for Vision. Per ulteriori informazioni, consulta questo post del blog.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo di un modello nel componente dell'applicazione client

I passaggi per l'utilizzo di un modello da un componente dell'applicazione client sono simili all'utilizzo di un modello ospitato nel cloud.

  1. Iniziate a eseguire il modello.

  2. Rileva anomalie nelle immagini.

  3. Arresta il modello, se non è più necessario.

Amazon Lookout for Vision Edge Agent fornisce API per avviare un modello, rilevare anomalie in un'immagine e interrompere un modello. Puoi anche utilizzare l'API per elencare i modelli su un dispositivo e ottenere informazioni su un modello distribuito. Per ulteriori informazioni, consulta Riferimento all'API Amazon Lookout for Vision Edge Agent.

È possibile ottenere informazioni sugli errori controllando i codici di stato gRPC. Per ulteriori informazioni, consulta Ottenere informazioni sugli errori.

Per scrivere il codice, è possibile utilizzare qualsiasi linguaggio supportato da gRPC. Forniamo un esempio di codice Python.

Utilizzo dello stub nel componente dell'applicazione client

Usa il codice seguente per configurare l'accesso al tuo modello tramite 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

Avvio del modello

Si avvia un modello chiamando l'StartModelAPI. L'avvio del modello potrebbe richiedere alcuni istanti. Puoi controllare lo stato attuale chiamandoDescribeModel. Il modello è in esecuzione se il valore del status campo è Running.

Esempio di codice

Sostituite component_name con il nome del componente del modello.

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)

Rilevamento di anomalie

L'DetectAnomaliesAPI viene utilizzata per rilevare anomalie in un'immagine.

L'DetectAnomaliesoperazione prevede che la bitmap dell'immagine venga passata nel formato compresso RGB888. Il primo byte rappresenta il canale rosso, il secondo byte rappresenta il canale verde e il terzo byte rappresenta il canale blu. Se fornite l'immagine in un formato diverso, ad esempio BGR, le previsioni di non sono corrette. DetectAnomalies

Per impostazione predefinita, OpenCV utilizza il formato BGR per le bitmap delle immagini. Se si utilizza OpenCV per acquisire immagini da analizzare, è necessario convertire DetectAnomalies l'immagine in formato RGB888 prima di passare l'immagine a. DetectAnomalies

Le immagini fornite DetectAnomalies devono avere le stesse dimensioni di larghezza e altezza delle immagini utilizzate per addestrare il modello.

Rilevamento delle anomalie utilizzando i byte delle immagini

È possibile rilevare anomalie in un'immagine fornendo l'immagine come byte di immagine. Nell'esempio seguente, i byte dell'immagine vengono recuperati da un'immagine memorizzata nel file system locale.

Sostituite sample.jpg con il nome del file di immagine che desiderate analizzare. Sostituite component_name con il nome del componente del modello.

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")

Rilevamento delle anomalie utilizzando un segmento di memoria condivisa

È possibile rilevare anomalie in un'immagine fornendo l'immagine come byte di immagine nel segmento di memoria condivisa POSIX. Per prestazioni ottimali, consigliamo di utilizzare la memoria condivisa per le richieste. DetectAnomalies Per ulteriori informazioni, consulta DetectAnomalies.

Arresto del modello

Se non utilizzi più il modello, l'StopModelAPI per interrompere l'esecuzione del modello.

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

Elencare i modelli su un dispositivo

Puoi utilizzare l'ListModelsAPI per elencare i modelli distribuiti su un dispositivo.

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

Descrivere un modello

Puoi ottenere informazioni su un modello distribuito su un dispositivo chiamando l'DescribeModelAPI. L'utilizzo DescribeModel è utile per ottenere lo stato corrente di un modello. Ad esempio, è necessario sapere se un modello è in esecuzione prima di poter chiamareDetectAnomalies. Per il codice di esempio, consulta Avvio del modello.

Ottenere informazioni sugli errori

I codici di stato gRPC vengono utilizzati per riportare i risultati delle API.

È possibile ottenere informazioni sull'errore rilevando l'RpcErroreccezione, come mostrato nell'esempio seguente. Per informazioni sui codici di stato degli errori, consultate l'argomento di riferimento relativo a un'API.

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