Usando um modelo em seu componente de aplicativo cliente - Amazon Lookout for Vision

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usando um modelo em seu componente de aplicativo cliente

As etapas para usar um modelo de um componente de aplicativo cliente são semelhantes ao uso de um modelo hospedado na nuvem.

  1. Comece a executar o modelo.

  2. Detecte anomalias nas imagens.

  3. Pare o modelo, se não for mais necessário.

O Amazon Lookout for Vision Edge Agent fornece API para iniciar um modelo, detectar anomalias em uma imagem e interromper um modelo. Você também pode usar a API para listar os modelos em um dispositivo e obter informações sobre um modelo implantado. Para obter mais informações, consulte Referência da API do Amazon Lookout for Vision.

Você pode obter informações de erro verificando os códigos de status do gRPC. Para obter mais informações, consulte Obter informações de erro.

Para escrever seu código, você pode usar qualquer linguagem compatível com o gRPC. Fornecemos exemplos de código Python.

Usando o stub em seu componente de aplicativo cliente

Use o código a seguir para configurar o acesso ao seu modelo por meio do 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

Iniciar o modelo

Você inicia um modelo chamando a Modelo inicial API. O modelo pode demorar um pouco para começar. Você pode verificar o status atual ligando paraDescreva o modelo. O modelo está em execução se o valor do status campo estiver em execução.

Código de exemplo

Substitua component_name pelo nome do componente do seu modelo.

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)

Detecção de anomalias

Você usa a Detectar anomalias API para detectar anomalias em uma imagem.

A operação DetectAnomalies espera que o bitmap da imagem seja passado no formato compactado RGB888. O primeiro byte representa o canal vermelho, o segundo byte representa o canal verde e o terceiro byte representa o canal azul. Se você fornecer a imagem em um formato diferente, como BGR, as previsões de DetectAnomalies estão incorretas.

Por padrão, o OpenCV usa o formato BGR para bitmaps de imagem. Se você estiver usando o OpenCV para capturar imagens para análise, deverá converter DetectAnomalies a imagem para o formato RGB888 antes de passá-la para o. DetectAnomalies

As imagens que você fornece DetectAnomalies devem ter as mesmas dimensões de largura e altura das imagens que você usou para treinar o modelo.

Detectando anomalias usando bytes de imagem

Você pode detectar anomalias em uma imagem fornecendo a imagem como bytes de imagem. No exemplo a seguir, os bytes da imagem são recuperados de uma imagem armazenada no sistema de arquivos local.

Substitua sample.jpg pelo nome do arquivo de imagem que você deseja analisar. Substitua component_name pelo nome do componente do seu modelo.

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

Detectando anomalias usando o segmento de memória compartilhada

Você pode detectar anomalias em uma imagem fornecendo a imagem como bytes de imagem no segmento de memória compartilhada POSIX. Para proporcionar o melhor desempenho, recomendamos usar memória compartilhada para solicitações de DetectAnomalies. Para obter mais informações, consulte Detectar anomalias.

Parar o modelo

Se você não estiver mais usando o modelo, a Parar o modelo API para interromper a execução do modelo.

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

Listando modelos em um dispositivo

Você pode usar a ListModels API para listar os modelos que são implantados em um dispositivo.

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

Descrever um modelo

Você pode obter informações sobre um modelo implantado em um dispositivo chamando a Descreva o modelo API. Usar o DescribeModel é útil para obter o status atual de um modelo. Por exemplo, você precisa saber se um modelo está em execução antes de poder ligar DetectAnomalies. Para ver um código demonstrativo, consulte Iniciar o modelo.

Obter informações de erro

Os códigos de status do gRPC são usados para relatar os resultados da API.

Você pode obter informações de erro detectando a RpcError exceção, conforme mostrado no exemplo a seguir. Para obter informações sobre os códigos de status de erro, consulte o tópico de referência de uma API.

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