Utilisation d'un modèle dans le composant de votre application client - Amazon Lookout for Vision

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation d'un modèle dans le composant de votre application client

Les étapes d'utilisation d'un modèle issu d'un composant d'application client sont similaires à celles d'un modèle hébergé dans le cloud.

  1. Commencez à exécuter le modèle.

  2. Détectez les anomalies dans les images.

  3. Arrêtez le modèle s'il n'est plus nécessaire.

L'agent Amazon Lookout for Vision Edge fournit une API permettant de démarrer un modèle, de détecter des anomalies dans une image et d'arrêter un modèle. Vous pouvez également utiliser l'API pour répertorier les modèles d'un appareil et obtenir des informations sur un modèle déployé. Pour plus d'informations, veuillez consulter Référence de l'API Amazon Lookout for Vision Edge Agent.

Vous pouvez obtenir des informations sur les erreurs en vérifiant les codes d'état gRPC. Pour plus d'informations, veuillez consulter Obtenir des informations sur les erreurs.

Pour écrire votre code, vous pouvez utiliser n'importe quel langage supporté par gRPC. Nous fournissons un exemple de code Python.

Utilisation du stub dans le composant de votre application cliente

Utilisez le code suivant pour configurer l'accès à votre modèle via l'agent 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

Démarrage du modèle

Vous démarrez un modèle en appelant l'StartModelAPI. Le démarrage du modèle peut prendre un certain temps. Vous pouvez vérifier l'état actuel en appelantDescribeModel. Le modèle est en cours d'exécution si la valeur du status champ est En cours d'exécution.

Exemple de code

Remplacez component_name par le nom du composant de votre modèle.

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)

Détecter les anomalies

Vous utilisez l'DetectAnomaliesAPI pour détecter les anomalies dans une image.

L'DetectAnomaliesopération s'attend à ce que le bitmap de l'image soit transmis au format compressé RGB888. Le premier octet représente le canal rouge, le deuxième octet représente le canal vert et le troisième octet représente le canal bleu. Si vous fournissez l'image dans un format différent, tel que BGR, les prédictions DetectAnomalies sont incorrectes.

Par défaut, OpenCV utilise le format BGR pour les bitmaps d'image. Si vous utilisez OpenCV pour capturer des images à des fins d'analyseDetectAnomalies, vous devez convertir l'image au format RGB888 avant de la transmettre à. DetectAnomalies

Les images que vous fournissez DetectAnomalies doivent avoir les mêmes dimensions de largeur et de hauteur que les images que vous avez utilisées pour entraîner le modèle.

Détection des anomalies à l'aide d'octets d'image

Vous pouvez détecter des anomalies dans une image en fournissant l'image sous forme d'octets d'image. Dans l'exemple suivant, les octets de l'image sont extraits d'une image stockée dans le système de fichiers local.

Remplacez sample.jpg par le nom du fichier image que vous souhaitez analyser. Remplacez component_name par le nom du composant de votre modèle.

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

Détection des anomalies à l'aide d'un segment de mémoire partagée

Vous pouvez détecter des anomalies dans une image en fournissant l'image sous forme d'octets d'image dans le segment de mémoire partagée POSIX. Pour de meilleures performances, nous vous recommandons d'utiliser de la mémoire partagée pour les DetectAnomalies demandes. Pour plus d'informations, veuillez consulter DetectAnomalies.

Arrêter le modèle

Si vous n'utilisez plus le modèle, l'StopModelAPI pour arrêter l'exécution du modèle.

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

Répertorier des modèles sur un appareil

Vous pouvez utiliser l'ListModelsAPI pour répertorier les modèles déployés sur un appareil.

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

Décrire un modèle

Vous pouvez obtenir des informations sur un modèle déployé sur un appareil en appelant l'DescribeModelAPI. L'utilisation DescribeModel est utile pour obtenir l'état actuel d'un modèle. Par exemple, vous devez savoir si un modèle est en cours d'exécution avant de pouvoir appelerDetectAnomalies. Pour obtenir un exemple de code, veuillez consulter Démarrage du modèle.

Obtenir des informations sur les erreurs

Les codes d'état gRPC sont utilisés pour rapporter les résultats de l'API.

Vous pouvez obtenir des informations d'erreur en détectant l'RpcErrorexception, comme indiqué dans l'exemple suivant. Pour plus d'informations sur les codes d'état d'erreur, consultez la rubrique de référence relative à une API.

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