Connecteur de classification d'images ML - AWS IoT Greengrass

AWS IoT Greengrass Version 1 est entré dans la phase de durée de vie prolongée le 30 juin 2023. Pour plus d'informations, consultez la politique de AWS IoT Greengrass V1 maintenance. Après cette date, AWS IoT Greengrass V1 ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations, des corrections de bogues ou des correctifs de sécurité. Les appareils qui fonctionnent AWS IoT Greengrass V1 sous tension ne seront pas perturbés et continueront à fonctionner et à se connecter au cloud. Nous vous recommandons vivement de migrer vers AWS IoT Greengrass Version 2, qui ajoute de nouvelles fonctionnalités importantes et prend en charge des plateformes supplémentaires.

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.

Connecteur de classification d'images ML

Avertissement

Ce connecteur est passé à la phase de durée de vie prolongée et AWS IoT Greengrass ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations aux fonctionnalités existantes, des correctifs de sécurité ou des corrections de bogues. Pour plus d'informations, veuillez consulter AWS IoT Greengrass Version 1politique de maintenance.

Les connecteurs ML Image Classification fournissent un service d'inférence d'apprentissage automatique (ML) qui s'exécute sur le AWS IoT Greengrass cœur. Ce service d'inférence local effectue la classification des images à l'aide d'un modèle entraîné par l'algorithme de classification des SageMaker images.

Les fonctions Lambda définies par l'utilisateur utilisent le SDK Machine AWS IoT Greengrass Learning pour envoyer des demandes d'inférence au service d'inférence local. Le service exécute l'inférence localement et renvoie les probabilités que l'image d'entrée appartient à certaines catégories.

AWS IoT Greengrass fournit les versions suivantes de ce connecteur, qui est disponible pour plusieurs plateformes.

Version 2

Connecteur

Description et ARN

Classification d'images XML Aarch64 JTX2

Service d'inférence de classification d'images pour NVIDIA Jetson TX2. Prend en charge l'accélération GPU.

ARN : arn:aws:greengrass:region::/connectors/ImageClassificationAarch64JTX2/versions/2

Classification d'images ML x86_64

Service d'inférence de classification d'images pour les plateformes x86_64.

ARN : arn:aws:greengrass:region::/connectors/ImageClassificationx86-64/versions/2

Classification d'images ML ARMv7

Service d'inférence de classification d'images pour les plateformes ARMv7.

ARN : arn:aws:greengrass:region::/connectors/ImageClassificationARMv7/versions/2

Version 1

Connecteur

Description et ARN

Classification d'images XML Aarch64 JTX2

Service d'inférence de classification d'images pour NVIDIA Jetson TX2. Prend en charge l'accélération GPU.

ARN : arn:aws:greengrass:region::/connectors/ImageClassificationAarch64JTX2/versions/1

Classification d'images ML x86_64

Service d'inférence de classification d'images pour les plateformes x86_64.

ARN : arn:aws:greengrass:region::/connectors/ImageClassificationx86-64/versions/1

Classification d'images ML Armv7

Service d'inférence de classification d'images pour les plateformes Armv7.

ARN : arn:aws:greengrass:region::/connectors/ImageClassificationARMv7/versions/1

Pour obtenir des informations sur les changements apportés aux versions, veuillez consulter le Journal des modifications.

Prérequis

Ces connecteurs possèdent les exigences suivantes :

