Uso de un modelo en el componente de la aplicación cliente - Amazon Lookout for Vision

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de un modelo en el componente de la aplicación cliente

Los pasos para usar un modelo de un componente de aplicación cliente son similares a los de usar un modelo alojado en la nube.

  1. Comience a ejecutar el modelo.

  2. Detecta anomalías en las imágenes.

  3. Detenga el modelo si ya no se necesita.

El agente Amazon Lookout for Vision Edge proporciona una API para iniciar un modelo, detectar anomalías en una imagen y detener un modelo. También puede usar la API para enumerar los modelos de un dispositivo y obtener información sobre un modelo implementado. Para obtener más información, consulte Amazon Lookout for Vision Edge Agent API.

Puedes obtener información sobre los errores comprobando los códigos de estado del gRPC. Para obtener más información, consulte Obtención de información de error.

Para escribir tu código, puedes usar cualquier lenguaje compatible con gRPC. Proporcionamos un ejemplo de código Python.

Uso del código auxiliar en el componente de la aplicación cliente

Usa el siguiente código para configurar el acceso a tu modelo a través del agente de Lookout for Vision Edge.

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 el modelo

Para iniciar un modelo, se llama a la Modelo de inicio API. Es posible que el modelo tarde un poco en iniciarse. Puede comprobar el estado actual llamandoDescriba el modelo. El modelo se está ejecutando si el valor del status campo es En ejecución.

Código de ejemplo

Sustituya component_name por el nombre del componente de su 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)

Detección de anomalías

La Detecte anomalías API se utiliza para detectar anomalías en una imagen.

La DetectAnomalies operación espera que el mapa de bits de la imagen se transmita en formato empaquetado RGB888. El primer byte representa el canal rojo, el segundo byte representa el canal verde y el tercer byte representa el canal azul. Si proporciona la imagen en un formato diferente, como BGR, las predicciones de DetectAnomalies son incorrectas.

De forma predeterminada, OpenCV utiliza el formato BGR para los mapas de bits de las imágenes. Si utiliza OpenCV para capturar imágenes para DetectAnomalies analizarlas, debe convertir la imagen al formato RGB888 antes de pasarla a. DetectAnomalies

Las imágenes que suministre DetectAnomalies deben tener las mismas dimensiones de ancho y alto que las imágenes que utilizó para entrenar el modelo.

Detección de anomalías mediante bytes de imagen

Puede detectar anomalías en una imagen proporcionando la imagen como bytes de imagen. En el siguiente ejemplo, los bytes de la imagen se recuperan de una imagen almacenada en el sistema de archivos local.

Reemplace sample.jpg por el nombre del archivo de imagen que desea analizar. Sustituya component_name por el nombre del componente de su 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")

Detección de anomalías mediante un segmento de memoria compartida

Puede detectar anomalías en una imagen proporcionando la imagen como bytes de imagen en el segmento de memoria compartida POSIX. Para obtener el máximo rendimiento, le recomendamos utilizar memoria compartida para las solicitudes de DetectAnomalies. Para obtener más información, consulte Detecte anomalías.

Detener el modelo

Si ya no utiliza el modelo, la Detenga el modelo API para detener la ejecución del 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}")

Mostrar modelos en un dispositivo

Puede usar la ListModels API para enumerar los modelos que se implementan en un dispositivo.

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

Describir un modelo

Puede obtener información sobre un modelo que se implementa en un dispositivo llamando a la Describa el modelo API. Su uso DescribeModel es útil para obtener el estado actual de un modelo. Por ejemplo, necesita saber si un modelo está funcionando antes de poder llamarDetectAnomalies. Para ver código de ejemplo, consulte Iniciar el modelo.

Obtención de información de error

Los códigos de estado gRPC se utilizan para informar de los resultados de la API.

Puede obtener información de error detectando la RpcError excepción, tal como se muestra en el siguiente ejemplo. Para obtener información acerca de los códigos de error, consulte el tema de referencia de una API.

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