AWS IoT Greengrass Version 1 entrou na fase de vida útil prolongada em 30 de junho de 2023. Para obter mais informações, consulte política de manutenção do AWS IoT Greengrass V1. Após essa data, AWS IoT Greengrass V1 não lançaremos atualizações que forneçam recursos, aprimoramentos, correções de erros ou patches de segurança. Os dispositivos que funcionam AWS IoT Greengrass V1 não serão interrompidos e continuarão operando e se conectando à nuvem. É altamente recomendável que você migre para AWS IoT Greengrass Version 2, o que adiciona novos recursos significativos e suporte para plataformas adicionais.
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á.
Conector de classificação de imagem do ML
Esse conector passou para a fase de vida útil estendida e AWS IoT Greengrass
não lançará atualizações que forneçam atributos, aprimoramentos para atributos existentes, patches de segurança ou correções de erros. Para obter mais informações, consulte Política de manutenção do AWS IoT Greengrass Version 1.
Os conectores ML Image Classification fornecem um serviço de inferência de aprendizado de máquina (ML) executado no AWS IoT Greengrass núcleo. Esse serviço de inferência local realiza a classificação de imagens usando um modelo treinado pelo algoritmo de classificação de imagens de SageMaker IA.
As funções Lambda definidas pelo usuário usam o Machine AWS IoT Greengrass Learning SDK para enviar solicitações de inferência ao serviço de inferência local. O serviço executa inferência localmente e retorna probabilidades de a imagem de entrada pertencer às categorias específicas.
AWS IoT Greengrass fornece as seguintes versões desse conector, que está disponível para várias plataformas.
- Version 2
-
Conector |
Descrição e ARN |
Classificação de imagens ML Aarch64 JTX2 |
Serviço de inferência de classificação de imagens para NVIDIA Jetson. TX2 Compatível com a aceleração de GPU.
ARN: arn:aws:greengrass:region ::/connectors/ImageClassificationAarch64JTX2/versions/2 |
Classificação de imagens do ML x86_64 |
Serviço de inferência de classificação de imagem para plataformas x86_64.
ARN: arn:aws:greengrass:region ::/connectors/ImageClassificationx86-64/versions/2 |
Classificação de imagens de ML ARMv7 |
Serviço de inferência de classificação de imagens para ARMv7 plataformas.
ARN: arn:aws:greengrass:region ::/connectors/ImageClassificationARMv7/versions/2 |
- Version 1
-
Conector |
Descrição e ARN |
Classificação de imagens ML Aarch64 JTX2 |
Serviço de inferência de classificação de imagens para NVIDIA Jetson. TX2 Compatível com a aceleração de GPU.
ARN: arn:aws:greengrass:region ::/connectors/ImageClassificationAarch64JTX2/versions/1 |
Classificação de imagens do ML x86_64 |
Serviço de inferência de classificação de imagem para plataformas x86_64.
ARN: arn:aws:greengrass:region ::/connectors/ImageClassificationx86-64/versions/1 |
Classificação de imagens do ML Armv7 |
Serviço de inferência de classificação de imagem para plataformas Armv7.
ARN: arn:aws:greengrass:region ::/connectors/ImageClassificationARMv7/versions/1 |
Para obter informações sobre alterações de versão, consulte o Changelog.
Requisitos
Esses conectores têm os seguintes requisitos:
- Version 2
-
-
AWS IoT Greengrass Core Software v1.9.3 ou posterior.
-
Python, versão 3.7 ou 3.8, instalado no dispositivo de núcleo e adicionado à variável de ambiente PATH.
Para usar o Python 3.8, execute o comando a seguir para criar um symblink da pasta de instalação padrão do Python 3.7 para os binários instalados do Python 3.8.
sudo ln -s path-to-python-3.8
/python3.8 /usr/bin/python3.7
Isso configura seu dispositivo para atender ao requisito Python para AWS IoT Greengrass.
-
Dependências da MXNet estrutura Apache instalada no dispositivo principal. Para obter mais informações, consulte Instalando MXNet dependências no núcleo AWS IoT Greengrass.
-
Um recurso de ML no grupo Greengrass que faz referência a uma fonte de modelo de SageMaker IA. Esse modelo deve ser treinado pelo algoritmo de classificação de imagens de SageMaker IA. Para obter mais informações, consulte Algoritmo de classificação de imagens no Amazon SageMaker AI Developer Guide.
-
O conector de feedback do ML adicionado ao grupo do Greengrass e configurado. Isso será necessário somente se você quiser usar o conector para fazer upload de dados de entrada do modelo e publicar previsões em um tópico MQTT.
-
A função de grupo do Greengrass configurada para permitir a ação sagemaker:DescribeTrainingJob
no trabalho de treinamento de destino, conforme mostrado no seguinte exemplo de política do IAM.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sagemaker:DescribeTrainingJob"
],
"Resource": "arn:aws:sagemaker:region
:account-id
:training-job:training-job-name
"
}
]
}
Para o requisito de função de grupo, você deve configurar a função para conceder as permissões necessárias e certificar-se de que a função tenha sido adicionada ao grupo. Para ter mais informações, consulte Gerenciar a função de grupo do Greengrass (console) ou Gerenciar a função de grupo do Greengrass (CLI).
Você pode conceder acesso granular ou condicional aos recursos (por exemplo, usando um esquema de nomeação * curinga). Se você alterar o trabalho de treinamento de destino no futuro, certifique-se de atualizar a função do grupo, conforme necessário.
-
AWS IoT Greengrass O Machine Learning SDK v1.1.0 é necessário para interagir com esse conector.
- Version 1
-
-
AWS IoT Greengrass Core Software v1.7 ou posterior.
-
Python versão 2.7 instalado no dispositivo de núcleo e adicionado à variável de ambiente PATH.
-
Dependências da MXNet estrutura Apache instalada no dispositivo principal. Para obter mais informações, consulte Instalando MXNet dependências no núcleo AWS IoT Greengrass.
-
Um recurso de ML no grupo Greengrass que faz referência a uma fonte de modelo de SageMaker IA. Esse modelo deve ser treinado pelo algoritmo de classificação de imagens de SageMaker IA. Para obter mais informações, consulte Algoritmo de classificação de imagens no Amazon SageMaker AI Developer Guide.
-
A função de grupo do Greengrass configurada para permitir a ação sagemaker:DescribeTrainingJob
no trabalho de treinamento de destino, conforme mostrado no seguinte exemplo de política do IAM.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sagemaker:DescribeTrainingJob"
],
"Resource": "arn:aws:sagemaker:region
:account-id
:training-job:training-job-name
"
}
]
}
Para o requisito de função de grupo, você deve configurar a função para conceder as permissões necessárias e certificar-se de que a função tenha sido adicionada ao grupo. Para ter mais informações, consulte Gerenciar a função de grupo do Greengrass (console) ou Gerenciar a função de grupo do Greengrass (CLI).
Você pode conceder acesso granular ou condicional aos recursos (por exemplo, usando um esquema de nomeação * curinga). Se você alterar o trabalho de treinamento de destino no futuro, certifique-se de atualizar a função do grupo, conforme necessário.
-
AWS IoT Greengrass O Machine Learning SDK v1.0.0 ou posterior é necessário para interagir com esse conector.
Parâmetros do conector
Esses conectores fornecem os parâmetros a seguir.
- Version 2
-
MLModelDestinationPath
-
O caminho local absoluto do recurso do ML dentro do ambiente do Lambda. Esse é o caminho de destino especificado para o recurso de ML.
Se você criou o recurso de ML no console, este é o caminho local.
Nome de exibição no AWS IoT console: caminho de destino do modelo
Obrigatório: true
Digite: string
Padrão válido: .+
MLModelResourceId
-
O ID do recurso de ML que faz referência ao modelo de origem.
Nome de exibição no AWS IoT console: recurso ARN do SageMaker job
Obrigatório: true
Digite: string
Padrão válido: [a-zA-Z0-9:_-]+
MLModelSageMakerJobArn
-
O ARN do trabalho de treinamento de SageMaker IA que representa a fonte do modelo de SageMaker IA. O modelo deve ser treinado pelo algoritmo de classificação de imagens de SageMaker IA.
Nome de exibição no AWS IoT console: SageMaker job ARN
Obrigatório: true
Digite: string
Padrão válido: ^arn:aws:sagemaker:[a-zA-Z0-9-]+:[0-9]+:training-job/[a-zA-Z0-9][a-zA-Z0-9-]+$
LocalInferenceServiceName
-
O nome para o serviço de inferência local. As funções Lambda definidas pelo usuário invocam o serviço passando o nome para a função do SDK invoke_inference_service
do Machine AWS IoT Greengrass Learning. Para obter um exemplo, consulte Exemplo de uso.
Nome de exibição no AWS IoT console: nome do serviço de inferência local
Obrigatório: true
Digite: string
Padrão válido: [a-zA-Z0-9][a-zA-Z0-9-]{1,62}
LocalInferenceServiceTimeoutSeconds
-
O tempo (em segundos) até que a solicitação de inferência seja encerrada. O valor mínimo é 1.
Nome de exibição no AWS IoT console: Tempo limite (segundo)
Obrigatório: true
Digite: string
Padrão válido: [1-9][0-9]*
LocalInferenceServiceMemoryLimitKB
-
A quantidade de memória (em KB) que o serviço tem acesso. O valor mínimo é 1.
Nome de exibição no AWS IoT console: limite de memória (KB)
Obrigatório: true
Digite: string
Padrão válido: [1-9][0-9]*
GPUAcceleration
-
O contexto de computação CPU ou GPU (acelerada). Essa propriedade se aplica somente ao JTX2 conector ML Image Classification Aarch64.
Nome de exibição no AWS IoT console: aceleração de GPU
Obrigatório: true
Digite: string
Valores válidos: CPU
ou GPU
MLFeedbackConnectorConfigId
-
O ID da configuração de feedback a ser usada para fazer upload dos dados de entrada do modelo. Ele deve corresponder ao ID de uma configuração de feedback definida para o conector ML Feedback.
Esse parâmetro é necessário somente se você quiser usar o conector ML Feedback para fazer upload de dados de entrada do modelo e publicar previsões em um tópico MQTT.
Nome de exibição no AWS IoT console: ID de configuração do conector ML Feedback
Obrigatório: false
Digite: string
Padrão válido: ^$|^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$
- Version 1
-
MLModelDestinationPath
-
O caminho local absoluto do recurso do ML dentro do ambiente do Lambda. Esse é o caminho de destino especificado para o recurso de ML.
Se você criou o recurso de ML no console, este é o caminho local.
Nome de exibição no AWS IoT console: caminho de destino do modelo
Obrigatório: true
Digite: string
Padrão válido: .+
MLModelResourceId
-
O ID do recurso de ML que faz referência ao modelo de origem.
Nome de exibição no AWS IoT console: recurso ARN do SageMaker job
Obrigatório: true
Digite: string
Padrão válido: [a-zA-Z0-9:_-]+
MLModelSageMakerJobArn
-
O ARN do trabalho de treinamento de SageMaker IA que representa a fonte do modelo de SageMaker IA. O modelo deve ser treinado pelo algoritmo de classificação de imagens de SageMaker IA.
Nome de exibição no AWS IoT console: SageMaker job ARN
Obrigatório: true
Digite: string
Padrão válido: ^arn:aws:sagemaker:[a-zA-Z0-9-]+:[0-9]+:training-job/[a-zA-Z0-9][a-zA-Z0-9-]+$
LocalInferenceServiceName
-
O nome para o serviço de inferência local. As funções Lambda definidas pelo usuário invocam o serviço passando o nome para a função do SDK invoke_inference_service
do Machine AWS IoT Greengrass Learning. Para obter um exemplo, consulte Exemplo de uso.
Nome de exibição no AWS IoT console: nome do serviço de inferência local
Obrigatório: true
Digite: string
Padrão válido: [a-zA-Z0-9][a-zA-Z0-9-]{1,62}
LocalInferenceServiceTimeoutSeconds
-
O tempo (em segundos) até que a solicitação de inferência seja encerrada. O valor mínimo é 1.
Nome de exibição no AWS IoT console: Tempo limite (segundo)
Obrigatório: true
Digite: string
Padrão válido: [1-9][0-9]*
LocalInferenceServiceMemoryLimitKB
-
A quantidade de memória (em KB) que o serviço tem acesso. O valor mínimo é 1.
Nome de exibição no AWS IoT console: limite de memória (KB)
Obrigatório: true
Digite: string
Padrão válido: [1-9][0-9]*
GPUAcceleration
-
O contexto de computação CPU ou GPU (acelerada). Essa propriedade se aplica somente ao JTX2 conector ML Image Classification Aarch64.
Nome de exibição no AWS IoT console: aceleração de GPU
Obrigatório: true
Digite: string
Valores válidos: CPU
ou GPU
Exemplo de criação de conector (AWS CLI)
Os seguintes comandos da CLI criam um ConnectorDefinition
com uma versão inicial que contém um conector de classificação de imagem do ML.
- Exemplo: instância de CPU
-
Este exemplo cria uma instância do conector Armv7l de classificação de imagem do ML.
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"
}
}
]
}'
- Exemplo: instância de GPU
-
Este exemplo cria uma instância do JTX2 conector ML Image Classification Aarch64, que suporta aceleração de GPU em uma placa 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"
}
}
]
}'
A função do Lambda nesses conectores tem um ciclo de vida longo.
No AWS IoT Greengrass console, você pode adicionar um conector na página Conectores do grupo. Para obter mais informações, consulte Conceitos básicos de conectores do Greengrass (console).
Esses conectores aceitam um arquivo de imagem como entrada. Os arquivos de imagem de entrada devem estar no formato jpeg
ou png
. Para obter mais informações, consulte Exemplo de uso.
Esses conectores não aceitam mensagens MQTT como dados de entrada.
Dados de saída
Esses conectores retornam uma previsão formatada para o objeto identificado na imagem de entrada:
[0.3,0.1,0.04,...]
A previsão contém uma lista de valores que correspondem às categorias usadas no conjunto de dados de treinamento durante o treinamento do modelo. Cada valor representa a probabilidade de a imagem ficar na categoria correspondente. A categoria com a probabilidade mais alta é a previsão dominante.
Esses conectores não publicam mensagens MQTT como dados de saída.
Exemplo de uso
O exemplo de função do Lambda a seguir usa o SDK AWS IoT Greengrass de Machine Learning para interagir com um conector de classificação de imagem do ML.
O exemplo inicializa um cliente do SDK e de forma síncrona chama a função invoke_inference_service
do SDK para invocar o serviço de inferência local. Ela passa o tipo de algoritmo, o nome do serviço, o tipo de imagem e o conteúdo da imagem. Em seguida, o exemplo analisa a resposta do serviço para obter os resultados de probabilidade (previsões).
- 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
A invoke_inference_service
função no SDK do AWS IoT Greengrass Machine Learning aceita os seguintes argumentos.
Argumento |
Descrição |
AlgoType
|
O nome do tipo de algoritmo a ser usado para inferência. No momento, só há compatibilidade com image-classification .
Obrigatório: true
Digite: string
Valores válidos: image-classification |
ServiceName
|
O nome do serviço de inferência local. Use o nome que você especificou para o parâmetro LocalInferenceServiceName quando você configurou o conector.
Obrigatório: true
Digite: string |
ContentType
|
O tipo de mime da imagem de entrada.
Obrigatório: true
Digite: string
Valores válidos: image/jpeg, image/png |
Body
|
O conteúdo do arquivo de imagem de entrada.
Obrigatório: true
Digite: binary |
Instalando MXNet dependências no núcleo AWS IoT Greengrass
Para usar um conector ML Image Classification, você deve instalar as dependências da MXNet estrutura Apache no dispositivo principal. Os conectores usam a estrutura para fornecer o modelo de ML.
Esses conectores são fornecidos com uma MXNet biblioteca pré-compilada, portanto, você não precisa instalar a MXNet estrutura no dispositivo principal.
AWS IoT Greengrass fornece scripts para instalar as dependências das seguintes plataformas e dispositivos comuns (ou para usar como referência para instalá-los). Se você estiver usando uma plataforma ou dispositivo diferente, consulte a MXNet documentação da sua configuração.
Antes de instalar as MXNet dependências, verifique se as bibliotecas do sistema necessárias (com as versões mínimas especificadas) estão presentes no dispositivo.
- NVIDIA Jetson TX2
-
-
Instale CUDA Toolkit 9.0 e cuDNN 7.0. Você pode seguir as instruções em Configurar outros dispositivos no tutorial Conceitos básicos.
-
Habilite repositórios universe para que o conector possa instalar softwares livres mantidos pela comunidade. Para obter mais informações, consulte Repositórios/Ubuntu na documentação do Ubuntu.
-
Abra o arquivo /etc/apt/sources.list
.
-
Certifique-se de que as seguintes linhas permaneçam sem comentário.
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
-
Salve uma cópia do script de instalação a seguir em um arquivo denominado nvidiajtx2.sh
no dispositivo de núcleo.
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.'
Se o OpenCV não for instalado com êxito usando esse script, você poderá tentar compilar a partir do código-fonte. Para obter mais informações, consulte Instalação no Linux na documentação do OpenCV ou consulte outros recursos online da sua plataforma.
- 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.'
-
A partir do diretório em que você salvou o arquivo, execute o seguinte comando:
sudo nvidiajtx2.sh
- x86_64 (Ubuntu or Amazon Linux)
-
-
Salve uma cópia do script de instalação a seguir em um arquivo denominado x86_64.sh
no dispositivo de núcleo.
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.'
Se o OpenCV não for instalado com êxito usando esse script, você poderá tentar compilar a partir do código-fonte. Para obter mais informações, consulte Instalação no Linux na documentação do OpenCV ou consulte outros recursos online da sua plataforma.
- 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.'
-
A partir do diretório em que você salvou o arquivo, execute o seguinte comando:
sudo x86_64.sh
- Armv7 (Raspberry Pi)
-
-
Salve uma cópia do script de instalação a seguir em um arquivo denominado armv7l.sh
no dispositivo de núcleo.
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.'
Se o OpenCV não for instalado com êxito usando esse script, você poderá tentar compilar a partir do código-fonte. Para obter mais informações, consulte Instalação no Linux na documentação do OpenCV ou consulte outros recursos online da sua plataforma.
- 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.'
-
A partir do diretório em que você salvou o arquivo, execute o seguinte comando:
sudo bash armv7l.sh
Em um Raspberry Pi, usar o pip
para instalar dependências de machine learning é uma operação com uso intensivo de memória que pode fazer com que o dispositivo fique sem memória e deixe de responder. Como alternativa, você pode aumentar temporariamente o tamanho da permuta:
Em /etc/dphys-swapfile
, aumente o valor da variável CONF_SWAPSIZE
e, em seguida, execute o seguinte comando para reiniciar dphys-swapfile
.
/etc/init.d/dphys-swapfile restart
Registro em log e solução de problemas
Dependendo das configurações do seu grupo, os registros de eventos e erros são gravados CloudWatch nos Registros, no sistema de arquivos local ou em ambos. Os logs desse conector usam o prefixo LocalInferenceServiceName
. Se o conector se comportar de forma inesperada, verifique os logs do conector. Normalmente, eles contêm informações úteis de depuração, como uma dependência de biblioteca de ML ausente ou a causa de uma falha de startup do conector.
Se o AWS IoT Greengrass grupo estiver configurado para gravar registros locais, o conector grava arquivos de log emgreengrass-root
/ggc/var/log/user/region
/aws/
. Para obter mais informações sobre o registro em log do Greengrass, consulte Monitoramento com logs do AWS IoT Greengrass.
Use as informações a seguir para ajudar a solucionar os problemas com os conectores de classificação de imagem do ML.
Bibliotecas do sistema necessárias
As guias a seguir listam as bibliotecas do sistema necessárias para cada conector de classificação de imagem do ML.
- ML Image Classification Aarch64 JTX2
-
Biblioteca |
Versão mínima |
ld-linux-aarch64.so.1 | GLIBC_2.17 |
libc.so.6 | GLIBC_2.17 |
libcublas.so.9.0 | não aplicável |
libcudart.so.9.0 | não aplicável |
libcudnn.so.7 | não aplicável |
libcufft.so.9.0 | não aplicável |
libcurand.so.9.0 | não aplicável |
libcusolver.so.9.0 | não aplicável |
libgcc_s.so.1 | GCC_4.2.0 |
libgomp.so.1 | GOMP_4.0, OMP_1.0 |
libm.so.6 | GLIBC_2.23 |
libpthread.so.0 | GLIBC_2.17 |
librt.so.1 | GLIBC_2.17 |
libstdc++.so.6 | GLIBCXX_3.4.21, CXXABI_1.3.8 |
- ML Image Classification x86_64
-
Biblioteca |
Versão mínima |
ld-linux-x86-64.so.2 | GCC_4.0.0 |
libc.so.6 | GLIBC_2.4 |
libgfortran.so.3 | GFORTRAN_1.0 |
libm.so.6 | GLIBC_2.23 |
libpthread.so.0 | GLIBC_2.2.5 |
librt.so.1 | GLIBC_2.2.5 |
libstdc++.so.6 | CXXABI_1.3.8, GLIBCXX_3.4.21 |
- ML Image Classification Armv7
-
Biblioteca |
Versão mínima |
ld-linux-armhf.so.3 | GLIBC_2.4 |
libc.so.6 | GLIBC_2.7 |
libgcc_s.so.1 | GCC_4.0.0 |
libgfortran.so.3 | GFORTRAN_1.0 |
libm.so.6 | GLIBC_2.4 |
libpthread.so.0 | GLIBC_2.4 |
librt.so.1 | GLIBC_2.4 |
libstdc++.so.6 | CXXABI_1.3.8, CXXABI_ARM_1.3.3, GLIBCXX_3.4.20 |
Problemas
Sintomas |
Solução |
Em um Raspberry Pi, a mensagem de erro a seguir será registrada em log e você não está usando a câmera: Failed to initialize libdc1394
|
Execute o comando a seguir para desabilitar o driver:
sudo ln /dev/null /dev/raw1394
Essa operação é temporária e o symblink desaparecerá após a reinicialização. Consulte o manual de distribuição do seu sistema operacional para saber como criar automaticamente o link na reinicialização.
|
Licenças
Os conector de classificação de imagem do ML incluem o seguinte licenciamento/software de terceiros:
Licenciamento da Intel OpenMP Runtime Library. O runtime Intel® OpenMP* tem licença dupla, com uma licença comercial (COM) como parte dos produtos Intel® Parallel Studio XE Suite e uma licença de código aberto (OSS) BSD.
Esse conector é liberado de acordo com o Contrato de licença de software do Greengrass Core.
Changelog
A tabela a seguir descreve as alterações em cada versão do conector.
Versão |
Alterações |
2 |
Foi adicionado o MLFeedbackConnectorConfigId parâmetro para suportar o uso do conector ML Feedback para carregar dados de entrada do modelo, publicar previsões em um tópico do MQTT e publicar métricas na Amazon. CloudWatch
|
1 |
Versão inicial.
|
Um grupo do Greengrass só pode conter uma versão do conector por vez. Para obter informações sobre como fazer upgrade de uma versão do conector, consulte Atualizar a versões do conector.
Consulte também