Version 2
  • AWS IoT GreengrassCore Software v1.9.3 ou version ultérieure.

  • Python version 3.7 ou 3.8 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.

    Note

    Pour utiliser Python 3.8, exécutez la commande suivante pour créer un lien symbolique entre le dossier d'installation par défaut de Python 3.7 et les fichiers binaires Python 3.8 installés.

    sudo ln -s path-to-python-3.8/python3.8 /usr/bin/python3.7

    Ceci configure votre appareil de sorte qu'il réponde aux exigence de Python pour AWS IoT Greengrass.

  • Dépendances pour l'infrastructure Apache MXNet installée sur l'appareil principal. Pour plus d'informations, veuillez consulter Installation des dépendances MXNet sur AWS IoT Greengrass Core.

  • Une ressource ML du groupe Greengrass qui fait référence à une source de SageMaker modèle. Ce modèle doit être entraîné par l'algorithme de classification des SageMaker images. Pour plus d'informations, consultez la section Algorithme de classification des images dans le manuel Amazon SageMaker Developer Guide.

  • Le connecteur ML Feedback a été ajouté au groupe Greengrass et configuré. Cette opération est obligatoire uniquement si vous souhaitez utiliser le connecteur pour charger les données d'entrée de modèle et publier les prédictions dans une rubrique MQTT.

  • Le rôle de groupe Greengrass est configuré pour autoriser l'sagemaker:DescribeTrainingJobaction sur la tâche de formation cible, comme illustré dans l'exemple de politique IAM suivant.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:DescribeTrainingJob" ], "Resource": "arn:aws:sagemaker:region:account-id:training-job:training-job-name" } ] }

    Pour l'exigence de rôle de groupe, vous devez configurer le rôle de manière à accorder les autorisations requises et à vous assurer que le rôle a été ajouté au groupe. Pour plus d'informations, consultez Gestion du rôle de groupe Greengrass (console) ou Gestion du rôle de groupe Greengrass (interface de ligne de commande).

    Vous pouvez octroyer un accès précis ou conditionnel aux ressources (par exemple, en utilisant un schéma d'attribution de nom avec caractère générique *). Si vous modifiez le poste de formation cible à l'avenir, veillez à mettre à jour le rôle du groupe.

  • AWS IoT GreengrassLe SDK Machine Learning v1.1.0 est requis pour interagir avec ce connecteur.

Version 1
  • AWS IoT GreengrassCore Software v1.7 ou version ultérieure.

  • Python version 2.7 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.

  • Dépendances pour l'infrastructure Apache MXNet installée sur l'appareil principal. Pour plus d'informations, veuillez consulter Installation des dépendances MXNet sur AWS IoT Greengrass Core.

  • Une ressource ML du groupe Greengrass qui fait référence à une source de SageMaker modèle. Ce modèle doit être entraîné par l'algorithme de classification des SageMaker images. Pour plus d'informations, consultez la section Algorithme de classification des images dans le manuel Amazon SageMaker Developer Guide.

  • Le rôle de groupe Greengrass est configuré pour autoriser l'sagemaker:DescribeTrainingJobaction sur la tâche de formation cible, comme illustré dans l'exemple de politique IAM suivant.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:DescribeTrainingJob" ], "Resource": "arn:aws:sagemaker:region:account-id:training-job:training-job-name" } ] }

    Pour l'exigence de rôle de groupe, vous devez configurer le rôle de manière à accorder les autorisations requises et à vous assurer que le rôle a été ajouté au groupe. Pour plus d'informations, consultez Gestion du rôle de groupe Greengrass (console) ou Gestion du rôle de groupe Greengrass (interface de ligne de commande).

    Vous pouvez octroyer un accès précis ou conditionnel aux ressources (par exemple, en utilisant un schéma d'attribution de nom avec caractère générique *). Si vous modifiez le poste de formation cible à l'avenir, veillez à mettre à jour le rôle du groupe.

  • AWS IoT GreengrassLe SDK Machine Learning v1.0.0 ou version ultérieure est requis pour interagir avec ce connecteur.

Paramètres du connecteur

Ces connecteurs fournissent les paramètres suivants.

Version 2
MLModelDestinationPath

Le chemin local absolu de la ressource ML dans l'environnement Lambda. Il s'agit du chemin de destination spécifié pour la ressource de ML.

Note

Si vous avez créé la ressource de ML dans la console, il s'agit du chemin d'accès local.

Nom d'affichage dans la AWS IoT console : chemin de destination du modèle

Nécessaire : true

Type: string

Schéma valide : .+

MLModelResourceId

ID de la ressource de ML qui référence le modèle de source.

Nom affiché dans la AWS IoT console : ressource ARN du SageMaker job

Nécessaire : true

Type: string

Schéma valide : [a-zA-Z0-9:_-]+

MLModelSageMakerJobArn

L'ARN de la tâche de SageMaker formation qui représente la source du SageMaker modèle. Le modèle doit être entraîné par l'algorithme de classification des SageMaker images.

Nom affiché dans la AWS IoT console : SageMaker job ARN

Nécessaire : true

Type: string

Schéma valide : ^arn:aws:sagemaker:[a-zA-Z0-9-]+:[0-9]+:training-job/[a-zA-Z0-9][a-zA-Z0-9-]+$

LocalInferenceServiceName

Nom du service d'inférence local. Les fonctions Lambda définies par l'utilisateur appellent le service en transmettant le nom à invoke_inference_service la fonction du SDK Machine AWS IoT Greengrass Learning. Pour voir un exemple, consultez Exemple d'utilisation.

Nom affiché dans la AWS IoT console : nom du service d'inférence local

Nécessaire : true

Type: string

Schéma valide : [a-zA-Z0-9][a-zA-Z0-9-]{1,62}

LocalInferenceServiceTimeoutSeconds

Durée (en secondes) avant laquelle la demande d'inférence est interrompue. La valeur minimale est de 1.

Nom affiché dans la AWS IoT console : Timeout (seconde)

Nécessaire : true

Type: string

Schéma valide : [1-9][0-9]*

LocalInferenceServiceMemoryLimitKB

Quantité de mémoire (en Ko) à laquelle le service a accès. La valeur minimale est de 1.

Nom affiché dans la AWS IoT console : Limite de mémoire (Ko)

Nécessaire : true

Type: string

Schéma valide : [1-9][0-9]*

GPUAcceleration

Contexte de calcul de l'UC ou du GPU (accéléré). Cette propriété s'applique uniquement au connecteur ML Image Classification Aarch64 JTX2.

Nom affiché dans la AWS IoT console : accélération du processeur graphique

Nécessaire : true

Type: string

Valeurs valides : CPU ou GPU

MLFeedbackConnectorConfigId

ID de la configuration de commentaire à utiliser pour charger les données d'entrée du modèle. Cela doit correspondre à l'ID d'une configuration de commentaire définie pour le connecteur ML Feedback.

Ce paramètre est obligatoire uniquement si vous souhaitez utiliser le connecteur ML Feedback pour charger les données d'entrée du modèle et publier des prédictions dans une rubrique MQTT.

Nom affiché dans la AWS IoT console : ID de configuration du connecteur ML Feedback

Nécessaire : false

Type: string

Schéma valide : ^$|^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$

Version 1
MLModelDestinationPath

Le chemin local absolu de la ressource ML dans l'environnement Lambda. Il s'agit du chemin de destination spécifié pour la ressource de ML.

Note

Si vous avez créé la ressource de ML dans la console, il s'agit du chemin d'accès local.

Nom d'affichage dans la AWS IoT console : chemin de destination du modèle

Nécessaire : true

Type: string

Schéma valide : .+

MLModelResourceId

ID de la ressource de ML qui référence le modèle de source.

Nom affiché dans la AWS IoT console : ressource ARN du SageMaker job

Nécessaire : true

Type: string

Schéma valide : [a-zA-Z0-9:_-]+

MLModelSageMakerJobArn

L'ARN de la tâche de SageMaker formation qui représente la source du SageMaker modèle. Le modèle doit être entraîné par l'algorithme de classification des SageMaker images.

Nom affiché dans la AWS IoT console : SageMaker job ARN

Nécessaire : true

Type: string

Schéma valide : ^arn:aws:sagemaker:[a-zA-Z0-9-]+:[0-9]+:training-job/[a-zA-Z0-9][a-zA-Z0-9-]+$

LocalInferenceServiceName

Nom du service d'inférence local. Les fonctions Lambda définies par l'utilisateur appellent le service en transmettant le nom à invoke_inference_service la fonction du SDK Machine AWS IoT Greengrass Learning. Pour voir un exemple, consultez Exemple d'utilisation.

Nom affiché dans la AWS IoT console : nom du service d'inférence local

Nécessaire : true

Type: string

Schéma valide : [a-zA-Z0-9][a-zA-Z0-9-]{1,62}

LocalInferenceServiceTimeoutSeconds

Durée (en secondes) avant laquelle la demande d'inférence est interrompue. La valeur minimale est de 1.

Nom affiché dans la AWS IoT console : Timeout (seconde)

Nécessaire : true

Type: string

Schéma valide : [1-9][0-9]*

LocalInferenceServiceMemoryLimitKB

Quantité de mémoire (en Ko) à laquelle le service a accès. La valeur minimale est de 1.

Nom affiché dans la AWS IoT console : Limite de mémoire (Ko)

Nécessaire : true

Type: string

Schéma valide : [1-9][0-9]*

GPUAcceleration

Contexte de calcul de l'UC ou du GPU (accéléré). Cette propriété s'applique uniquement au connecteur ML Image Classification Aarch64 JTX2.

Nom affiché dans la AWS IoT console : accélération du processeur graphique

Nécessaire : true

Type: string

Valeurs valides : CPU ou GPU

Exemple de création de connecteur (AWS CLI)

Les commandes CLI suivantes créent un ConnectorDefinition avec une version initiale contenant un connecteur de classification d'images ML.

Exemple : instance d'UC

Cet exemple crée une instance du connecteur ARMv7L ML Image Classification.

aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyImageClassificationConnector", "ConnectorArn": "arn:aws:greengrass:region::/connectors/ImageClassificationARMv7/versions/2", "Parameters": { "MLModelDestinationPath": "/path-to-model", "MLModelResourceId": "my-ml-resource", "MLModelSageMakerJobArn": "arn:aws:sagemaker:us-west-2:123456789012:training-job:MyImageClassifier", "LocalInferenceServiceName": "imageClassification", "LocalInferenceServiceTimeoutSeconds": "10", "LocalInferenceServiceMemoryLimitKB": "500000", "MLFeedbackConnectorConfigId": "MyConfig0" } } ] }'
Exemple : instance de GPU

Cet exemple crée une instance du connecteur ML Image Classification Aarch64 JTX2, qui prend en charge l'accélération du GPU sur une carte NVIDIA Jetson TX2.

aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyImageClassificationConnector", "ConnectorArn": "arn:aws:greengrass:region::/connectors/ImageClassificationAarch64JTX2/versions/2", "Parameters": { "MLModelDestinationPath": "/path-to-model", "MLModelResourceId": "my-ml-resource", "MLModelSageMakerJobArn": "arn:aws:sagemaker:us-west-2:123456789012:training-job:MyImageClassifier", "LocalInferenceServiceName": "imageClassification", "LocalInferenceServiceTimeoutSeconds": "10", "LocalInferenceServiceMemoryLimitKB": "500000", "GPUAcceleration": "GPU", "MLFeedbackConnectorConfigId": "MyConfig0" } } ] }'
Note

La fonction Lambda de ces connecteurs a une longue durée de vie.

Dans la AWS IoT Greengrass console, vous pouvez ajouter un connecteur depuis la page Connecteurs du groupe. Pour plus d'informations, veuillez consulter Mise en route avec les connecteurs Greengrass (console).

Données d'entrée

Ces connecteurs acceptent un fichier image comme entrée. Les fichiers image d'entrée doivent être au format jpeg ou png. Pour plus d'informations, veuillez consulter Exemple d'utilisation.

Ces connecteurs n'acceptent pas les messages MQTT comme données d'entrée.

Données de sortie

Ces connecteurs renvoient une prédiction formatée pour l'objet identifié dans l'image d'entrée :

[0.3,0.1,0.04,...]

La prédiction contient une liste de valeurs qui correspondent aux catégories utilisées dans l'ensemble de données de formation pendant la formation du modèle. Chaque valeur représente la probabilité que l'image relève de la catégorie correspondante. La catégorie avec la plus haute probabilité est la prédiction dominante.

Ces connecteurs ne publient pas les messages MQTT sous forme de données de sortie.

Exemple d'utilisation

L'exemple de fonction Lambda suivant utilise le SDK AWS IoT Greengrass Machine Learning pour interagir avec un connecteur ML Image Classification.

Note

Vous pouvez télécharger le SDK depuis la page de téléchargement du SDK AWS IoT Greengrass Machine Learning.

L'exemple initialise un client de kit de développement logiciel et appelle de façon synchrone la fonction invoke_inference_service du SDK pour appeler le service d'inférence local. Il transmet le type d'algorithme, le nom de service, le type d'image et le contenu de l'image. Ensuite, l'exemple analyse la réponse du service pour obtenir les résultats probables (prédictions).

Python 3.7
import logging from threading import Timer import numpy as np import greengrass_machine_learning_sdk as ml # We assume the inference input image is provided as a local file # to this inference client Lambda function. with open('/test_img/test.jpg', 'rb') as f: content = bytearray(f.read()) client = ml.client('inference') def infer(): logging.info('invoking Greengrass ML Inference service') try: resp = client.invoke_inference_service( AlgoType='image-classification', ServiceName='imageClassification', ContentType='image/jpeg', Body=content ) except ml.GreengrassInferenceException as e: logging.info('inference exception {}("{}")'.format(e.__class__.__name__, e)) return except ml.GreengrassDependencyException as e: logging.info('dependency exception {}("{}")'.format(e.__class__.__name__, e)) return logging.info('resp: {}'.format(resp)) predictions = resp['Body'].read().decode("utf-8") logging.info('predictions: {}'.format(predictions)) # The connector output is in the format: [0.3,0.1,0.04,...] # Remove the '[' and ']' at the beginning and end. predictions = predictions[1:-1] count = len(predictions.split(',')) predictions_arr = np.fromstring(predictions, count=count, sep=',') # Perform business logic that relies on the predictions_arr, which is an array # of probabilities. # Schedule the infer() function to run again in one second. Timer(1, infer).start() return infer() def function_handler(event, context): return
Python 2.7
import logging from threading import Timer import numpy import greengrass_machine_learning_sdk as gg_ml # The inference input image. with open("/test_img/test.jpg", "rb") as f: content = f.read() client = gg_ml.client("inference") def infer(): logging.info("Invoking Greengrass ML Inference service") try: resp = client.invoke_inference_service( AlgoType="image-classification", ServiceName="imageClassification", ContentType="image/jpeg", Body=content, ) except gg_ml.GreengrassInferenceException as e: logging.info('Inference exception %s("%s")', e.__class__.__name__, e) return except gg_ml.GreengrassDependencyException as e: logging.info('Dependency exception %s("%s")', e.__class__.__name__, e) return logging.info("Response: %s", resp) predictions = resp["Body"].read() logging.info("Predictions: %s", predictions) # The connector output is in the format: [0.3,0.1,0.04,...] # Remove the '[' and ']' at the beginning and end. predictions = predictions[1:-1] predictions_arr = numpy.fromstring(predictions, sep=",") logging.info("Split into %s predictions.", len(predictions_arr)) # Perform business logic that relies on predictions_arr, which is an array # of probabilities. # Schedule the infer() function to run again in one second. Timer(1, infer).start() infer() # In this example, the required AWS Lambda handler is never called. def function_handler(event, context): return

La invoke_inference_service fonction du SDK AWS IoT Greengrass Machine Learning accepte les arguments suivants.

Argument

Description

AlgoType

Nom du type d'algorithme à utiliser pour l'inférence. Actuellement, seul image-classification est pris en charge.

Nécessaire : true

Type: string

Valeurs valides : image-classification

ServiceName

Nom du service d'inférence local. Utilisez le nom que vous avez spécifié pour le paramètre LocalInferenceServiceName lorsque vous avez configuré le connecteur.

Nécessaire : true

Type: string

ContentType

Nom du type mime de l'image d'entrée.

Nécessaire : true

Type: string

Valeurs valides : image/jpeg, image/png

Body

Contenu du type mime de l'image d'entrée.

Nécessaire : true

Type: binary

Installation des dépendances MXNet sur AWS IoT Greengrass Core

Pour utiliser un connecteur de classification d'images ML, vous devez installer les dépendances du framework Apache MXnet sur le périphérique principal. Le connecteur utilise l'infrastructure pour servir le modèle ML.

Note

Ces connecteurs sont fournis avec une bibliothèque MXNet précompilée, de sorte que vous n'êtes pas obligé d'installer l'infrastructure MXNet elle-même sur l'appareil principal.

AWS IoT Greengrass fournit des scripts pour installer les dépendances pour les plateformes et les appareils courants suivants (ou à utiliser comme référence pour leur installation). Si vous utilisez une autre plateforme ou un autre appareil, consultez la documentation MXNet correspondant à votre configuration.

Avant d'installer les dépendances MXNet, assurez-vous que les bibliothèques système requises (avec les versions minimales spécifiées) sont présentes sur l'appareil.

NVIDIA Jetson TX2
  1. Installer CUDA Toolkit 9.0 et cuDNN 7.0. Vous pouvez suivre les instructions de Configuration d'autres appareils dans le didacticiel Démarrez.

  2. Activez les référentiels univers de sorte que le connecteur peut installer les logiciels open source maintenus par la communauté. Pour plus d'informations, consultez Repositories/Ubuntu dans la documentation Ubuntu.

    1. Ouvrez le fichier /etc/apt/sources.list.

    2. Vérifiez que les lignes suivantes ne sont pas commentées :

      deb http://ports.ubuntu.com/ubuntu-ports/ xenial universe deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial universe deb http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe
  3. Enregistrez une copie du script d'installation suivant dans un fichier nommé nvidiajtx2.sh sur l'appareil principal.

    Python 3.7Python 2.7
    Python 3.7
    #!/bin/bash set -e echo "Installing dependencies on the system..." echo 'Assuming that universe repos are enabled and checking dependencies...' apt-get -y update apt-get -y dist-upgrade apt-get install -y liblapack3 libopenblas-dev liblapack-dev libatlas-base-dev apt-get install -y python3.7 python3.7-dev python3.7 -m pip install --upgrade pip python3.7 -m pip install numpy==1.15.0 python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).' echo 'Dependency installation/upgrade complete.'
    Note

    Si OpenCV ne s'installe pas correctement à l'aide de ce script, vous pouvez essayer de générer à partir de la source. Pour plus d'informations, consultez Installation sous Linux dans la documentation OpenCV ou consultez d'autres ressources en ligne pour votre plateforme.

    Python 2.7
    #!/bin/bash set -e echo "Installing dependencies on the system..." echo 'Assuming that universe repos are enabled and checking dependencies...' apt-get -y update apt-get -y dist-upgrade apt-get install -y liblapack3 libopenblas-dev liblapack-dev libatlas-base-dev python-dev echo 'Install latest pip...' wget https://bootstrap.pypa.io/get-pip.py python get-pip.py rm get-pip.py pip install numpy==1.15.0 scipy echo 'Dependency installation/upgrade complete.'
  4. Dans le répertoire où vous avez enregistré le fichier, exécutez la commande suivante :

    sudo nvidiajtx2.sh
x86_64 (Ubuntu or Amazon Linux)
  1. Enregistrez une copie du script d'installation suivant dans un fichier nommé x86_64.sh sur l'appareil principal.

    Python 3.7Python 2.7
    Python 3.7
    #!/bin/bash set -e echo "Installing dependencies on the system..." release=$(awk -F= '/^NAME/{print $2}' /etc/os-release) if [ "$release" == '"Ubuntu"' ]; then # Ubuntu. Supports EC2 and DeepLens. DeepLens has all the dependencies installed, so # this is mostly to prepare dependencies on Ubuntu EC2 instance. apt-get -y update apt-get -y dist-upgrade apt-get install -y libgfortran3 libsm6 libxext6 libxrender1 apt-get install -y python3.7 python3.7-dev elif [ "$release" == '"Amazon Linux"' ]; then # Amazon Linux. Expect python to be installed already yum -y update yum -y upgrade yum install -y compat-gcc-48-libgfortran libSM libXrender libXext else echo "OS Release not supported: $release" exit 1 fi python3.7 -m pip install --upgrade pip python3.7 -m pip install numpy==1.15.0 python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).' echo 'Dependency installation/upgrade complete.'
    Note

    Si OpenCV ne s'installe pas correctement à l'aide de ce script, vous pouvez essayer de générer à partir de la source. Pour plus d'informations, consultez Installation sous Linux dans la documentation OpenCV ou consultez d'autres ressources en ligne pour votre plateforme.

    Python 2.7
    #!/bin/bash set -e echo "Installing dependencies on the system..." release=$(awk -F= '/^NAME/{print $2}' /etc/os-release) if [ "$release" == '"Ubuntu"' ]; then # Ubuntu. Supports EC2 and DeepLens. DeepLens has all the dependencies installed, so # this is mostly to prepare dependencies on Ubuntu EC2 instance. apt-get -y update apt-get -y dist-upgrade apt-get install -y libgfortran3 libsm6 libxext6 libxrender1 python-dev python-pip elif [ "$release" == '"Amazon Linux"' ]; then # Amazon Linux. Expect python to be installed already yum -y update yum -y upgrade yum install -y compat-gcc-48-libgfortran libSM libXrender libXext python-pip else echo "OS Release not supported: $release" exit 1 fi pip install numpy==1.15.0 scipy opencv-python echo 'Dependency installation/upgrade complete.'
  2. Dans le répertoire où vous avez enregistré le fichier, exécutez la commande suivante :

    sudo x86_64.sh
Armv7 (Raspberry Pi)
  1. Enregistrez une copie du script d'installation suivant dans un fichier nommé armv7l.sh sur l'appareil principal.

    Python 3.7Python 2.7
    Python 3.7
    #!/bin/bash set -e echo "Installing dependencies on the system..." apt-get update apt-get -y upgrade apt-get install -y liblapack3 libopenblas-dev liblapack-dev apt-get install -y python3.7 python3.7-dev python3.7 -m pip install --upgrade pip python3.7 -m pip install numpy==1.15.0 python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).' echo 'Dependency installation/upgrade complete.'
    Note

    Si OpenCV ne s'installe pas correctement à l'aide de ce script, vous pouvez essayer de générer à partir de la source. Pour plus d'informations, consultez Installation sous Linux dans la documentation OpenCV ou consultez d'autres ressources en ligne pour votre plateforme.

    Python 2.7
    #!/bin/bash set -e echo "Installing dependencies on the system..." apt-get update apt-get -y upgrade apt-get install -y liblapack3 libopenblas-dev liblapack-dev python-dev # python-opencv depends on python-numpy. The latest version in the APT repository is python-numpy-1.8.2 # This script installs python-numpy first so that python-opencv can be installed, and then install the latest # numpy-1.15.x with pip apt-get install -y python-numpy python-opencv dpkg --remove --force-depends python-numpy echo 'Install latest pip...' wget https://bootstrap.pypa.io/get-pip.py python get-pip.py rm get-pip.py pip install --upgrade numpy==1.15.0 picamera scipy echo 'Dependency installation/upgrade complete.'
  2. Dans le répertoire où vous avez enregistré le fichier, exécutez la commande suivante :

    sudo bash armv7l.sh
    Note

    Sur un Raspberry Pi, l'utilisation de pip pour installer des dépendances d'apprentissage automatique est une opération gourmande en mémoire qui peut entraîner un dépassement de la capacité mémoire de l'appareil et une absence de réponse. Pour contourner ce problème, vous pouvez augmenter temporairement l'espace d'échange :

    Dans /etc/dphys-swapfile, augmentez la valeur de la variable CONF_SWAPSIZE, puis exécutez la commande suivante pour redémarrer dphys-swapfile.

    /etc/init.d/dphys-swapfile restart

Journalisation et résolution des problèmes

Selon les paramètres de votre groupe, les journaux d'événements et d'erreurs sont écrits dans CloudWatch Logs, dans le système de fichiers local, ou dans les deux. Les journaux de ce connecteur utilisent le préfixe LocalInferenceServiceName. Si le connecteur se comporte de manière inattendue, vérifiez les journaux du connecteur. Ces derniers contiennent généralement des informations de débogage utiles, telles que les dépendances de bibliothèque ML manquantes ou la cause d'une panne de démarrage d'un connecteur.

Si le AWS IoT Greengrass groupe est configuré pour écrire des journaux locaux, le connecteur écrit des fichiers journaux dansgreengrass-root/ggc/var/log/user/region/aws/. Pour plus d'informations sur la journalisation de Greengrass, consultez. Surveillance avec les journaux AWS IoT Greengrass

Utilisez les informations suivantes pour résoudre les problèmes liés aux connecteurs ML Image Classification.

Bibliothèques système requises

Les onglets suivants répertorient les bibliothèques système requises pour chaque connecteur de classification d'images ML.

ML Image Classification Aarch64 JTX2
d'outils Version minimale
ld-linux-aarch64. so.1GLIBC_2.17
libc.so.6GLIBC_2.17
libcublas.so.9.0non applicable
libcudart.so.9.0non applicable
libcudnn.so.7non applicable
libcufft.so.9.0non applicable
libcurand.so.9.0non applicable
libcusolver.so.9.0non applicable
libgcc_s.so.1GCC_4.2.0
libgomp.so.1GOMP_4.0, OMP_1.0
libm.so.6GLIBC_2.23
libpthread.so.0GLIBC_2.17
librt.so.1GLIBC_2.17
libstdc++.so.6GLIBCXX_3.4.21, CXXABI_1.3.8
ML Image Classification x86_64
d'outils Version minimale
ld-linux-x86-64. so.2GCC_4.0.0
libc.so.6GLIBC_2.4
libgfortran.so.3GFORTRAN_1.0
libm.so.6GLIBC_2.23
libpthread.so.0GLIBC_2.2.5
librt.so.1GLIBC_2.2.5
libstdc++.so.6CXXABI_1.3.8, GLIBCXX_3.4.21
ML Image Classification Armv7
d'outils Version minimale
ld-linux-armhf.so.3GLIBC_2.4
libc.so.6GLIBC_2.7
libgcc_s.so.1GCC_4.0.0
libgfortran.so.3GFORTRAN_1.0
libm.so.6GLIBC_2.4
libpthread.so.0GLIBC_2.4
librt.so.1GLIBC_2.4
libstdc++.so.6CXXABI_1.3.8, CXXABI_ARM_1.3.3, GLIBCXX_3.4.20

Problèmes

Symptôme Solution

Sur un appareil Raspberry Pi, le message d'erreur suivant est consigné, et vous n'utilisez pas la caméra : Failed to initialize libdc1394

Exécutez la commande suivante pour désactiver le pilote :

sudo ln /dev/null /dev/raw1394

Cette opération est éphémère et le lien symbolique disparaîtra après le redémarrage. Consultez le manuel de distribution de votre système d'exploitation pour savoir comment créer automatiquement le lien au redémarrage.

Licences

Les connecteurs ML Image Classification incluent les logiciels/licences tiers suivants :

Intel OpenMP Runtime Library licensing. Le moteur d'exécution Intel® OpenMP* est doté de deux licences, une licence commerciale (COM) faisant partie des produits de la suite Intel® Parallel Studio XE et une licence open source (OSS) BSD.

Ce connecteur est publié dans le cadre du contrat de licence logicielle Greengrass Core.

Journal des modifications

Le tableau suivant décrit les modifications apportées à chaque version du connecteur.

Version

Modifications

2

Ajout du MLFeedbackConnectorConfigId paramètre pour prendre en charge l'utilisation du connecteur ML Feedback pour télécharger les données d'entrée du modèle, publier des prédictions sur un sujet MQTT et publier des métriques sur Amazon CloudWatch.

1

Première version.

Un groupe Greengrass ne peut contenir qu'une seule version du connecteur à la fois. Pour de plus amples informations sur la mise à niveau d'une version de connecteur, veuillez consulter Mise à niveau des versions du connecteur.

Consulter aussi